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

Verilog-Gate-Verzögerung

Digitale Elemente sind binäre Einheiten und können nur einen der beiden Werte halten - 0 und 1. Der Übergang von 0 auf 1 und 1 auf 0 hat jedoch eine Übergangsverzögerung, ebenso wie jedes Gatterelement, um den Wert vom Eingang zu seinem Ausgang weiterzuleiten.

Zum Beispiel muss ein UND-Gatter mit zwei Eingängen den Ausgang auf 1 schalten, wenn beide Eingänge 1 werden, und zurück auf 0, wenn einer seiner Eingänge 0 wird. Diese Gatter- und Pin-zu-Pin-Verzögerungen können in Verilog angegeben werden, wenn logische Grundelemente instanziiert werden.

Anstiegs-, Abfall- und Abschaltverzögerungen

Die Zeit, die der Ausgang eines Gatters benötigt, um von einem bestimmten Wert auf 1 zu wechseln, wird als Anstieg bezeichnet Verzögerung. Die Zeit, die der Ausgang eines Gatters benötigt, um von einem bestimmten Wert auf 0 zu wechseln, wird als Abfall bezeichnet Verzögerung. Die Zeit, die der Ausgang eines Gatters benötigt, um von einem bestimmten Wert zu einer hohen Impedanz zu wechseln, wird als Ausschalten bezeichnet Verzögerung.

Diese Verzögerungen sind tatsächlich auf jedes Signal anwendbar, da sie alle in realen Schaltungen jederzeit ansteigen oder abfallen können und nicht nur auf Ausgänge von Gattern beschränkt sind. Es gibt drei Möglichkeiten, Gate-Verzögerungen darzustellen, und das Zwei-Verzögerungs-Format kann auf die meisten Grundelemente angewendet werden, deren Ausgänge nicht zu hoher Impedanz übergehen. So wie ein Format mit drei Verzögerungen nicht auf ein UND-Gatter angewendet werden kann, da der Ausgang für keine Eingangskombination auf Z geht.

  
  
// Single delay specified - used for all three types of transition delays
or #(<delay>) o1 (out, a, b);

// Two delays specified - used for Rise and Fall transitions
or #(<rise>, <fall>) o1 (out, a, b);

// Three delays specified - used for Rise, Fall and Turn-off transitions
or #(<rise>, <fall>, <turn_off>) o1 (out, a, b);

  

Wenn nur eine einzige Verzögerung angegeben wird, verwenden alle drei Arten von Verzögerungen denselben angegebenen Wert. Wenn zwei Verzögerungen angegeben sind, steht die erste für Anstieg und der zweite steht für Fall Verzögerung. Wenn drei Verzögerungen angegeben sind, stellen sie Anstieg dar , fallen und Ausschalten Verzögerungen bzw..

One-Delay-Format

  
  
module des (	input 	a, b,
            	output out1, out2);

	// AND gate has 2 time unit gate delay
  and 		#(2) o1 (out1, a, b);
  
  // BUFIF0 gate has 3 time unit gate delay
  bufif0 	#(3) b1 (out2, a, b);
  
endmodule

  
  
  
module tb;
  reg a, b;
  wire out1, out2;
  
  des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
  
  initial begin
    {a, b} <= 0;
    
    $monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
    
    #10 a <= 1;
    #10 b <= 1;
    #10 a <= 0;
    #10 b <= 0;
  end
endmodule

  

Sehen Sie, dass die Ausgabe von AND Gates ändern sich 2 Zeiteinheiten, nachdem sich einer ihrer Eingänge geändert hat. Beispielsweise wird b zu 1, während a bei T=20 bereits 1 ist. Aber der Ausgang wird nur bei T =22 1. In ähnlicher Weise geht a bei T=30 auf Null zurück und der Ausgang erhält bei T=32 den neuen Wert.

Die Gate-Verzögerung ist für BUFIF0 mit 3 Zeiteinheiten angegeben und daher, wenn b von 0 auf 1 wechselt, während a bereits auf 1 ist, dauert die Ausgabe 3 Zeiteinheiten, um auf Z aktualisiert zu werden, und tut dies schließlich bei T=23.

Simulationsprotokoll
ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=2 a=0 b=0 and=0 bufif0=x
T=3 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=13 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=23 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=32 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=43 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Zwei Verzögerungsformat

Wenden wir dieselbe oben gezeigte Testbench auf ein anderes Verilog-Modell an, das unten gezeigt wird, wo aufsteigen und fallen Verzögerungen werden ausdrücklich erwähnt.

  
  
module des (	input 	a, b,
            	output out1, out2);

  and #(2, 3) o1 (out1, a, b);
  bufif0 #(4, 5) b1 (out2, a, b);
  
endmodule

  
Simulationsprotokoll
ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=5 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=14 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=24 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=45 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Drei-Verzögerungs-Format

  
  
module des (	input 	a, b,
            	output out1, out2);

  and #(2, 3) o1 (out1, a, b);
  bufif0 #(5, 6, 7) b1 (out2, a, b);
  
endmodule

  
Simulationsprotokoll
ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=3 a=0 b=0 and=0 bufif0=x
T=6 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=15 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=22 a=1 b=1 and=1 bufif0=1
T=27 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=33 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=46 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.

Min./Typ./Max. Verzögerungen

Die Verzögerungen sind in unterschiedlichen Teilen des hergestellten Chips nicht gleich, noch sind sie bei unterschiedlichen Temperaturen und anderen Variationen gleich. Daher bietet Verilog auch eine zusätzliche Steuerungsebene für jeden der oben genannten Verzögerungstypen. Jede digitale Gatter- und Transistorzelle hat eine minimale, typische und maximale Verzögerung, die basierend auf dem Prozessknoten angegeben ist, und wird normalerweise von Bibliotheken von Fertigungsgießereien bereitgestellt.

Für jede Verzögerungsart – Anstieg, Abfall und Abschaltung – drei Werte min , tippen und max können angegeben werden und stehen für minimale, typische und maximale Verzögerungen.

  
  
module des (	input 	a, b,
            	output out1, out2);

  and #(2:3:4, 3:4:5) o1 (out1, a, b);
  bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
  
endmodule

  
Simulationsprotokoll
ncsim> run
T=0 a=0 b=0 and=x bufif0=x
T=4 a=0 b=0 and=0 bufif0=x
T=7 a=0 b=0 and=0 bufif0=0
T=10 a=1 b=0 and=0 bufif0=0
T=16 a=1 b=0 and=0 bufif0=1
T=20 a=1 b=1 and=0 bufif0=1
T=23 a=1 b=1 and=1 bufif0=1
T=28 a=1 b=1 and=1 bufif0=z
T=30 a=0 b=1 and=1 bufif0=z
T=34 a=0 b=1 and=0 bufif0=z
T=40 a=0 b=0 and=0 bufif0=z
T=47 a=0 b=0 and=0 bufif0=0
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Aufgaben
  4. Verilog-Blockierung und Nicht-Blockierung
  5. Verilog-Verzögerungssteuerung
  6. Verilog Inter- und Intra-Auftragsverzögerung
  7. Modellierung auf Gatterebene
  8. Beispiele für Verilog-Gate-Level
  9. Verilog-Taktgenerator
  10. Verilog Math-Funktionen