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