以下代码尝试将寄存器output_reg
初始化为高阻抗,然后在1
的上升沿将其设置为clk
。
module test(
input clk,
output out,
output reg output_reg
);
assign out = output_reg;
initial
begin
output_reg <= 1'bz;
end
always @(posedge clk)
begin
output_reg <= 1'b1;
end
endmodule
然而,模拟(Altera Quartus 9.1)将output_reg
显示为已初始化至1
,而不是z
。
我不知道为什么always
块会覆盖initial
块。
注意:如果我删除always
块,则注册表会初始化为z
。
答案 0 :(得分:0)
这是因为竞争条件。这里,第二个块首先覆盖,或者你可以说第一个块正在执行@ 0ns,但第二个块是@ 0.00 ... 01ns。通常,您无法将值分配给多个程序块中的相同引脚/端口。