Professional Documents
Culture Documents
13 Verilog
13 Verilog
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
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:
Esto es mejor!!!
SISTEMAS DIGITALES Año del 85 Aniversario
PERIODO 2020-02
Mtro. Ricardo Antonio Orozco Lugo
Usamos la construcción de
case para especificar el
comportamiento del
decodificador.
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
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