:::info 此处需要复习数组的相关知识:定宽数组
- 非组合型数组在Verilog中可以用来存储数据,根据数组的表示方法,数组左边通常表示位宽,右边表示深度;
- 在使用ROM的时候通常分为两个部分:
- 给ROM初始化并分配初始化后的值;
- 如果不进行初始化,那么ROM就会初始化的值并输出;
:::
``verilog
timescale 1ns/1ns
module rom( input clk, input rst_n, input [7:0] addr,
output [3:0] data );
reg [3:0] rom_reg [7:0]; integer i; always @(posedge clk or negedge rst_n) begin if(!rst_n) begin rom_reg[0] <= 8’b0000_0000; rom_reg[1] <= 8’b0000_0010; rom_reg[2] <= 8’b0000_0100; rom_reg[3] <= 8’b0000_0110; rom_reg[4] <= 8’b0000_1000; rom_reg[5] <= 8’b0000_1010; rom_reg[6] <= 8’b0000_1100; rom_reg[7] <= 8’b0000_1110; end else begin for(i=0;i<8;i=i+1) begin rom_reg[i] <= rom_reg[i]; end end end
assign data = rom_reg[addr];
endmodule
```