Verilog 无法找到值不存在的原因';Don’不要在适当的时候达到预期

Verilog 无法找到值不存在的原因';Don’不要在适当的时候达到预期,verilog,hdl,Verilog,Hdl,我有以下代码 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

我有以下代码

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
模块多边形(时钟、复位、输入有效、输入有效、输出有效、输出);
输入时钟,复位,处于有效状态;
在中输入[3:0];
输出有效;
输出[12:0]输出;
注册有效;
注册[12:0]退出;
注册输出有效;
注册号[12:0]OUT\u w;
reg[1:0]计入,计入;
reg[2:0]计数,计数;
始终@(posedge CLK或negedge重置)
开始
如果(!重置)
开始

在时间=14ns时,重置被断言(
reset\N
=0),这意味着第一个always块中的
COUNT\u DO
=0。在时间t=20ns时,您释放重置,并且
COUNT\u DO
保持为0。在时间=22ns时,您有您的第一个posedge
CLK
,它将
COUNT\u DO
分配给
COUNT\u DO\w
COUNT\u DO
更改的时间仅由第一个always块控制,而不是第二个。

在时间=14ns时,复位被断言(
reset\u N
=0),这意味着第一个always块中的
COUNT\u DO
=0。在时间t=20ns时,您释放重置,并且
COUNT\u DO
保持为0。在时间=22ns时,您有您的第一个posedge
CLK
,它将
COUNT\u DO
分配给
COUNT\u DO\w
COUNT\u DO
更改的时间仅由第一个always块控制,而不是第二个。

但negedge RESET\n不是在10 ns内,并立即触发第一个块吗?第二个块中的敏感列表是右侧,它处于\u VALID和COUNT\u DO?我的概念不是很清楚,如果我错了,请纠正我。Thx我认为,因为
COUNT\u DO
发生了变化,它会立即触发第二个块,并执行COUNT\u DO\u w=COUNT\u DO+1'b1;芯片在t=14ns时仍处于重置状态,因此在时钟的正边缘上不会发生任何事情,因为在时钟posedge上,
如果(!reset_n)
仍然为真@梁玉盘但negedge重置不是在10 ns内,并立即触发第一个块吗?第二个块中的敏感列表是右手边,有效且计数吗?我的概念不是很清楚,如果我错了,请纠正我。Thx我认为,因为
COUNT\u DO
发生了变化,它会立即触发第二个块,并执行COUNT\u DO\u w=COUNT\u DO+1'b1;芯片在t=14ns时仍处于重置状态,因此在时钟的正边缘上不会发生任何事情,因为在时钟posedge上,
如果(!reset_n)
仍然为真@梁玉潘