Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Délai Verilog Inter et Intra Affectation

Les déclarations de retard Verilog peuvent avoir des retards spécifiés soit sur le côté gauche, soit sur le côté droit de l'opérateur d'affectation.

Retards entre affectations

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

  

Une inter-affectation L'instruction de retard a une valeur de retard sur le LHS de l'opérateur d'affectation. Cela indique que l'instruction elle-même est exécutée après le délai expire et est la forme de contrôle de délai la plus couramment utilisée.

  
  
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

  

Notez que q devient 1 au temps 10 unités car l'instruction est évaluée à 10 unités de temps et RHS qui est une combinaison de a, b et c vaut 1.

Journal de simulation
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.

Retards intra-affectation

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

  

Un intra-mission retard est celui où il y a un retard sur le RHS de l'opérateur d'assignation. Cela indique que l'instruction est évaluée et que les valeurs de tous les signaux sur le RHS sont capturées en premier. Ensuite, il est affecté au signal résultant uniquement après le délai expire.

  
  
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

  

Notez que l'affectation à q est manquante dans le journal !

Journal de simulation
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.

En effet, à 5 unités de temps, a et c sont affectés à l'aide d'instructions non bloquantes. Et le comportement de non bloquant est telle que RHS est évalué, mais n'est affecté à la variable qu'à la fin de ce pas de temps.

Ainsi, la valeur de a et c est évaluée à 1 mais pas encore affectée lorsque la prochaine instruction non bloquante qui est celle de q est exécutée. Ainsi, lorsque RHS de q est évalué, a et c ont toujours l'ancienne valeur de 0 et donc $monitor ne détecte pas de changement pour afficher la déclaration.

Pour observer le changement, changeons les instructions d'affectation en a et c de non bloquant à bloquant.

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

  
Journal de simulation
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. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Contrôle des délais Verilog
  8. Délai de porte Verilog
  9. Générateur d'horloge Verilog