Verilog 带内存的四次方错误(10028)

Verilog 带内存的四次方错误(10028),verilog,drivers,quartus,Verilog,Drivers,Quartus,我的目标是用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)

我的目标是用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

您在注释中输入的代码基本上是正确的,因为您确实需要时钟信号。然而,你应该使用非阻塞分配(
你在评论中输入的代码基本上是正确的,因为你确实需要一个时钟信号。然而,你应该使用非阻塞分配(
我自己想出来了…模块mem(clk,r\u wb,addr,d,q);input clk;input r\u wb;//0write 1read input[7:0]addr;input[7:0]d;输出[7:0]q;reg[7:0]q;reg[7:0]mem_bank[0:255];如果(r_wb)q=mem_bank[addr];else mem_bank[addr]=d;endmodulei如果你明白了这一点,请将你的解决方案作为答案发布。建议对组合块使用
始终@*
。我自己明白了…module mem(clk,r_wb,addr,d,d,q);input clk;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];如果(r_wb)q=mem_bank[addr],则始终@(posedge clk);否则mem_bank[addr]=d;endmodulei如果你明白了这一点,请将你的解决方案作为答案发布。建议对组合块使用
始终@*
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