D Vergrendeling
Een flip-flop vangt gegevens op aan de ingang aan de positieve of negatieve flank van een klok. Het belangrijkste om op te merken is dat wat er ook gebeurt met gegevens na de klokflank tot de volgende klokflank, niet wordt weerspiegeld in de uitvoer. Een vergrendeling aan de andere kant, registreert niet aan de rand van een klok, in plaats daarvan volgt de uitvoer de invoer zolang de activeringspen wordt bevestigd.
Ontwerp
In dit voorbeeld bouwen we een vergrendeling met drie ingangen en één uitgang. De invoer d staat voor gegevens die 0 of 1 kunnen zijn, rstn staat voor active-low reset en en staat voor enable die wordt gebruikt om de invoergegevens naar de uitvoer te vergrendelen. Reset actief-laag betekent eenvoudigweg dat het ontwerpelement wordt gereset wanneer deze ingang naar 0 gaat of met andere woorden, reset is actief wanneer de waarde laag is. De waarde van output q wordt bepaald door de invoer d , nl en 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
Merk op dat de gevoeligheidslijst voor de always
blok bevat alle signalen die nodig zijn om de uitgang bij te werken. Dit blok wordt geactiveerd wanneer een van de signalen in de gevoeligheidslijst van waarde verandert. Ook q krijgt alleen de waarde van d als en is hoog en is daarom een positief vergrendeling.
Schema
Testbank
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
Om ervoor te zorgen dat onze testbank signalen op een meer willekeurige manier bevestigt, hebben we een reg
gedeclareerd. variabele genaamd vertraging van grootte 3 bits zodat het elke waarde van 0 tot 7 kan aannemen. Dan de vertraging variabele wordt gebruikt om de toewijzing van d . uit te stellen en nl om verschillende patronen in elke lus te krijgen.
Uitvoer
Simulatielogboekncsim> 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.
Klik op de afbeelding om hem groter te maken.
Verilog
- Common-Emitter-versterker
- Eenvoudige Op-Amp
- Precisie spanningsvolger
- Niet-inverterende versterker
- C# Basisinvoer en -uitvoer
- C++ basisinvoer/uitvoer
- C Ingang Uitgang (I/O)
- Python invoer, uitvoer en import
- Java basis invoer en uitvoer
- C++ Basisinvoer/uitvoer:Cout, Cin, Cerr Voorbeeld
- C - Invoer en uitvoer