D ラッチ
フリップフロップは、クロックの正または負のエッジで入力でデータをキャプチャします。注意すべき重要なことは、クロック エッジの後、次のクロック エッジまでにデータに何が起こっても、出力には反映されないということです。 ラッチ 一方、クロックのエッジでキャプチャするのではなく、イネーブル ピンがアサートされている限り、出力は入力に従います。
デザイン
この例では、3 つの入力と 1 つの出力を持つラッチを作成します。入力 d rstn は 0 または 1 のデータを表します アクティブローリセットとenの略 イネーブルの略で、入力データを出力にラッチさせるために使用されます。リセットがアクティブ LOW であるということは、単純に、この入力が 0 になるとデザイン エレメントがリセットされることを意味します。つまり、値が LOW のときにリセットがアクティブになります。出力 q の値 入力 d によって決定されます , ja と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
always
への感度リストに注意してください。 ブロックには、出力を更新するために必要なすべての信号が含まれています。このブロックは、感度リスト内のいずれかのシグナルがその値を変更するたびにトリガーされます。またq en の場合にのみ d の値を取得します 高いので、ポジティブです
回路図
テストベンチ
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
テストベンチが信号をよりランダムにアサートおよびデアサートするようにするために、reg
を宣言しました。 delay という変数 サイズが 3 ビットであるため、0 から 7 までの任意の値を取ることができます。その後、遅延 変数は d の代入を遅らせるために使用されます と en ループごとに異なるパターンを取得します。
出力
シミュレーションログncsim> 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.
画像をクリックすると大きくなります。
Verilog