FPGA基础--【Altera】IP核(2)---RAM随机存取存储器

本节文章主打Intel FPGA 开发工具Quartus中RAM IP核的调用方法

系列文章目录

【Altera】IP核(1)—PLL锁相环
【Altera】IP核(2)—RAM随机存取存储器
【Altera】IP核(3)—FIFO先进先出存储器



前言

之前已经学习了Quartus 的PLL IP核如何调用的过程。本节文章来学习RAM IP核的调用方法。


一、RAM是什么

RAM(Random Access Memory),即随机存取存储器,可以随时把数据写入任一指定的地址内的存储单元,还可以随时从任一指定地址读出数据。时钟频率决定了数据读写速度。主要用来存放程序以及程序执行过程中产生的中间数据和运算结果。
Altera 的RAM 主要分两种:单端口RAM和双端口RAM。
单端口RAM:只有一组地址线控制着写数据端口和读数据端口。
双端口RAM:由两组地址线分别控制写数据端口和读数据端口。

(1)单端口RAM

端口名端口描述
dataRAM读写数据
addressRAM读写地址,读地址写地址共用同一个地址
wren写使能信号,高电平有效
rden读使能信号,高电平有效
clken时钟使能信号
aclr复位信号,高电平有效
inclock/outclock单端口RAM支持双时钟模式和单时钟模式

(2)双端口RAM

简单双端口RAM:一组读数据和读地址线,一组写数据和写地址线,能同时进行读写操作,但是不能同时对同一地址进行读写操作
真双端口RAM:有两组读数据线和读地址线,两组写数据线和写地址线,能够同时进行两个端口的读写,也能同时一个端口读,另一个端口写。

二、IP调用

本节文章以Quatrus为例,用文字加图片的方式展示调用RAM的方法

1.调用IP

(1)创建文件

创建RAM IP测试文件夹,并且在prj中创建一个quartus的工程。(芯片类型自己选,我用的EP4CE6F17C8,芯片无所谓,本工程没用到开发板。)
文件夹

(2)调用IP

在IP Catalog 搜索栏中搜索“RAM”,然后选择“RAM:1-PORT”。
在这里插入图片描述
接下来的步骤就是将调用的IP文件保存到哪里,可以看上一章这一块的步骤。
在这里插入图片描述

(3)配置IP

接下来就是配置参数:
1、IP核的输出数据位宽。
2、IP核的存储容量。
3、存储单元类型,默认即可。
4、选择时钟模式,单时钟或双时钟。这里选择单时钟。
然后点击“NEXT”进入下一界面。
深度宽度设置

下图
1、选择输出端口q是否寄存。
2、时钟使能信号,通常默认不勾选。
3、选择是否创建已补复位信号“aclr”和读使能信号“rden”。这里都勾选。
点击“NEXT”进入下一界面。
复位

下图是配置某个地址写入数据同时读取数据的情况,通常保持默认“New data”即可。
在这里插入图片描述

下图是配置RAM存储器初始化参数
1、是否配置初始化文件,根据需求选择,这里默认不改。
2、选择是否允许系统存储器内容编辑器采集和更新内容在与系统时钟无关的情况下,默认不勾选。
在这里插入图片描述
直接到下图将inst文件勾选上点击finish完成配置。
在这里插入图片描述

点击Yes
在这里插入图片描述

2.代码

IP核配置完成后就直接在文件夹中的rtl中新建“.v”文件编写代码:
将inst文件例化进代码中,然后把文件加入工程并编译:

/*
 * @Proj: RAM_test
 * @Module: test
 * @Author: Yang.
 * @Date: 2023-12-12 13:48:32
 * @LastEditors: Yang.
 * @LastEditTime: 2023-12-12 15:11:48
 */

//---------<模块及端口声名>---------------------------------------------
module ram_ip( 
    input          clk      ,
    input          rst_n    ,
    input  [5:0]   address  ,
    input  [7:0]   data     ,
    input          redn     ,
    input          wren     ,
    output [7:0]   q
);

ram	ram_inst (
	.aclr    ( ~rst_n  ),
	.address ( address ),
	.clock   ( clk     ),
	.data    ( data    ),
	.rden    ( rden    ),
	.wren    ( wren    ),
	.q       ( q       )
	);

endmodule

3、仿真

代码写完就要写仿真,验证IP核是否调用成功。
这个仿真的意思就是将地址依次增加,并且每加一次写进去一个数据。
之后再从头的地址读数据。

`timescale  1ns/1ns

module tb_ram();
reg         tb_clk   ;
reg         tb_rst_n ;
reg  [5:0]  address  ;
reg  [7:0]  data     ;
reg         rden     ;
reg         wren     ;
wire [7:0]  q        ;


parameter CYCLE = 20;

ram_ip ram_ip_inst( 
    /*input          */.clk     ( tb_clk   ) ,
    /*input          */.rst_n   ( tb_rst_n ) ,
    /*input  [5:0]   */.address ( address  ) ,
    /*input  [7:0]   */.data    ( data     ) ,
    /*input          */.redn    ( rden     ) ,
    /*input          */.wren    ( wren     ) ,
    /*output [7:0]   */.q       ( q        )   
);

always #(CYCLE/2) tb_clk = ~tb_clk;

integer i;
initial begin
    tb_clk = 1'b1;
    tb_rst_n = 1'b1;
    #(CYCLE*2);
    tb_rst_n = 1'b0;
    address = 0;//复位赋初值
    data = 0;
    rden = 0;
    wren = 0;
    #(CYCLE*10);
    tb_rst_n = 1'b1;
    #(100*CYCLE);
    for (i=0;i<64 ;i=i+1 ) begin //写入数据
        address = i;
        data = i+1;
        wren = 1'b1;
        #CYCLE;
    end
    wren = 0;
    #(CYCLE*10);
    for (i=10;i<32 ;i=i+1 ) begin //读取数据
        address = i;
        rden = 1'b1;
        #CYCLE;
    end
    rden = 0;
    $stop;
end

endmodule

总结

整体仿真,可以看出来“wren”先为高,表示向对应的地址中写入相应的数据。
“redn”为高时,表示从对应的地址读出相应的数据。
在这里插入图片描述
可以看出这个IP核调用成功。

已经学完了PLL和RAM IP核的调用,接下来就是FIFO,之后就发,继续关注。
有问题网站发私信,就是网站回复可能不及时,或者加qq:35二4291零六5 qq回复及时。
具体工程去百度网盘:

链接:https://pan.baidu.com/s/1lQqqWZXfb3i6XHwkKf52zg
提取码:yang

压缩包和具体工程都有,资源里就是一些万能代码。
加油学习吧家人们。

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值