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

相关推荐
Hello-FPGA6 小时前
AI 如何自动通过 PDF 原理图生成管脚映射
人工智能·fpga开发·pdf
zlinear数据采集卡6 小时前
数据采集卡从入门到精通(7):流水线型ADC——级级接力,高速与高精的平衡术
开发语言·arm开发·嵌入式硬件·fpga开发·c#
鬼手点金1 天前
FPGA常用型号参考
fpga开发·verilog·vivado·xilinx·vhdl·altera·lattice
Kong_19942 天前
芯片开发学习笔记·二十九——大模型基础知识与 KV Cache 详解
fpga开发·芯片开发
m0_46644103詹湛2 天前
FPGA 定点数、小数与负数的加减乘除原理
fpga开发
zlinear数据采集卡2 天前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
zlinear数据采集卡2 天前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
FPGA小迷弟2 天前
Vivado中高速收发器GTX/GTH的配置与调试实战
fpga开发·fpga·硬件开发
minglie12 天前
简易寄存器接口SMMR---iic控制器
fpga开发
FPGA小迷弟2 天前
Vivado ILA与VIO调试工具实战指南:从入门到精通
fpga开发·fpga·硬件开发