带有 always@(*) 块的 Verilog 生成语句
Verilog generate statement with always@(*) block
我有这个生成块,我认为它应该可以工作,但我发现 else
块下的 always @(*)
部分有问题。使用 VCS 时,temp_in[i+1][j]
总是分配 'x'。我希望它被设置为“0”。如果我实例化一个 module/gate 而不是总是阻塞,就像我对 if
部分所做的那样,那么它就可以正常工作。谷歌搜索在单个块中使用 foreach、generate、always 和 if 的正确语法不会产生任何有用的结果。我知道修复是一个小改动,但我对所有语言结构都不熟悉,所以我将不胜感激任何帮助。
ceil()
是一个 returns 整数的函数。它仅使用在编译时固定的参数,因此我希望循环展开能够正确进行。
genvar i, j, k;
generate
for (i = 0; i < NUM_STAGES; i = i + 1) begin:gen_stage
for (j = 0; j < (TOTAL_LENGTH/(2**(i+1))); j = j + 1) begin:gen_or
if(j < ceil(i)) begin
for (k = 0; k < CPU_DATA_WIDTH; k = k + 1) begin:gen_bit
msw_mem_out_mux_bit_or U_msw_mem_out_mux_bit_or (
.in_1 (temp_in[i][2*j][k]),
.in_2 (temp_in[i][(2*j)+1][k]),
.out (temp_in[i+1][j][k])
);
end
end else begin
always @(*) begin
temp_in[i+1][j] = {CPU_DATA_WIDTH{1'b0}};
end
end
end
end
endgenerate
always @*
等待,直到推断的灵敏度列表中的信号发生变化。 i
和 j
是常量(从 always @*
评估时的模拟时间的角度来看),所以你的 always 块在敏感列表中没有信号。
如果使用 SystemVerilog,将 always @*
更改为 always_comb
,这将在时间 0 运行。对于 Verilog,添加一个 initial
块。
参考:IEEE Std 1800-2012 § 9.2.2.2.2 always_comb
与 always @*
相比
我有这个生成块,我认为它应该可以工作,但我发现 else
块下的 always @(*)
部分有问题。使用 VCS 时,temp_in[i+1][j]
总是分配 'x'。我希望它被设置为“0”。如果我实例化一个 module/gate 而不是总是阻塞,就像我对 if
部分所做的那样,那么它就可以正常工作。谷歌搜索在单个块中使用 foreach、generate、always 和 if 的正确语法不会产生任何有用的结果。我知道修复是一个小改动,但我对所有语言结构都不熟悉,所以我将不胜感激任何帮助。
ceil()
是一个 returns 整数的函数。它仅使用在编译时固定的参数,因此我希望循环展开能够正确进行。
genvar i, j, k;
generate
for (i = 0; i < NUM_STAGES; i = i + 1) begin:gen_stage
for (j = 0; j < (TOTAL_LENGTH/(2**(i+1))); j = j + 1) begin:gen_or
if(j < ceil(i)) begin
for (k = 0; k < CPU_DATA_WIDTH; k = k + 1) begin:gen_bit
msw_mem_out_mux_bit_or U_msw_mem_out_mux_bit_or (
.in_1 (temp_in[i][2*j][k]),
.in_2 (temp_in[i][(2*j)+1][k]),
.out (temp_in[i+1][j][k])
);
end
end else begin
always @(*) begin
temp_in[i+1][j] = {CPU_DATA_WIDTH{1'b0}};
end
end
end
end
endgenerate
always @*
等待,直到推断的灵敏度列表中的信号发生变化。 i
和 j
是常量(从 always @*
评估时的模拟时间的角度来看),所以你的 always 块在敏感列表中没有信号。
如果使用 SystemVerilog,将 always @*
更改为 always_comb
,这将在时间 0 运行。对于 Verilog,添加一个 initial
块。
参考:IEEE Std 1800-2012 § 9.2.2.2.2 always_comb
与 always @*