【问题标题】:Quartus Error (10028) with memoryQuartus 错误 (10028) 与内存
【发布时间】:2016-08-31 17:21:12
【问题描述】:

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

【问题讨论】:

  • 我自己想通了...
  • 模块内存 (clk,r_wb,addr,d,q);输入时钟; input r_wb;//0write 1read input [7:0] addr;输入 [7:0] d;输出 [7:0] q;注册 [7:0] q;注册 [7:0] mem_bank [0:255];总是@(posedge clk) if (r_wb) q=mem_bank[addr];否则 mem_bank[地址]=d;结束模块
  • 如果您发现了这一点,请将您的解决方案发布为答案。
  • 组合块建议使用always@*

标签: verilog drivers quartus


【解决方案1】:

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

我建议将您的模型标题更改为自 2001 年以来一直存在的 ANSI 样式。非 ANSI 样式需要 q 被识别三次;端口列表、方向、类型。 ANSI 样式压缩它。非 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多