嗨,我正在设计一个 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 合成器只是因为我的 ROM 而没有检测到我的 RTL。