我一直在尝试将输出LEDR [3:0]初始化为全0。但是,LEDR在我的波形时序图中保持为XXXX。我尝试过使用初始块,但它不起作用。 (我的IDE是Quartus Prime)
这是我的代码
module synasyn_counter(SW,LEDR,PLoad,CLK);
parameter n=16;
input CLK,PLoad;
input [3:0] SW;
output reg [3:0] LEDR;
initial
begin
LEDR=0;
end
always @(negedge PLoad or negedge CLK)
begin
if (PLoad==0) LEDR<=SW;
else
begin
if (LEDR==n-1) LEDR<=0;
else LEDR<=LEDR+1;
end
end
endmodule
这是我的结果:
答案 0 :(得分:1)
您无法在合成代码中使用initial
块。这是一个纯粹基于模拟的代码。
在硬件中,我们通常通过reset
信号实现翻转/寄存器初始化。因此,如果你的设计中有一个低有效的低异步复位,那么你可以为你的翻转方程式做这样的事情 -
always @ (posedge clock or negedge reset) begin
if(!reset) begin
LEDR <= <initialized_value>
end
else begin
<rest_of_your_code>
end
end
完成此操作后,在TB中确保在开始时断言reset
信号(因为其低电平有效断言意味着将其拉低至0)然后在1之后取消断言或更多时钟周期。
请注意,在reset
置位之前,除非{t = 0}声明X
,否则您仍会看到reset
。因此,在您遵循一个reset
断言 - 断言序列之后,您可以在此之后继续进行其余的模拟