实现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