image.png :::info 此处需要复习数组的相关知识:定宽数组

    • 非组合型数组在Verilog中可以用来存储数据,根据数组的表示方法,数组左边通常表示位宽,右边表示深度;
    • 在使用ROM的时候通常分为两个部分:
      • 给ROM初始化并分配初始化后的值;
      • 如果不进行初始化,那么ROM就会初始化的值并输出; ::: ``verilogtimescale 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

    ```