0
我有以下代碼找不到爲什麼值不跳到期望在合適的時間
module POLY(CLK,RESET_n,IN_VALID,IN,OUT_VALID,OUT);
input CLK,RESET_n,IN_VALID;
input [ 3:0] IN;
output OUT_VALID;
output [12:0] OUT;
reg OUT_VALID;
reg [12:0] OUT;
reg OUT_VALID_w;
reg [12:0] OUT_w;
reg [ 1:0] COUNT_IN, COUNT_IN_w;
reg [ 2:0] COUNT_DO, COUNT_DO_w;
always @(posedge CLK or negedge RESET_n)
begin
if(!RESET_n)
begin
COUNT_IN <= 2'd0;
COUNT_DO <= 3'd0;
end
else
begin
COUNT_IN <= COUNT_IN_w;
COUNT_DO <= COUNT_DO_w;
end
end
always @(*)
begin
if(IN_VALID == 1'b0)
begin
if(COUNT_DO == 3'd7)
begin
COUNT_DO_w = COUNT_DO;
end
else
begin
COUNT_DO_w = COUNT_DO + 1'b1;
end
end
else
begin
COUNT_DO_w = 3'd0;
end
end
我要問的是,爲什麼COUNT_DO
沒有跳轉到1 14ns
?
我認爲,由於在第二總是塊敏感列表是COUNT_DO
和IN_VALID
, 所以在啓動,重置信號觸發第一always塊,並設置COUNT_DO = 0
,其改變從高阻態爲0的COUNT_DO
值。所以,它會觸發第二個總是阻止COUNT_DO_w = 0 + 1 = 1
。並且,在下一個正邊沿時鐘中,哪個觸發第一個總是阻止COUNT_DO <= COUNT_DO_w
。但它似乎延遲一個時鐘來分配它(22ns
)。我試圖找出它,但仍然不能,爲什麼它延遲一個時鐘?
Thx提前。
但沒有negedge RESET_n是在10納秒,並立即觸發第一個塊? – 2013-03-16 19:24:45
和第二塊中的敏感列表是右邊,它們是 IN_VALID和COUNT_DO? – 2013-03-16 19:26:27
我的觀念不是很清楚,所以如果我錯了,請糾正我。 Thx – 2013-03-16 19:26:59