次のコードがあります
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 in にジャンプしないの14ns
ですか?
COUNT_DO
2番目の常にブロックの機密リストがとIN_VALID
であるため、開始時に、リセット信号トリガーは最初に常にブロックし、値を高インピーダンスから0COUNT_DO = 0
に変更するを設定すると思います。したがって、2番目の常にブロックをトリガーします。そして、次のポジティブ エッジ クロックで、最初の常にブロックを実行するようにトリガーします。しかし、it( ) を割り当てるのに 1 クロック遅れているようです。私はそれを理解しようとしましたが、まだできません.なぜ1クロック遅れるのですか?COUNT_DO
COUNT_DO_w = 0 + 1 = 1
COUNT_DO <= COUNT_DO_w
22ns
事前にthx。