Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog Inter- und Intra-Auftragsverzögerung

Verilog-Verzögerungsanweisungen können Verzögerungen haben, die entweder auf der linken oder rechten Seite des Zuweisungsoperators angegeben sind.

Verzögerungen zwischen Zuweisungen

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

  

Eine Zwischenzuordnung Verzögerungsanweisung hat Verzögerungswert auf der linken Seite des Zuweisungsoperators. Dies zeigt an, dass die Anweisung selbst nach ausgeführt wird die Verzögerung abläuft und die am häufigsten verwendete Form der Verzögerungskontrolle ist.

  
  
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

  

Beachten Sie, dass q zum Zeitpunkt 10 Einheiten 1 wird, da die Anweisung bei 10 Zeiteinheiten ausgewertet wird und RHS, das eine Kombination aus a, b und c ist, zu 1 ausgewertet wird.

Simulationsprotokoll
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.

Verzögerungen innerhalb der Zuweisung

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

  

Eine interne Zuweisung Verzögerung ist eine, bei der es eine Verzögerung auf der RHS des Zuweisungsoperators gibt. Dies zeigt an, dass die Anweisung ausgewertet wird und die Werte aller Signale auf der rechten Seite zuerst erfasst werden. Dann wird es erst nach dem resultierenden Signal zugeordnet die Verzögerung läuft ab.

  
  
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

  

Beachten Sie, dass die Zuordnung zu q im Protokoll fehlt !

Simulationsprotokoll
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.

Dies liegt daran, dass bei 5 Zeiteinheiten a und c mit nicht blockierenden Anweisungen zugewiesen werden. Und das Verhalten der Nicht-Blockierung Anweisungen ist so, dass RHS ausgewertet wird, aber erst am Ende dieses Zeitschritts der Variablen zugewiesen wird.

Der Wert von a und c wird also auf 1 ausgewertet, aber noch nicht zugewiesen, wenn die nächste nicht blockierende Anweisung, die die von q ist, ausgeführt wird. Wenn also die RHS von q ausgewertet wird, haben a und c immer noch den alten Wert 0 und daher $monitor erkennt keine Änderung zur Anzeige der Anweisung.

Um die Änderung zu beobachten, ändern wir die Zuweisungsanweisungen für a und c von nicht blockierend zu blockierend.

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

  
Simulationsprotokoll
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. Einführung in Verilog
  2. Verilog-Tutorial
  3. Verilog-Verkettung
  4. Verilog-Aufgaben
  5. Verilog-Blockierung und Nicht-Blockierung
  6. Verilog-Funktionen
  7. Verilog-Aufgabe
  8. Verilog-Verzögerungssteuerung
  9. Verilog-Gate-Verzögerung
  10. Verilog-Taktgenerator