专栏前言
本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网
分析
要实现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
);
reg [3:0] rom_data [7:0] ;
assign data = rom_data[addr] ;
always @ (posedge clk or negedge rst_n) begin
if (!rst_n) begin
rom_data[0] <= 4'd0 ;
rom_data[1] <= 4'd2 ;
rom_data[2] <= 4'd4 ;
rom_data[3] <= 4'd6 ;
rom_data[4] <= 4'd8 ;
rom_data[5] <= 4'd10 ;
rom_data[6] <= 4'd12 ;
rom_data[7] <= 4'd14 ;
end
else begin
rom_data[0] <= rom_data[0] ;
rom_data[1] <= rom_data[1] ;
rom_data[2] <= rom_data[2] ;
rom_data[3] <= rom_data[3] ;
rom_data[4] <= rom_data[4] ;
rom_data[5] <= rom_data[5] ;
rom_data[6] <= rom_data[6] ;
rom_data[7] <= rom_data[7] ;
end
end
endmodule