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时,您有您的第一个posedgeCLK
,它将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时,您有您的第一个posedgeCLK
,它将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)
仍然为真@梁玉潘