我完全不懂Verilog编程,也不知道在哪里初始化reg
变量。
让我们来看一下以下代码片段:
编辑: 综合时的警告module test (
output LED0
);
reg led = 1'b1;
assign LED0 = led;
endmodule
或者
module test (
output LED0
);
reg led;
initial begin
reg led <= 1'b1;
end
assign LED0 = led;
endmodule
请帮我翻译:在这一行中因为没有被赋值,所以使用led的初始值:reg led = 1'b1;
是否只有在always@块中才能分配reg
类型?
另一个例子:
module fourBitCounter
(input clk,
output [3:0]counter
);
wire clk;
initial begin
reg[3:0] counter = 4'b1;
end
always@ (posedge clk) begin
if(counter > 15)
counter <= 0;
else
counter <= counter + 1;
end endmodule
这里的reg初始值为0,但我之前已将其设置为1...出了什么问题?谢谢!
=
)。在always块中,我使用了一个非阻塞赋值(<=
),这应该用于在always块中分配预期的flops/latches。我本来可以在初始块中使用非阻塞赋值,但是根据我的编码风格,我通常不这样做。非阻塞会推迟调度器中的更新,在时钟边沿很有用,但在时间零时不需要。 - Gregled
的问题是综合警告。除了只读存储器(ROM)外,初始化寄存器然后从未更新它并不常见。这是合法的,但通常是无意的,因为它更可能是一个错误或不完整的代码;因此它是一个警告。我建议尽可能解决所有警告;当设计不按预期工作时,这使得调试更容易找到问题所在。 - Greg