Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Comprender los retrasos inter e intra asignación en Verilog

Las declaraciones de retraso en Verilog pueden tener retrasos especificados ya sea en el lado izquierdo o derecho del operador de asignación.

Retrasos inter-asignación

// Retraso especificado en el lado izquierdo
#<retraso> <LHS> = <RHS>

Una declaración de retraso inter-asignación tiene el valor de retraso en el LHS del operador de asignación. Esto indica que la declaración en sí se ejecuta después de que el retraso expira, y es la forma más comúnmente usada de control de retraso.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Inicializar todas las señales a 0 en tiempo 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    // Retraso inter-asignación: Esperar #5 unidades de tiempo
    // y luego asignar a y c a 1. Nota que 'a' y 'c'
    // se actualizan al final del paso de tiempo actual
    #5 a <= 1;
    c <= 1;
    // Retraso inter-asignación: Esperar #5 unidades de tiempo
    // y luego asignar 'q' con cualquier valor que RHS obtenga
    // evaluado a
    #5 q <= a & b | c;
    #20;
  end
endmodule

Tenga en cuenta que q se vuelve 1 en 10 unidades de tiempo porque la declaración se evalúa en 10 unidades de tiempo y RHS que es una combinación de a, b y c se evalúa a 1.

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Retrasos intra-asignación

// Retraso especificado en el lado derecho
<LHS> = #<retraso> <RHS>

Un retraso intra-asignación es aquel donde hay un retraso en el RHS del operador de asignación. Esto indica que la declaración se evalúa y los valores de todas las señales en el RHS se capturan primero. Luego se asigna a la señal resultante solo después de que el retraso expira.

module tb;
  reg a, b, c, q;
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    // Inicializar todas las señales a 0 en tiempo 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    // Retraso inter-asignación: Esperar #5 unidades de tiempo
    // y luego asignar a y c a 1. Nota que 'a' y 'c'
    // se actualizan al final del paso de tiempo actual
    #5 a <= 1;
    c <= 1;
    // Retraso intra-asignación: Primero ejecutar la declaración
    // luego esperar 5 unidades de tiempo y luego asignar el valor
    // evaluado a q
    q <= #5 a & b | c;
    #20;
  end
endmodule

Tenga en cuenta que la asignación a q falta en el log !

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

Esto es porque en 5 unidades de tiempo, a y c se asignan usando declaraciones no bloqueantes. Y el comportamiento de las declaraciones no bloqueantes es tal que RHS se evalúa, pero se asigna a la variable solo al final de ese paso de tiempo.

Así que el valor de a y c se evalúa a 1 pero aún no se ha asignado cuando la siguiente declaración no bloqueante que es la de q se ejecuta. Así que cuando RHS de q se evalúa, a y c aún tienen el valor antiguo de 0 y por tanto $monitor no detecta un cambio para mostrar la declaración.

Para observar el cambio, cambiemos las declaraciones de asignación a a y c de no bloqueante a bloqueante.

...
// No bloqueante cambiado a bloqueante y el resto del
// código permanece igual
#5 a = 1;
c = 1;
q <= #5 a & b | c;
...
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Fundamentos de Verilog: Diseñando tu primera compuerta AND
  2. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  3. Dominar la sintaxis de Verilog: Reglas clave y mejores prácticas
  4. Dominar la concatenación en Verilog: Guía práctica
  5. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  6. Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
  7. Dominar las funciones en Verilog para diseño RTL eficiente
  8. Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso
  9. Comprender el control de retraso en Verilog: Técnicas de temporización y mejores prácticas
  10. Comprender los retrasos de puertas en Verilog: Temporización precisa para diseños digitales confiables
  11. Generador de reloj en Verilog: Guía de diseño e implementación