Quartus 错误 (10028) 与内存

Quartus Error (10028) with memory

我的目标是用 Quartus 形成这个代码,但问题是我不知道如何解决这个问题。 我试图了解错误 10028 的含义,但我不知道如何使用它。 谁能教我如何修复它,或者是否有办法绕过它?

module mem (r_wb,addr,d,q);
input r_wb;//0write 1read
input [7:0] addr;
input [7:0 ] d;
output [7:0] q;
reg [7:0] q;
reg [7:0] mem_bank [0:255];
always @(r_wb)
 if (r_wb)  q=mem_bank[addr];
 else  mem_bank[addr]=d;
always @(addr)
 if (r_wb)  q=mem_bank[addr];
 else  mem_bank[addr]=d;
always @(d)
 if (r_wb)  q=mem_bank[addr];
 else  mem_bank[addr]=d;
endmodule

您在评论中输入的代码大部分是正确的,因为您确实需要时钟信号。但是,您应该使用 non-blocking 赋值 (<=)。

我建议将您的模型 header 更改为自 2001 年以来一直存在的 ANSI 样式。non-ANSI 样式需要 q 被识别三次;端口列表、方向、类型。 ANSI 样式压缩它。 Non-ANSI 很好理解,因为很多合成器和代码生成器仍然默认使用它。但是任何现代模拟器或合成器都将接受 ANSI 样式作为输入。

module mem (
  input clk, 
  input r_wb, //0write 1read
  input [7:0] addr, 
  input [7:0 ] d, 
  output reg [7:0] q) ;
  reg [7:0] mem_bank [0:255];

  always @(posedge clk)
    if (r_wb) q<=mem_bank[addr];
    else mem_bank[addr]<=d;
endmodule