Download as pdf or txt
Download as pdf or txt
You are on page 1of 37

SISTEMAS DIGITALES Año del 85 Aniversario

PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Diapositivas que hablan sobre Verilog HDL, que,


junto con otro idioma VHDL, son los lenguajes de
hardware más populares utilizados en la
industria. Verilog es solo una herramienta.

Aprenderemos sobre Verilog a través de


ejemplos.

Luego señalaré varias características del


lenguaje en el camino. Lo que significa es que el
tratamiento de Verilog NO será sistemático: habrá
muchas características que no conocerá sobre
Verilog. Sin embargo, aprenderá lo suficiente
como para especificar y diseñar circuitos digitales
razonablemente sofisticados, y debe ganar
suficiente confianza para aprender el resto por su
cuenta.

Hay muchos recursos útiles en línea disponibles


sobre los detalles de la sintaxis de Verilog, etc.
Búsquelo según lo necesite y aprenderá a
diseñar circuitos digitales utilizando Verilog
mediante el diseño de circuitos reales.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Aquí hay una lista de objetivos de las


diapositivas. Se proporcionan para que
reflexione sobre lo que se supone que
debe aprender.

Quiero, al final de esta conferencia,


darle una idea sobre la estructura
básica y la sintaxis de Verilog. Quiero
convencerlo de que la captura
esquemática NO es una buena forma
de diseñar circuitos digitales.

Finalmente, quiero que aprecies cómo


usar Verilog para especificar una pieza
de hardware en diferentes niveles de
abstracción.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Estás muy familiarizado con la captura esquemática.
Sin embargo, los métodos modernos de diseño digital
en general NO utilizan esquemas.
En cambio, un ingeniero especificaría el requisito de
diseño o el algoritmo que se implementará en alguna
forma de lenguaje informático especialmente
diseñado para describir el hardware.
Estos se denominan "Lenguajes de descripción de
hardware" (HDL). Las ventajas más importantes de
HDL como un medio para especificar su diseño digital
son:
1) Puede hacer que el diseño tome parámetros
(como el número de bits en un sumador);
2) Es mucho más fácil usar herramientas de
compilación y síntesis con un archivo de texto
que con un esquema;
3) es muy difícil expresar un algoritmo en forma de
diagrama, pero es muy fácil con un lenguaje de
computadora;

4) puede usar varios operadores de ruta de datos


como +, * etc .;

5) puede editar, almacenar y transmitir fácilmente un


archivo de texto y mucho hardware con un diagrama
esquemático. Para diseños digitales, el esquema NO
es una opción. Siempre use HDL.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Verilog es muy similar al lenguaje C.

Sin embargo, siempre debe recordar que LO ESTÁ USANDO PARA


DESCRIBIR EL HARDWARE Y NO COMO UN PROGRAMA DE
COMPUTADORA.

Puede usar Verilog para describir su hardware digital en tres niveles


diferentes de abstracción:
Nivel de comportamiento: solo se describe cómo debe comportarse el
hardware sin NINGUNA referencia al hardware digital.
Register-Transfer-Level (RTL) - Aquí la descripción asume la existencia
de registros y estos son sincronizados por una señal de reloj. Por lo
tanto, los datos digitales se transfieren de un registro al siguiente en
ciclos de reloj sucesivos. El tiempo (en términos de ciclos de reloj) se
define explícitamente en el código Verilog. Este es el nivel de diseño
que usamos con mayor frecuencia.
Nivel de puerta: esta es la descripción del nivel más bajo donde cada
puerta y su interconexión se especifican explícitamente.

Verilog no es solo un lenguaje de especificación que le dice al sistema


CAD lo que se supone que debe hacer el hardware, sino que también
incluye un entorno de simulación completo. Un compilador Verilog hace
más que asignar su código al hardware, también puede simular (o
ejecutar) su diseño para predecir el comportamiento de su circuito.

Es el lenguaje predominante utilizado para el diseño de chips.


SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Este es un módulo Verilog que especifica un multiplexor 2 a 1.

Es bastante similar a una función en C (a excepción de la palabra clave


del módulo). Es importante recordar la estructura básica de un módulo
Verilog:

• Hay un nombre de módulo: mux2to1.


• Hay una lista de puertos de interfaz: 3 entradas a, b y sel, y 2 salidas
llamadas out y outbar.

Utilice siempre nombres significativos tanto para el nombre del módulo


como para los nombres de las variables.

Debe especificar qué puerto es de entrada y qué puerto es de salida,


similar a la declaración del tipo de datos en un programa en C.

Finalmente, la función de multiplexación 2 a 1 se especifica en la


instrucción de asignación con una construcción que se encuentra en C.
Esta es una descripción del comportamiento del multiplexor: no hay
compuertas involucradas. La última declaración especifica la relación
entre out y outbar.

Es importante recordar que Verilog describe el HARDWARE, no el


código de instrucciones. Las dos instrucciones de asignación especifican
hardware que "ejecuta" o realiza las dos funciones de hardware en
paralelo. Por lo tanto, su orden no importa.
If (sel==0)
Operador out = b;
Ternario else
out = a;
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

La asignación continua especifica los circuitos


combinacionales: la salida refleja continuamente las
operaciones aplicadas a la entrada, al igual que el
hardware.

Recuerde que, a diferencia de un lenguaje de


programación, las dos declaraciones de asignación
continua aquí ESTÁN especificando hardware en
PARALELO, no en serie.

Aquí también vemos la declaración condicional que se


encuentra en C. Esto se correlaciona perfectamente
con la función de un multiplexor 2 a 1 en hardware y se
usa ampliamente en Verilog.

Además, hay muchos otros operadores booleanos y


aritméticos definidos en Verilog (como en C). Aquí hay
un resumen rápido de todos los operadores Verilog
(utilizados en una expresión).
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
TAREA 6: REALIZAR MÓDULO EN VERILOG Y SIMULAR RESULTADO
ENTREGA: Miércoles 15 antes de las 7:30am
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Mientras que el código Verilog anterior para el mux 2 a 1
solo especifica "comportamiento", aquí hay uno que
especifica una implementación de puerta del mismo circuito.

Se utilizan tres tipos de compuertas: and, or y not.

Hay redes internas (declaradas como wire) que también


deben declararse y se utilizan para conectar las puertas
entre sí.

Las palabras clave como AND, OR y XOR son especiales:


especifican puertas lógicas reales. También son especiales
porque el número de entradas a la compuerta and puede
ser 2, 3, 4, ... ¡Cualquier longitud! Tenga en cuenta que este
módulo utiliza DOS puertas AND, y tienen diferentes
nombres: a1 y a2. Estas son DOS instancias separadas de
la puerta AND. En software, "llamar" a una función simple
ejecuta el mismo código de programa. Aquí las dos
declaraciones “AND a1 (out1, ..." y “AND a2 (out2 ..."
producen dos piezas de hardware separadas. Decimos que
cada línea está "instanciando" una compuerta AND. El
cableado de las puertas se realiza mediante el uso de
puertos y cables, y depende de las posiciones de estas
"redes". Por ejemplo, out1 es la red de salida de la puerta
AND a1, y está conectada a la entrada de la puerta OR
virtual por su ubicación en la lista de puertos de la puerta.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Hasta ahora hemos usado Verilog de manera muy
específica para el hardware. "Asignar" y usar la
especificación de puerta son especiales para Verilog.
No los encuentras en C.

Aquí hay algo que se parece más a C, y se llama


"asignación de procedimiento". Por lo general, usamos
algo llamado bloque “ALWAYS" para especificar un
"procedimiento", es decir, una colección de
declaraciones secuenciales que se intercalan entre la
construcción de inicio y fin.

El bloque always necesita una lista de sensibilidad,


una lista de señales que, si ALGUNA de estas señales
cambia, se invocará el bloque always. Puedes leer
este bloque como: "Siempre en cualquier cambio en
las señales a, b o sel, haga las instrucciones entre el
comienzo y el final". En realidad, si está definiendo un
módulo de circuito combinacional, una forma aún mejor
de definir el bloque ALWAYS es usar:
ALWAYS @ * .... // siempre en cualquier cambio con
cualquier señal de entrada.

Dentro del bloque de inicio y fin, puede usar


declaraciones tipo C. En este caso, usamos la
instrucción if-else. Todas las declaraciones dentro del
bloque de inicio-fin se ejecutan secuencialmente.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Tenga en cuenta que la palabra clave Verilog


reg no implica que haya un registro creado en
el hardware.

Es mucho más como declarar una variable que


tiene un valor. Es una regla en Verilog que si
realiza una asignación a una variable DENTRO
de un bloque ALWAYS, esa variable DEBE ser
declarada reg, y NO una señal (wire).

Esta es una de las pocas peculiaridades de


Verilog que puede ser confusa para los
estudiantes.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Esta diapositiva muestra cómo


se asigna la instrucción de
procedimiento al circuito
básico de MUX. La instrucción
de asignación continua
corresponde a la puerta NOT.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Esta es otra forma de especificar el circuito


MUX.

Todavía es una asignación de


procedimiento con el bloque ALWAYS. Sin
embargo, reemplazamos la declaración if-
else con una declaración de "case".

La variable de case es sel. Como sel es una


señal (o net) de 1 bit, solo puede tomar 0 o
1. Tenga en cuenta que los diversos valores
de casos se pueden expresar en diferentes
formatos de números como se muestra en
la diapositiva.

Por ejemplo, considere 2’b10. El 2 es el


número de bits en este número. ‘B significa
que se especifica en formato binario. El
valor de este número es 10 en binario.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo Esta diapositiva demuestra por qué la
especificación del lenguaje del hardware es
mucho mejor que el diagrama esquemático.

Simplemente declarando las señales como


un bus de varios bits (8 bits [7: 0]),
cambiamos este módulo a uno que
especifique 8 multiplexores 2 a 1 separados.

Otra forma útil de especificar un bus es usar


el operador de concatenación: {…. } como
se muestra arriba.

El operador de concatenación es
particularmente útil para convertir señales
digitales de una longitud de palabra (es
decir, número de bits en una palabra) a otra.
Por ejemplo, para convertir un número sin
signo de 8 bits a [7: 0] en un número sin
signo de 13 bits b [12: 0],
simplemente puede hacer esto:

asignar b [12: 0] = {5’b0, a [7: 0]};


SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Aquí hay un ejemplo simple: el diseño de un
código hexadecimal de 4 bits para
decodificador de 7 segmentos.

Puede expresar la función de este


decodificador de 7 segmentos en tres
formas:
1) como una tabla de verdad (tenga en
cuenta que los segmentos son activos
en bajo en este ejemplo);

2) como 7 mapas K separados (mostrados


aquí son solo para el segmento [6]);

3) como ecuaciones booleanas. Esta es


probablemente la última vez que ve K-maps.

En el diseño digital práctico, dependería en


gran medida de las herramientas CAD.
En ese caso, las simplificaciones lógicas se
realizan automáticamente: ¡nunca necesita
usar K-maps para hacer la simplificación
booleana manualmente!
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Aquí hay una implementación


tediosa en forma de diagrama
esquemático del decodificador
de 7 segmentos como puertas
interconectadas. Muy difícil de
hacer y muy propenso a
errores.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Uno podría tomar un grupo de


puertas y especificar las puertas
en primitivas de compuerta
Verilog como and, or etc.

Todavía es muy tedioso. Aquí


está la implementación de la
salida [6].
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

En lugar de especificar cada


puerta por separado, aquí se usa
la instrucción de asignación
continua, mapeando la dirección
de la ecuación booleana a una
sola instrucción Verilog.

Esto es mejor!!!
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Aquí está la especificación


completa del módulo hex_to_7seg
usando declaraciones de
asignación continua.

Muestra cómo se debe escribir el


código Verilog con buenos
comentarios y documentación
clara de los puertos de entrada y
salida.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Finalmente el 4to método es el
mejor.

Usamos la construcción de
case para especificar el
comportamiento del
decodificador.

Aquí uno asigna directamente


la tabla de verdad a la
declaración del caso: fácil y
elegante.

En lugar de usar: always @ (in),


también puedes usar always @
*
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

TAREA 6: VOLVER A LEER Y CONTESTAR ESTAS PREGUNTAS


ENTREGA: Miércoles 15 antes de las 7:30am
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

En esta conferencia, iremos más allá de la sintaxis básica de Verilog


y examinaremos cómo se especifican los flip flops y otros circuitos
con reloj. También presentaré la idea de un "banco de pruebas"
como parte de una especificación de diseño.
Verilog es muy similar a C. Sin embargo, la declaración de a, b y sum en el módulo add32 Hay tres tipos diferentes de operadores booleanos:
especifica el ancho de los datos (es decir, el número de bits en cada señal a, b o sum). Esto
a menudo se conoce como un "vector" o un "bus". Aquí el ancho de los datos es de 32 bits, Los operadores bit a bit realizan lo que cabría esperar como si se usaran compuertas
y va desde el bit 31 hasta el bit 0 (por ejemplo, suma [31: 0]). Puede hacer referencia a bits paralelas para cada bit de los operandos. Por lo tanto, a & b significa que cada bit de a y
individuales utilizando el valor del índice. Por ejemplo, el bit menos significativo (LSB) de b se pasa a través de una compuerta AND.
suma es sum [0] y el bit más significativo (MSB) es sum [31]. sum [7: 0] se refiere al byte de
suma menos significativo. El operador "+" se puede utilizar para señales de cualquier ancho.
Aquí se especifica una operación de agregar de 32 bits. sum también tiene 32 bits de ancho. Los operadores lógicos solo dan como resultado 0 o 1 (es decir, resultado de 1 bit) En
Sin embargo, si a y b tienen un ancho de 32 bits, el resultado de la suma podría ser de 33 este ejemplo !A (no a) donde a = 0101, dará como resultado primero, una evaluación
bits (incluida la ejecución). Por lo tanto, esta operación podría dar lugar a una respuesta como un valor lógico (es decir, '1' lógico o verdadero) . Por lo tanto, el resultado ~ a es 0
incorrecta debido al desbordamiento en el bit de acarreo. El bit 33 está truncado. El segundo lógico (o falso).
módulo de ejemplo add32_carry muestra el mismo sumador pero con entrada de acarreo y
salida de acarreo. Tenga en cuenta el LHS de la instrucción de asignación. {Cout, sum} es Los operadores de reducción se aplican a un solo operando (y a veces se los conoce
un operador de concatenación: los contenidos dentro de los corchetes {} se concatenan como operadores unarios). Realiza la operación un bit a la vez para el operando.
juntos, a cout se le asigna el MSB del 33º bit del resultado, y los bits restantes se forman por
suma [31: 0].
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Suponga que queremos especificar un multiplexor de 3 a 1 como se muestra a la La consecuencia de esto es que se agrega un pestillo (latch) adicional inesperado al
izquierda. A la derecha hay un intento de especificar esto usando la construcción de hardware. Para hacer frente a la condición no especificada de sel = 2’b11, la salida
case siempre + en Verilog. La variable de case "sel" tiene un ancho de 2 bits y, por lo del MUX se alimenta para que se trabe. Notó que un pestillo (latch) está activado por
tanto, tiene 4 posibilidades. La declaración del case solo especifica tres de los cuatro nivel; un flipflop se dispara desde el flanco. Un pestillo (latch) tiene la propiedad de
casos posibles. Esto se conoce como una "especificación incompleta". que cuando la entrada de la puerta G es alta, Q = D (es decir, es transparente: la
entrada va directamente a la salida). Si G es bajo, el pestillo (latch) se vuelve opaco,
En Verilog, existe esta regla: Si algo no se especifica por completo, la salida debe lo que significa que conserva el valor anterior. El pestillo (latch) sombreado en verde
conservar su valor anterior cuando se produce la condición no especificada. en el diagrama y la puerta NAND de control son las consecuencias involuntarias de
este multiplexor 3 a 1 especificado de forma incompleta.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Hay dos soluciones para evitar que se agregue el pestillo(latch) no deseado. La Anteriormente hemos visto que el MUX 2 a 1 se especificaba como circuito
solución 1 es poner fuera de la declaración del caso un valor "predeterminado" para combinacional en Verilog utilizando la construcción de siempre con la lista de
salir. Aquí 1’bx (es decir, 'x') significa indefinido. La solución 2 es mejor: dentro del sensibilidad. El diagrama de la derecha muestra cómo se especifica un circuito
bloque de declaración de caso, siempre agregue la línea predeterminada. Esto secuencial cronometrado utilizando siempre el bloque, pero con una lista de
detectará TODOS los casos no especificados y evitará la introducción de los pestillos sensibilidad que incluye la palabra clave posedge (o negedge). Tenga en cuenta que la
no deseados espurios. señal de reloj clk es un nombre arbitrario, ¡podría llamarlo "fred" o cualquier otra cosa!
La lista de sensibilidad YA NO contiene las señales de entrada a, b o sel. En cambio, el
Lección: siempre incluya una asignación predeterminada en cualquier declaración de hardware se especifica para ser sensible al borde positivo de clk. Cuando esto sucede,
caso para capturar especificaciones incompletas no deseadas. la salida cambia de acuerdo con la especificación dentro del bloque always. Aquí se
muestran dos tareas ("=" y "<="). Explicaré la diferencia entre estos más adelante.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Por lo tanto, en Verilog, usted especifica flipflops usando siempre el bloque junto con
la palabra clave posedge o negedge. Aquí hay una especificación para un D-flipflop Aquí hay una especificación para el borrado asíncrono del D-flipflop. O bien el borde
con borrado síncrono que está bajo activo (es decir, borra el FF cuando clearb está positivo en el reloj o el borde negativo en clearb harán que las declaraciones dentro
bajo). Puede tener más de un bloque siempre en un módulo. Pero si este es el caso, del bloque siempre surtan efecto.
tenga en cuenta que los dos bloques siempre se ejecutarán en paralelo. Por lo tanto,
NO deben especificar la misma salida, de lo contrario existe una condición de carrera Debo recordar a todos que el código que se muestra aquí es una especificación. Son
y el resultado es impredecible. sintetizados en circuitos lógicos: NO se ejecutan como en un programa en C.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

En Verilog ‘=‘ se conoce como asignación de bloqueo. Se ejecutan en el orden en que


aparecen dentro del entorno de simulación Verilog. Entonces, la primera asignación ‘=‘ Comprender la diferencia entre ‘=‘ y ‘<=‘ es importante. Supongamos que queremos
bloquea la segunda. Esto es muy parecido a lo que sucede en los códigos C. En el especificar un registro de desplazamiento de tres etapas (es decir, tres D − FF en
ejemplo superior izquierdo, tanto a como b finalmente tienen el valor b. En el ejemplo serie como se muestra en el esquema). Aquí hay dos posibles especificaciones.
superior derecho, cada declaración se evalúa por turno y la asignación se realiza ¿Cuál crees que creará el circuito correcto y cuál está mal?
inmediatamente al final de la declaración.

La asignación sin bloque es ‘<=‘, y las declaraciones con estas asignaciones se


ejecutan en paralelo (es decir, el orden no importa). En el ejemplo inferior izquierdo, a y
b se intercambian porque puede ver que las dos tareas suceden al mismo tiempo. En el
ejemplo de abajo a la derecha, se realizan tres evaluaciones, y la asignación a x, y y z
ocurre al mismo tiempo al salir del bloque de siempre.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

La especificación de la izquierda es incorrecta. Dado que las tres asignaciones se


realizan en secuencia, out = q2 = q1 = in. Por lo tanto, el circuito resultante es ONE D − Ahora permítanos poner todo lo que ha aprendido al especificar (o diseñar) una ALU
flipflop. El lado derecho es correcto. q1, q2 y out se actualizan simultáneamente al salir de 32 bits en Verilog. Hay cinco operadores en esta ALU. Suponemos que hay tres
del bloque always. Por lo tanto, sus valores "originales" DEBEN conservarse. Por lo bloques aritméticos y tres multiplexores (dos MUX de 2 a 1 y uno MUX de 3 a 1).
tanto, esto dará como resultado que se sinteticen tres D-flipflops (es decir, se creen).
En general, siempre debe usar ‘<=‘ dentro de un bloque siempre para especificar su
circuito
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Ahora pongamos todos estos juntos. Tenga en cuenta que mxu32two se usa dos
Cada bloque de hardware se define como un módulo Verilog. Entonces tenemos los
veces y, por lo tanto, se instancia dos veces con dos nombres de instancia
siguientes módulos: mux32two −a multiplexor de 32 bits que tiene DOS entradas
diferentes: adder_mux y sub_mux. Las conexiones entre módulos están implícitas
mux32three −a multiplexor de 32 bits que tiene TRES entradas mul16 −a 16 − por −
mediante el uso de nombres de señal. Por ejemplo, las entradas de 16 bits al
16 multiplicador binario que produce un producto de 32 bits add32 −a sumador
multiplicador se toman de los 16 bits inferiores de las entradas a y b (es decir, a [15:
binario de 32 bits subtractor binario sub32 −a 32 bits
0] yb [15: 0]).
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

Para probar este módulo, podemos usar la función de comportamiento de Verilog y


En lugar de especificar el sumador a través del operador "+", aquí hay un ejemplo de especificar un módulo de prueba conocido como testbench. La primera instrucción
un sumador de 4 bits especificado como operaciones lógicas de bajo nivel. crea una instancia del módulo full_adder_4bit. El bloque inicial y las palabras clave #
<time> especifican cómo se ejercitaría o probaría el módulo. La idea es que una vez
que haya creado este banco de pruebas, podría cambiar el diseño de los módulos
full_adder_4bit y hacer que se prueben exactamente de la misma manera sin tocar
nuevamente el banco de pruebas.
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo

You might also like