[英]Why do we have to add a "clr" (clean input wire) while forming a T flip-flop in Verilog with Vivado?
我正試圖在 Verilog 中形成一個 T 觸發器。 我正在研究“使用 FPGA 進行數字系統設計:使用 verilog 和 vhdl 實現”中的 verilog,T 觸發器的代碼如下:
module t_flip_flop(t,clk,clr,q,qn);
input t,clk,clr;
output reg q,qn;
always @(posedge clk or negedge clr)
begin
if(clr==0)
q<=0;qn<=1;
else
q<=q^t;
qn<=~(q^t);
end
由於切換操作,我理解我們使用它的 xor 部分。 我試圖在不使用“clr”的情況下形成它,但它沒有用。 (我使用“clr”作為清除輸入,用於重置觸發器)。 我不能不使用“clr”來做嗎?
我試圖像下面這樣更改代碼:
module t_flip_flop(t,clk,q,qn);
input t,clk;
output reg q,qn;
always @(posedge clk)
if(t)
begin
q<=q^t;
qn<=~(q^t);
end
但是在仿真中,我在 Vivado 中得到了q
和qn
的“x”。 我期望得到與帶有“clr”的代碼相同的結果。
clr
信號用於正確初始化q
和qn
。
您將q
聲明為reg
類型。 在 Verilog 仿真中, reg
被初始化為 x(“未知”值)。
考慮沒有clr
的代碼。 在時間 0,q=x。 假設當時 clk 的 posedge 為 10ns 且 t=1。 分配:
q<=q^t;
被評估為:
q <= x ^ 1;
Verilog 將x ^ 1
計算為x
。 由於x
可能是 0 或 1,我們不知道表達式是 1^1 還是 0^1,這意味着我們不知道表達式的結果應該是什么。 這意味着q
在模擬的其余部分將保持為 x。 將無法更改其值。
使用clr
信號可以解決該問題。 通常,在仿真開始時(時間=0),您會設置 clr=0,以便為q
分配一個已知值 (0)。 這可以防止 x。
即使您沒有以 clr=0 開始,只要稍后設置 clr=0,就會解析 x。
所有這些也適用於qn
信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.