从版本10.4开始,初始块出现问题。像这样:
reg [31:0] init_ram[15:0];
initial begin
init_ram[0] = 32'h1234_5678;
init_ram[1] = 32'h8765_4321;
...
end
always_ff @(posedge clk)
init_ram[addr] <= data;
或者
module test(
input clk,
...
output reg a
);
initial a = 1'b1;
always @(posedge clk)
a <= ...;
ModelSim 10.4错误:
错误(可抑制):( vlog-7061){path}变量&#39; init_ram&#39;开车进去 always_ff块可能不会被任何其他进程驱动
在旧版本中,一切运作良好。
您不知道我应该更改哪个ModelSim
参数来修复它?
答案 0 :(得分:2)
always_ff
和always_comb
结构的一个问题是它们应该在模拟过程中检查可合成性,除了没有可合成的标准。如果意图是initial
块仅用于模拟,则您需要将always_ff
更改为always
或更改initial
块以使用{{1}而不是。
答案 1 :(得分:0)
解决问题的一个想法是添加reset
信号并用它来初始化寄存器的值。
好吧,可能是这个 这将是一个为你的触发器提供初始值的好方法。
这应该是这样的:
reg [31:0] init_ram[15:0];
input reset;
always_ff @(posedge clk) begin
if (reset) begin
init_ram[0] <= 32'h1234_5678;
init_ram[1] <= 32'h8765_4321;
end
else begin
init_ram[addr] <= data;
或者这个:
module test(
input clk,
input reset,
...
output reg a
);
always @(posedge clk) begin
if (reset) begin
a <= 1'b1;
end
else begin
a <= ...;