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

Retraso de asignación inter e intra de Verilog

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

Retrasos entre tareas

  
  
	// Delay is specified on the left side
	#<delay> <LHS> = <RHS>

  

Una inter-tarea declaración de retraso tiene valor de retraso en el LHS del operador de asignación. Esto indica que la instrucción en sí se ejecuta después el retraso caduca y es la forma más común 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);
    
    // Initialize all signals to 0 at time 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign 'q' with whatever value RHS gets
    // evaluated to
    #5 q <= a & b | c;

    #20;
  end
  
endmodule

  

Tenga en cuenta que q se convierte en 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 en 1.

Registro de simulación
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 dentro de la tarea

  
  
	// Delay is specified on the right side
	<LHS> = #<delay> <RHS>

  

Una intra-tarea retraso es aquel en el que 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 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);
  
	// Initialize all signals to 0 at time 0  
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;

    // Intra-assignment delay: First execute the statement
    // then wait for 5 time units and then assign the evaluated
    // value to q
    q <= #5 a & b | c;
    
    #20;
  end
endmodule

  

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

Registro de simulación
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 se debe a que en 5 unidades de tiempo, a y c se asignan mediante sentencias de no bloqueo. Y el comportamiento de no bloqueo declaraciones es tal que RHS se evalúa, pero se asigna a la variable solo al final de ese paso de tiempo.

Por lo tanto, el valor de a y c se evalúa como 1, pero aún no se asigna cuando se ejecuta la siguiente declaración de no bloqueo, que es la de q. Entonces, cuando se evalúa RHS de q, a y c todavía tienen el valor anterior de 0 y, por lo tanto, $monitor no detecta un cambio para mostrar la declaración.

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

  
  
	...
	
	// Non-blocking changed to blocking and rest of the
	// code remains the same
    #5  a = 1;
    	c = 1;
    
    q <= #5 a & b | c;
    
   	...

  
Registro de simulación
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. Introducción a Verilog
  2. Tutorial de Verilog
  3. sintaxis de Verilog
  4. Concatenación Verilog
  5. Asignaciones de Verilog
  6. Bloqueo y no bloqueo de Verilog
  7. Funciones de Verilog
  8. Tarea Verilog
  9. Control de retardo de Verilog
  10. Retardo de puerta Verilog
  11. Generador de reloj Verilog