Uso de verilog siempre

Tabla de contenido

Introducción:

Escenario de aplicación:

Introducción a la gramática:

Definición y función de lista sensible:


Introducción:

    El bloque de sentencias always comienza a ejecutar las sentencias de comportamiento en él desde el momento de la simulación 0; después de que se ejecuta el último, comienza a ejecutar la primera sentencia en él, y así sucesivamente, hasta que finaliza toda la simulación. Por lo tanto, el bloque siempre se usa a menudo para modelar un conjunto de actividades repetidas en un circuito digital.

Escenario de aplicación:

El bloque always es una sintaxis utilizada en Verilog para describir la lógica combinacional y la lógica secuencial.

También se menciona en la sección de sintaxis anterior.

Lo que debe agregarse es que puede haber múltiples bloques siempre en un diseño, o debe haber muchos bloques siempre.

Todos estos bloques de hardware funcionan de forma independiente y simultánea. Las conexiones entre cada bloque son las que determinan el flujo de datos. Para simular este comportamiento, un bloque siempre se convierte en un proceso continuo (es imposible que el hardware funcione de forma intermitente), cuando una señal en la lista sensible cambia, se activará y realizará algunas acciones (declaraciones dentro del bloque siempre). bloquear)

Introducción a la gramática:

La diferencia entre siempre y siempre@(*)

Cuando hay @, cada vez que se ejecuta una instrucción, se deben cumplir las condiciones entre paréntesis para continuar con la ejecución de la instrucción, de lo contrario no se ejecutará.

always@ (lista de eventos sensibles) se usa para describir la lógica temporal;

Eventos sensibles (flanco ascendente posedge, flanco descendente negedge); siempre @ (posedge clk)

o nivel. Siempre@(a)

Verilog estipula que always@() se refiere al cambio de todas las señales de entrada en el bloque always como una lista sensible, es decir, solo cuando la señal de entrada en el bloque always@(*) cambia durante la simulación, la señal descrita en el bloque Sólo entonces habrá cambios.

Si no hay @, la señal de reloj generalmente se genera en el banco de pruebas, lo que significa que no se cumplirán las condiciones específicas.Después de una ejecución, la siguiente ejecución continuará inmediatamente y la ejecución se repetirá. siempre #5 CLK=~CLK;

Cuando hay @, cada vez que se ejecuta la sentencia, se debe cumplir la condición entre paréntesis para continuar con la ejecución de la sentencia, de lo contrario no se ejecutará

La declaración always@() significa que cuando cambia cualquier señal de entrada o nivel en el módulo always,

La sentencia always se ejecuta continuamente durante la simulación. La declaración inicial se ejecuta solo una vez, mientras que la declaración siempre está continuamente activa hasta que finaliza la simulación.
Sin embargo, ya sea que se ejecute o no el proceso seguido por la sentencia always block, se ejecuta una vez si se cumple y se ejecuta una vez si se cumple, hasta el final del programa.

Se ejecutarán los módulos debajo de esta instrucción.
1. Hay dos formas de activar la sentencia always. La primera es la activación de nivel, como siempre @(a o b o c), a, b y c son todas variables, y cuando una de ellas cambia, se ejecutará la siguiente instrucción.
2. El segundo se activa por flanco, como siempre @(posge clk o negedge rstn), es decir, cuando el reloj está en el flanco ascendente o descendente, se ejecuta la instrucción.
3. Para always@(), significa que los dos métodos de activación anteriores están incluidos, y cualquier cambio en cualquiera de ellos activará la instrucción.

  1. siempre  @(A  o  B  o  Cin)  comienzan
  2.     Suma = (A^B)^Cin;
  3.     T1 = A y Cin;
  4.     T2 = B y Cin;
  5.     T3 = A y B;
  6.     Cout=(T1 | T2) | T3;
  7.  fin

Definición y función de lista sensible:

La condición que desencadena la declaración dentro del bloque siempre.

Solo hay una declaración, y no hay necesidad de usar begin-end; la segunda es que hay varias sintaxis, que deben envolverse con begin-end. Se recomienda envolverlos todos con comienzo y fin, de modo que el formulario sea relativamente fijo, y sea relativamente fácil de leer y formar un estilo fijo.

Siempre que cambie el nivel de la señal en la lista de señales sensibles, la declaración en el módulo siempre se ejecutará una vez, por lo que el diseñador debe enumerar todas las señales de entrada y las señales de juicio condicional en la lista de señales.

A veces, una lista de señales incompleta puede causar resultados de simulación y síntesis diferentes, por lo que es necesario garantizar la integridad de las señales sensibles.

Cuando la señal sensible está incompleta, el resultado de la simulación será diferente, porque el simulador no complementará automáticamente la tabla de señales sensibles cuando esté funcionando.

Supongo que te gusta

Origin blog.csdn.net/whm128/article/details/131600534
Recomendado
Clasificación