Quartus Prime编译ROM

时间:2018-12-23 11:45:07

标签: system-verilog riscv quartus rom questasim

嗨,我正在设计一个ISA RISCV 32位微控制器,我将ROM组织成8位(1字节)的阵列,然后输出是32位的宽度。因为我需要它。

rom.txt :(每行都是一条指令)

00000011 00100000 00000111 10010011                 
00000001 01000000 00001000 00010011 
00000001 00000111 10001000 10110011                 
00000001 00010001 00100000 00100011     
00000000 00000001 00101001 00000011
00000001 00100001 00100100 00100011
00000000 10000001 00101001 10000011
01000001 00000111 10001010 00110011
11111100 11101000 00001010 10010011     
11111101 01100000 00001110 11100011

ROM RTL:

module ROM(RADDRESS, DATA_OUT);

    parameter WIDTH = 32;    // out width
    parameter SIZE = 128;    // Total elements of 8 bytes

    input   [WIDTH-1:0]     RADDRESS ;
    output  [WIDTH-1:0]     DATA_OUT;
    reg     [7:0]           MEMORY [SIZE-1:0]; 

    initial // Read instructions 
    begin
        $readmemb("rom.txt", MEMORY); 
    end

    assign DATA_OUT = {MEMORY[RADDRESS], MEMORY[RADDRESS+1], MEMORY[RADDRESS+2], MEMORY[RADDRESS+3]}; // Big endian

endmodule

当我在Questasim / Modelsim中使用测试平台进行仿真时,微控制器可以正常工作并且指令可以正确执行。

但是在Quartus Prime中,编译时可以正常运行,但是在编译报告中,我总共得到0个逻辑元素和0个寄存器

当然,除了使用寄存器和逻辑单元之外,微控制器内部还有一个RAM和其他组件。

我有用于/来自微控制器的输入和输出引脚。顶层模块具有输出和输入。

这就像Quartus syntethizer只是因为我的ROM而没有检测到我的RTL。

1 个答案:

答案 0 :(得分:1)

我会尝试以下操作:

  • 使用Quartus中的ROM模板(打开设计文件,然后右键单击并选择“插入模板”)。 Quartus在推断IP时常常对确切语法感到困惑,例如一次读取四个条目可能会引起问题。
  • 如果仍然有问题,请运行嵌入式内存IP向导,然后选择rom.txt文件作为ROM内容。

如果您向英特尔发送支持请求,我很确定这是他们会告诉您的。请注意,这两个选项都可能涉及将十六进制文件更改为具有32位而不是8位的条目。