我收到以下警告:
始终阻止的敏感度列表中缺少一个或多个信号。
always@(Address)begin
ReadData = instructMem[Address];
end
我如何摆脱这个警告?
Verilog 不需要敏感度列表中的信号名称。使用@*
语法表示always
当任何输入信号发生变化时都应触发该模块:
always @* begin
ReadData = instructMem[Address];
end
声明ReadData
为电线而不是 reg,然后用分配替换您的 always 块。
assign ReadData = instructMem[Address];
将 InstructMem 添加到敏感度列表。
我不确定 instructMem 的声明是什么样的。无论如何,ReadData = instructMem[address] 将导致多路复用器的地址被视为选择逻辑,instructMem 被视为使用典型综合工具的多路复用器的数据线。您需要将 instructMem 放入敏感度列表中,因为每当此更改时,ReadData 也应如此。
我尝试了 Icarus,但无论如何你都不能像 always @(instructMem or address) 这样的事情,其中 instructMem 有一个像 reg [7:0] instructMem [255:0] 这样的声明——>暗示内存。
注意:不要尝试以这种方式合成 Verilog 内存,通常您应该实例化内存 IP 并连接到它们的端口。供应商为此目的提供内存模型。