Paso 18: VM 4.1: el bloque de siempre
Si alguien menciona las palabras "Verilog" y "Comportamiento" en la misma frase, su cerebro debe que inmediatamente que "bloquear siempre". No hay una verdadera traducción entre un siempre cuadra y nada en un lenguaje como C y C++, pero el concepto no es difícil de entender. Pero si debe tener una comparación con C y C++, un bloque está siempre como un tiempo bucle que tiene condición de cuando evaluar es un lío de if declaraciones.En Resumen, un bloque es siempre una sección de Verilog código de lógica que se evalúa cada vez que cambia la condición del desencadenador.
¿Qué significa esto? Echemos un vistazo a un básico siempre bloque para un circuito con dos entradas, sw0 y sw1.
siempre @ (sw0, sw1)
comenzar
final
No hay ningún código de cuerpo a este bloque, pero vamos a ignorar que por el momento. Aviso el ' que procede "siempre" ("siempre" es una palabra clave de Verilog). Observe también la declaración dentro de los paréntesis: "sw0, sw1".
Usando una simple tabla de verdad, sabemos que para dos entradas hay un máximo de 4 Estados únicos podrían ser las entradas en: ambas lógica alta, lógica bajo y uno alto bajo para ambas entradas.
El "siempre @ (sw0, sw1)" esencialmente dice "si en cualquier momento cualquiera de entrada cambia de su estado (es decir, cambiar de fila en la tabla de verdad) luego volver a evaluar el siguiente código:".
Esto no sería demasiado simple para escribir en C y C++, pero en Verilog es así de simple. Un siempre bloque se vuelve a evaluar el código dentro de su ámbito (entre las instrucciones begin y end, tras la declaración de "siempre") cuando uno de la lista disparadores (la lista se denomina lista de sensibilidad) ya sea desde una lógica uno cambia a una lógica cero o desde una lógica cero a una lógica uno. Puedes pensar en un componente de circuito de lógica común o dos (o un montón) que podría ser implementada más fácilmente en un bloque siempre?
El ejemplo clásico es el multiplexor, o mux. Cuando ninguna de las entradas de selección cambia, el mux tiene que volver a decidir lo que de entrada para pasar a la salida. El siguiente pocos módulos Tutorial cubre qué tipo de código podemos escribir "dentro" de un bloque de siempre.
Pro tip: sólo un bloque siempre por módulo de Verilog (.v archivo). Ajustar la lista de sensibilidad en lugar de intentar hacer otro bloque.
Pista (duplicado): sólo puede establecer los valores de un registro en un bloque siempre, asignar no valores de tipo alambre. Sin embargo, más adelante puede, asignar el alambre para ser igual al valor de reg.