4

我收到以下警告:

始终阻止的敏感度列表中缺少一个或多个信号。

always@(Address)begin
  ReadData = instructMem[Address];
end

我如何摆脱这个警告?

4

4 回答 4

6

Verilog 不需要敏感度列表中的信号名称。使用@*语法表示always当任何输入信号发生变化时都应触发该模块:

always @* begin 
    ReadData = instructMem[Address]; 
end 
于 2010-04-22T01:17:26.417 回答
1

声明ReadData为电线而不是 reg,然后用分配替换您的 always 块。

assign ReadData = instructMem[Address];
于 2010-05-01T22:38:28.520 回答
1

将 InstructMem 添加到敏感度列表。

于 2010-04-22T00:06:42.727 回答
0

我不确定 instructMem 的声明是什么样的。无论如何,ReadData = instructMem[address] 将导致多路复用器的地址被视为选择逻辑,instructMem 被视为使用典型综合工具的多路复用器的数据线。您需要将 instructMem 放入敏感度列表中,因为每当此更改时,ReadData 也应如此。

我尝试了 Icarus,但无论如何你都不能像 always @(instructMem or address) 这样的事情,其中​​ instructMem 有一个像 reg [7:0] instructMem [255:0] 这样的声明——>暗示内存。

注意:不要尝试以这种方式合成 Verilog 内存,通常您应该实例化内存 IP 并连接到它们的端口。供应商为此目的提供内存模型。

于 2010-05-26T14:34:34.697 回答