FPGA学习之 RAM

  • Post author:
  • Post category:其他


参考:


FPGA中ROM与RAM相关知识总结

代码部分:

module ram #(parameter RAM_WIDTH = 8 , RAM_DEPTH = 128)(
        clk         ,
        rst         ,

        wr_en       ,
        wr_din      ,
        wr_addr     ,

        rd_en       ,
        rd_addr     ,
        rd_dout
);


//定义一个求2的对数,求位宽
function log2b(input integer data)
begin
    for(log2b = 0;data > 0;log2b = log2b + 1)begin
        data = data >> 1;
    end
end  
endfunction

//端口信号定义 
 input                              clk         ;
 input                              rst         ;
 input                              wr_en       ;
 input  [RAM_WIDTH-1:0]             wr_din      ;
 input  [log2b(RAM_DEPTH)-2:0]      wr_addr     ;
 input                              rd_en       ;
 input  [log2b(RAM_DEPTH)-2:0]      rd_addr     ;
 output reg [RAM_WIDTH-1:0]         rd_dout     ;


//定义内部信号


reg     [RAM_WIDTH-1:0]     mem     [RAM_DEPTH-1:0];
integer i;

always @(posedge clk or negedge rst)begin 
    if(!rst)begin
        for(i=0;i<RAM_DEPTH;i=i+1)
            mem[i] <= 0;
    end 
    else if(wr_en) begin 
            mem[wr_addr] <= wr_din;
    end
end


always @(posedge clk or negedge rst)begin 
    if(!rst)begin
        rd_dout <= 0;
    end 
    else if(rd_en) begin 
        rd_dout <= mem[rd_addr];
    end
end

endmodule



版权声明:本文为weixin_45189408原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。