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

相关推荐
szxinmai主板定制专家10 小时前
电力边缘 AI 落地难点剖析:RK 系列 + FPGA 异构平台在储能监控终端的 EMC 与算力优化
人工智能·fpga开发·arm+fpga·rk3588+fpga
szxinmai主板定制专家10 小时前
基于RK3588+FPGA+AI的储能电站边缘网关,实现电力数据采集与智能预警
arm开发·人工智能·fpga开发·rk3576·半导体设备
XMAIPC_Robot11 小时前
储能控制器产品化:ARM+FPGA整机高低温、EMC可靠性测试实战总结
arm开发·人工智能·fpga开发·arm+fpga·rk3588+fpga
szxinmai主板定制专家12 小时前
面向虚拟电厂协调控制:RK3588+FPGA+AI边缘控制器设计思路与算力评估
人工智能·嵌入式硬件·fpga开发·机器人·jetson·zynq·振动采集
XMAIPC_Robot14 小时前
国产FPGA替代Xilinx在储能电力采集场景可行性评估与移植经验
人工智能·算法·机器学习·fpga开发·rk3588+fpga
星夜离尘5615 小时前
Testbench不只看波形:用scoreboard抓住丢包、重复和乱序
fpga开发·verilog·testbench·scoreboard
狂奔蜗牛(bradley)15 小时前
EtherCAT 主站拓扑判定的三级防护:从去抖到振荡检测
人工智能·嵌入式硬件·fpga开发·架构
XMAIPC_Robot15 小时前
工商业储能EMS边缘计算:本地AI负荷预测,彻底摆脱云端依赖
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
XMAIPC_Robot15 小时前
FPGA+ARM联合调试避坑:储能电力采样数据同步、丢包问题定位与根治方案,应用于储能EMS、微网控制器中
arm开发·人工智能·fpga开发·rk3588+fpga·rk3576+fpga