我正在尝试使用初始块将值分配给只读推断 RAM:
module rom (
input clk,
input [5:0] addr,
output reg [15:0] data);
reg [15:0] mem [0:63];
initial begin
mem[0] = 1;
mem[1] = 2;
end
always @(posedge clk)
data <= mem[addr];
endmodule
Yosys 给出以下警告信息:
$ yosys -q -p "synth_ice40 -blif rom.blif" rom.v
Warning: Blocking assignment to memory in line rom.v:9 is handled like a non-blocking assignment.
Warning: Blocking assignment to memory in line rom.v:10 is handled like a non-blocking assignment.
如果我忽略警告(或将初始分配更改为非阻塞),我会通过实验发现 RAM 直到上电后的某些时钟周期才会获得正确的值。
不能以这种方式使用初始块吗?yosys github repo 中对 issue #50 的讨论提供了一个示例模块mem2reg_with_two_always_blocks
,表明它应该是。但是编译该模块会产生相同的警告消息。