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)仿真波形:

相关推荐
北城笑笑39 分钟前
FPGA 14 ,硬件开发板分类详解,FPGA开发板与普通开发板烧录的区别
fpga开发·fpga
2202_754421541 小时前
一个计算频率的模块
驱动开发·fpga开发
小灰灰的FPGA2 小时前
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
fpga开发
fei_sun21 小时前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto1 天前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
9527华安1 天前
FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0·万兆网
able陈1 天前
为什么verilog中递归函数需要定义为automatic?
fpga开发
fei_sun1 天前
【Verilog】第二章作业
fpga开发·verilog
碎碎思1 天前
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
fpga开发·接口隔离原则
江山如画,佳人北望1 天前
fpga-状态机的设计及应用
fpga开发