D Verriegelung
Ein Flip-Flop erfasst Daten an seinem Eingang an der positiven oder negativen Flanke einer Uhr. Es ist wichtig zu beachten, dass alles, was mit den Daten nach der Taktflanke bis zur nächsten Taktflanke passiert, nicht in der Ausgabe widergespiegelt wird. Ein Riegel erfasst andererseits nicht an der Flanke eines Takts, stattdessen folgt der Ausgang dem Eingang, solange der Aktivierungsstift aktiviert ist.
Gestaltung
In diesem Beispiel bauen wir ein Latch mit drei Eingängen und einem Ausgang. Die Eingabe d steht für Daten, die entweder 0 oder 1 sein können, rstn steht für Active-Low-Reset und en steht für Freigabe, die verwendet wird, um die Eingangsdaten mit dem Ausgang zu verriegeln. Zurücksetzen auf Low-Aktiv bedeutet einfach, dass das Designelement zurückgesetzt wird, wenn dieser Eingang auf 0 geht, oder mit anderen Worten, das Zurücksetzen ist aktiv, wenn sein Wert niedrig ist. Der Wert der Ausgabe q wird durch die Eingaben d bestimmt , de und rstn .
module d_latch ( input d, // 1-bit input pin for data
input en, // 1-bit input pin for enabling the latch
input rstn, // 1-bit input pin for active-low reset
output reg q); // 1-bit output pin for data output
// This always block is "always" triggered whenever en/rstn/d changes
// If reset is asserted then output will be zero
// Else as long as enable is high, output q follows input d
always @ (en or rstn or d)
if (!rstn)
q <= 0;
else
if (en)
q <= d;
endmodule
Beachten Sie, dass die Sensitivitätsliste zum always
gehört Block enthält alle Signale, die zur Aktualisierung des Ausgangs erforderlich sind. Dieser Block wird immer dann ausgelöst, wenn eines der Signale in der Empfindlichkeitsliste seinen Wert ändert. Auch q bekommt den Wert von d nur wenn en ist hoch und daher positiv verriegeln.
Schematisch
Testbench
module tb_latch;
// Declare variables that can be used to drive values to the design
reg d;
reg en;
reg rstn;
reg [2:0] delay;
reg [1:0] delay2;
integer i;
// Instantiate design and connect design ports with TB signals
d_latch dl0 ( .d (d),
.en (en),
.rstn (rstn),
.q (q));
// This initial block forms the stimulus to test the design
initial begin
$monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
// 1. Initialize testbench variables
d <= 0;
en <= 0;
rstn <= 0;
// 2. Release reset
#10 rstn <= 1;
// 3. Randomly change d and enable
for (i = 0; i < 5; i=i+1) begin
delay = $random;
delay2 = $random;
#(delay2) en <= ~en;
#(delay) d <= i;
end
end
endmodule
Damit unsere Testbench Signale zufälliger bestätigt und deaktiviert, haben wir einen reg
deklariert Variable namens Verzögerung der Größe 3 Bit, so dass es jeden Wert von 0 bis 7 annehmen kann. Dann die Verzögerung Variable wird verwendet, um die Zuweisung von d zu verzögern und en um in jeder Schleife unterschiedliche Muster zu erhalten.
Ausgabe
Simulationsprotokollncsim> run [0] en=0 d=0 q=0 [11] en=1 d=0 q=0 [18] en=0 d=0 q=0 [19] en=0 d=1 q=0 [20] en=1 d=1 q=1 [25] en=1 d=0 q=0 [27] en=0 d=0 q=0 [32] en=0 d=1 q=0 [33] en=1 d=1 q=1 [34] en=1 d=0 q=0 ncsim: *W,RNQUIE: Simulation is complete.
Klicken Sie auf das Bild, um es zu vergrößern.
Verilog
- Common-Emitter-Verstärker
- Einfacher Operationsverstärker
- Präzisions-Spannungsfolger
- C# Grundlegende Ein- und Ausgabe
- C++ Basic Input/Output
- C Eingang Ausgang (E/A)
- Python-Eingabe, -Ausgabe und -Import
- Java Basic Input und Output
- C++ Basic Input/Output:Cout, Cin, Cerr Beispiel
- C - Eingang und Ausgang