第四个 Prime 编译 ROM

Quartus Prime compilation ROM

您好,我正在设计一个 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 和微控制器内部的其他组件,而不是还使用寄存器和逻辑单元。

还有 我有输入和输出引脚 for/from 微控制器 。顶层模块有输出和输入。

好像 Quartus syntethizer 没有检测到我的 RTL,因为我的 ROM。

我会尝试以下方法:

  • 在 Quartus 中使用 ROM 模板(打开您的设计文件,然后右键单击并选择 "insert template")。 Quartus 在推断 IP 时经常混淆确切的语法,例如一次读取四个条目可能会导致问题。
  • 如果仍有问题,运行 嵌入式内存 IP 向导并选择 rom.txt 文件作为 ROM 内容。

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