VL23 ROM的简单实现

  1. reg [3:0] rom [7:0];变量名称rom之前的[3:0]表示每个数据具有多少位,指位宽;变量名称rom之后的[7:0]表示需要多少个数据,指深度,注意这里深度为8(和输入地址addr一致);
  2. always 里面的else部分的写法是难点,这里是因为只需要初始化,其余状态就保持存储的原因,所以是赋值其本身。
  3. 理解“addr:8bit位宽的无符号数,输入到ROM的地址”。它的意思是rom[addr];
  4. 输出描述的“data:4bit位宽的无符号数,从ROM中读出的数据”。它的意思是data=rom[addr];

 

 

 

`timescale 1ns/1ns
module rom(
    input clk,
    input rst_n,
    input [7:0]addr,
   
    output [3:0]data
);
reg [3:0] rom[7:0];
always @(posedge clk,negedge rst_n)begin
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
assign data=rom[addr];
endmodule

 

posted @ 2024-08-26 16:57  段星儿  阅读(16)  评论(0)    收藏  举报