alt

实现ROM,首先要声明数据的存储空间,例如:[3:0] rom [7:0];变量名称rom之前的[3:0]表示每个数据具有多少位,指位宽;变量名称rom之后的[7:0]表示需要多少个数据,指深度,注意这里深度为8,应该是使用[7:0],而不是[2:0];

声明存储变量之后,需要对rom进行初始化,写入数据,然后将输入地址作为rom的索引值,将索引值对应的数据输出。

`timescale 1ns/1ns
module rom(
	input clk,
	input rst_n,
	input [7:0]addr,
	
	output [3:0]data
);
    assign data = rom[addr];
    reg [3:0] rom [7:0];
    always@(posedge clk or negedge rst_n) begin: initial_rom
        if(~rst_n) begin
            rom[0] <= 4'd0;
            rom[1] <= 4'd2;
            rom[2] <= 4'd4;
            rom[3] <= 4'd6;
            rom[4] <= 4'd8;
            rom[5] <= 4'd10;
            rom[6] <= 4'd12;
            rom[7] <= 4'd14;
        end
        else begin
            rom[0] <= rom[0];
            rom[1] <= rom[1];
            rom[2] <= rom[2];
            rom[3] <= rom[3];
            rom[4] <= rom[4];
            rom[5] <= rom[5];
            rom[6] <= rom[6];
            rom[7] <= rom[7];
        end
    end
    
endmodule