31.RAM-IP核的配置、调用、仿真全流程

(1)RAM IP核简介

RAM是随机存取存储器(Random Access Memory)的简称,是一个易失性存储器,其工作时可以随时对任何一个指定地址写入或读出数据。(掉电数据丢失)

(2)RAM IP核的配置

  • 单端口RAM读写共用一根地址线,一个时钟,读写操作不能同时进行。
  • 简单双端口RAM,读写有自己专门的地址线,写端口只能进行数据写入,读端口只能进行数据读出。
  • 真正双端口RAM,读写端口不固定,可以自定义。
  • 写优先:在同一时刻对同一个地址进行读写,读出的数据为刚刚写入的数据。
  • 读优先:在同一时刻对同一个地址进行读写,读出的数据为前一刻写入的数据。
  • 不变模式:不能在同一时刻进行读写。

单端口RAM配置过程:

简单双端口RAM配置过程:

真正双端口RAM的配置:

(3)单端口RAM IP核的调用:

module ram
(
    input clk         ,
    input wea         ,     
    input [7:0]add    ,
    input [7:0]data_in,
    
    output[7:0]data_out
    );
    
//wea 读写控制端,高电平为写,低电平为读

s_ram_8x256 ram_inst (
  .clka(clk),    // input wire clka
  .wea(wea),      // input wire [0 : 0] wea
  .addra(add),  // input wire [7 : 0] addra
  .dina(data_in),    // input wire [7 : 0] dina
  .douta(data_out)  // output wire [7 : 0] douta
);
    
    
endmodule

(4)仿真文件代码:

`timescale 1ns / 1ps

module ram_tb;

    reg clk          ;
    reg reset_n      ;
    reg wea          ;
    reg [7:0]add     ;
    wire [7:0]data_in ;
    
    wire [7:0]data_out;
    
ram  ram_inst
(
    .clk     (clk     )      ,
    .wea     (wea     )      ,
    .add     (add     )      ,
    .data_in (data_in )      ,
              
    .data_out(data_out)
    );
    
    initial clk = 1'b1;
    always #10 clk = ~clk;
    
    initial begin
        reset_n <= 1'd0;
        #21;
        reset_n <= 1'd1;
        #100_000;
        $stop;
    end
    
//地址线设计    
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            add <= 8'd0;
        else if(add == 8'd255)
            add <= 8'd0;
        else 
            add <= add + 8'd1;
            
//wea信号设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            wea <= 1'd1;
        else if(add == 8'd255)
            wea <= ~wea;
        else 
            wea <= wea;
    
//data_in信号设计
    assign data_in = add;
            
endmodule

(5)仿真波形:

相关推荐
怪小庄吖1 天前
翻译:How do I reset my FPGA?
经验分享·嵌入式硬件·fpga开发·硬件架构·硬件工程·信息与通信·信号处理
海涛高软2 天前
FPGA同步复位和异步复位
fpga开发
FakeOccupational2 天前
fpga系列 HDL:verilog 常见错误与注意事项 quartus13 bug 初始失效 reg *** = 1;
fpga开发·bug
zxfeng~2 天前
AG32 FPGA 的 Block RAM 资源:M9K 使用
fpga开发·ag32
whik11942 天前
FPGA 开发工作需求明确:关键要点与实践方法
fpga开发
whik11942 天前
FPGA开发中的团队协作:构建高效协同的关键路径
fpga开发
南棱笑笑生2 天前
20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机
fpga开发
我爱C编程2 天前
基于FPGA的BPSK+costas环实现,包含testbench,分析不同信噪比对costas环性能影响
fpga开发·verilog·锁相环·bpsk·costas环
移知3 天前
备战春招—数字IC、FPGA笔试题(2)
fpga开发·数字ic
楠了个难3 天前
以太网实战AD采集上传上位机——FPGA学习笔记27
笔记·学习·fpga开发