我正在为一个基本的16位教育CPU编写一个内存系统,并且遇到了我的模块的Quartus Synthesis问题。具体来说,我已经将地址空间分解为几个不同的部分,其中一个(这是一个ROM)没有正确合成。 (注意:我正在合成DE2-115 Altera板,QuartusII 12.1,SystermVerilog代码)
因此,为了使内存映射VRAM(双端口的内存模块允许VGA输出,而CPU写入颜色)更加可用,我在地址空间中包含了一个包含代码的小型ROM(已组装)函数),允许您将字符写入内存,即print_char函数。这个ROM位于特定地址的存储器中,所以为了简化SV,我实现了ROM(和所有的存储器模块),如下所示:
module printROM
(input rd_cond_code_t re_L,
input wr_cond_code_t we_L,
input logic [15:0] memAddr,
input logic clock,
input logic reset_L,
inout wire [15:0] memBus,
output mem_status_t memStatus);
reg [15:0] rom[`VROM_ADDR_LO:`VROM_ADDR_HI];
reg [15:0] dataOut;
/* The ROM */
always @(posedge clock) begin
if (re_L == MEM_RD) begin
dataOut <= rom[memAddr];
end
end
/* Load the rom data */
initial $readmemh("printROM.hex", rom);
/* Drive the line */
tridrive #(.WIDTH(16)) romOut(.data(dataOut),
.bus(memBus),
.en_L(re_L));
/* Manage asserting completion of a read or a write */
always_ff @(posedge clock, negedge reset_L) begin
if (~reset_L) begin
memStatus <= MEM_NOT_DONE;
end
else begin
if ((we_L == MEM_WR) | (re_L == MEM_RD)) begin
memStatus <= MEM_DONE;
end
else begin
memStatus <= MEM_NOT_DONE;
end
end
end
endmodule // printROM
其中VROM_ADDR_LO和VROM_ADDR_HI是定义此ROM地址的两个宏,即'hEB00和'hEFFF。因此,当CPU读取/写入该范围内的地址时,该模块能够正确地索引到ROM存储器中。这种技术在VCS仿真中工作正常。
但是,当我开始合成这个模块时,Quartus正确地暗示了一个ROM,但是在初始化它时遇到了问题。我收到这个错误:
Error (113012): Address at line 11 exceeds the specified depth (1280) in the Memory Initialization File "psx18240.ram0_printROM_38938673.hdl.mif"
看起来Quartus正在转换我提供的.hex文件作为ROM代码(即printROM.hex)并使用CPU可见地址(即从'hEB00开始)生成的.mif文件,即使rom的大小显然太小了。 Quartus不支持这种语法,还是我做错了什么?
答案 0 :(得分:1)
看起来Quartus不喜欢你正在做的事情。如果您只想要一个包含1280个条目的rom,那么可能更好一点,那么您应该从0:1279创建一个,并使用该范围解决它(这是您的逻辑无论如何必须合成的)。
reg [15:0] rom[0:`VROM_ADDR_HI-`VROM_ADDR_LO];
assign romAddr = (memAddr - `VROM_ADDR_LO);
always @(posedge clock) begin
if (re_L == MEM_RD) begin
dataOut <= rom[romAddr];
end
end
答案 1 :(得分:0)
在quartus的mega wizard插件管理器中找到ROM Megafunctions。它是基于GUI的ipcore生成器。在那里你可以参数化所有选项,甚至包括hex文件。但您必须遵循Intel hex文件格式。这也可以在file-&gt; new。
中找到对于基于hdl的实例化 http://quartushelp.altera.com/12.1/mergedProjects/hdl/mega/mega_file_lpm_rom.htm