IP-RAM

Untitled.png

Vivado软件自带的Block Memory Genrator IP核可以用来配置生成RAM和ROM,生成的RAM和ROM使用的都是FPGA内部的BRAM资源

Vivado IP核配置

Untitled.png

  1. 读数据位宽要与写数据位宽成整数倍关系
  2. Port A Optional Register:用于为RAM的输出端添加寄存器,提高BRAM的运行频率和改善时序,每勾选一个寄存器,输出会延迟一拍

地址信号和写信号的生成

module ram_rv (
    clk,
    rst_n,
    ena,
    wea,
    addr,
    din
);
    input clk;
    input rst_n;
    output reg ena;
    output reg [7:0] din;
    output reg [4:0] addr;
    output wea;
    reg [5:0] cnt;

    assign wea=(cnt<=6'd31&&ena==1)?1'b1:1'b0;

    always @(posedge clk or negedge rst_n) begin
        if(rst_n==1'b0)
            ena<=1'b0;  
        else
            ena<=1'b1;
    end

    always @(posedge clk or negedge rst_n) begin
        if(rst_n==1'b0)
            cnt<=6'b0;
        else if(cnt==63&&ena==1'b1)
            cnt<=6'b0;
        else if(ena==1'b1)
            cnt<=cnt+1'b1;
        else
            cnt<=6'b0;
    end

    always @(posedge clk or negedge rst_n) begin
        if(rst_n==1'b0)
            addr<=5'b0;
        else if(addr==5'd31&&ena==1'b1)
            addr<=5'b0;       
        else if(ena==1'b1)
            addr<=addr+1'b1;
        else begin
            addr<=5'b0;
        end
    end
    
    always @(posedge clk or negedge rst_n) begin
    if(rst_n==1'b0)
    begin
        din<=8'b0;
    end
    else if(din<8'd31 && wea==1'b1) begin
        din<=din+1'b1;
    end
    else begin
        din<=8'b0;
    end
end
endmodule

波形

Untitled.png

当WEA为高电平时,根据地址信号向RAM中写入数据

Untitled.png

WEA为低电平时,读出RAM中的信号

posted @ 2024-02-07 22:09  moerjie  阅读(20)  评论(0编辑  收藏  举报