簡體   English   中英

為什么我們在用 Vivado 在 Verilog 中構建 T 觸發器時必須添加“clr”(干凈的輸入線)?

[英]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 中得到了qqn的“x”。 我期望得到與帶有“clr”的代碼相同的結果。

clr信號用於正確初始化qqn

您將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM