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