资料介绍
作者: ALINX
* 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。
适用于板卡型号:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
实验Vivado工程为“ram_test”。
RAM是FPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是ROM,FIFO的基础。本实验将为大家介绍如何使用FPGA内部的RAM以及程序对该RAM的数据读写操作。
1.实验原理
Xilinx在VIVADO里为我们已经提供了RAM的IP核, 我们只需通过IP核例化一个RAM,根据RAM的读写时序来写入和读取RAM中存储的数据。实验中会通过VIVADO集成的在线逻辑分析仪ila,我们可以观察RAM的读写时序和从RAM中读取的数据。
2.创建Vivado工程
在添加RAM IP之前先新建一个ram_test的工程, 然后在工程中添加RAM IP,方法如下:
2.1 点击下图中IP Catalog,在右侧弹出的界面中搜索ram,找到Block Memory Generator,双击打开。

2.2 将Component Name改为ram_ip,在Basic栏目下,将Memory Type改为Simple Dual Prot RAM,也就是伪双口RAM。一般来讲"Simple Dual Port RAM"是最常用的,因为它是两个端口,输入和输出信号独立。

2.3 切换到Port A Options栏目下,将RAM位宽Port A Width改为16,也就是数据宽度。将RAM深度Port A Depth改为512,深度指的是RAM里可以存放多少个数据。使能管脚Enable Port Type改为Always Enable。

2.4 切换到Port B Options栏目下,将RAM位宽Port B Width改为16,使能管脚Enable Port Type改为Always Enable,当然也可以Use ENB Pin,相当于读使能信号。而Primitives Output Register取消勾选,其功能是在输出数据加上寄存器,可以有效改善时序,但读出的数据会落后地址两个周期。很多情况下,不使能这项功能,保持数据落后地址一个周期。

2.5 在Other Options栏目中,这里不像ROM那样需要初始化RAM的数据,我们可以在程序中写入,所以配置默认即可,直接点击OK。

2.6 点击“Generate”生成RAM IP。

3. RAM的端口定义和时序
Simple Dual Port RAM 模块端口的说明如下:

RAM的数据写入和读出都是按时钟的上升沿操作的,端口A数据写入的时候需要置高wea信号,同时提供地址和要写入的数据。下图为输入写入到RAM的时序图。

而端口B是不能写入数据的,只能从RAM中读出数据,只要提供地址就可以了,一般情况下可以在下一个周期采集到有效的数据。

RAM读时序
4. 测试程序编写
下面进行RAM的测试程序的编写,由于测试RAM的功能,我们向RAM的端口A写入一串连续的数据,只写一次,并从端口B中读出,使用逻辑分析仪查看数据。代码如下
`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
module ram_test(
input clk, //25MHz时钟
input rst_n //复位信号,低电平有效
);
//-----------------------------------------------------------
reg [8:0] w_addr; //RAM PORTA写地址
reg [15:0] w_data; //RAM PORTA写数据
reg wea; //RAM PORTA使能
reg [8:0] r_addr; //RAM PORTB读地址
wire [15:0] r_data; //RAM PORTB读数据
//产生RAM PORTB读地址
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
r_addr <=9'd0;
elseif(|w_addr) //w_addr位或,不等于0
r_addr <= r_addr+1'b1;
else
r_addr <=9'd0;
end
//产生RAM PORTA写使能信号
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
wea <=#11'b0;
else
begin
if(&w_addr)//w_addr的bit位全为1,共写入512个数据,写入完成
wea <=#11'b0;
else
wea <=#11'b1;//ram写使能
end
end
//产生RAM PORTA写入的地址及数据
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
begin
w_addr <=9'd0;
w_data <=16'd1;
end
else
begin
if(wea) //ram写使能有效
begin
if(&w_addr)//w_addr的bit位全为1,共写入512个数据,写入完成
begin
w_addr <= w_addr ;//将地址和数据的值保持住,只写一次RAM
w_data <= w_data ;
end
else
begin
w_addr <= w_addr +1'b1;
w_data <= w_data +1'b1;
end
end
end
end
//-----------------------------------------------------------
//实例化RAM
ram_ip ram_ip_inst (
.clka (clk ),// input clka
.wea (wea ),// input [0 : 0] wea
.addra (w_addr ),// input [8 : 0] addra
.dina (w_data ),// input [15 : 0] dina
.clkb (clk ),// input clkb
.addrb (r_addr ),// input [8 : 0] addrb
.doutb (r_data )// output [15 : 0] doutb
);
//实例化ila逻辑分析仪
ila_0 ila_0_inst (
.clk (clk ),
.probe0 (r_data ),
.probe1 (r_addr )
);
endmodule
为了能实时看到RAM中读取的数据值,我们这里添加了ila工具来观察RAM PORTB的数据信号和地址信号。关于如何生成ila大家请参考”PL的”Hello World”LED实验”。

程序结构如下:

绑定引脚
##################Compress Bitstream############################
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property PACKAGE_PIN AB11 [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports clk]create_clock -period 40.000 -name clk -waveform {0.000 20.000} [get_ports clk]set_property PACKAGE_PIN AA13 [get_ports rst_n]set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
5. 仿真
仿真方法参考”PL的”Hello World”LED实验”,仿真结果如下,从图中可以看出地址1写入的数据是0002,在下个周期,也就是时刻2,有效数据读出。

6. 板上验证
生成bitstream,并下载bit文件到FPGA。接下来我们通过ila来观察一下从RAM中读出的数据是否为我们初始化的数据。
在Waveform的窗口设置r_addr地址为0作为触发条件,我们可以看到r_addr在不断的从0累加到1ff, 随着r_addr的变化, r_data也在变化, r_data的数据正是我们写入到RAM中的512个数据,这里需要注意,r_addr出现新地址时,r_data对应的数据要延时两个时钟周期才会出现,数据比地址出现晚两个时钟周期,与仿真结果一致。

扫码添加小助手
加入工程师交流群
- Zynq UltraScale+ MPSoC数据手册 3次下载
- Zynq UltraScale+ MPSoC验证数据手册
- Zynq UltraScale+ MPSoC中的隔离方法
- Zynq UltraScale+ MPSoC的隔离设计示例
- 米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享
- 计算机网络第六章应用层资源下载 0次下载
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片内ROM测试实验
- 如何调试 Zynq UltraScale+ MPSoC VCU DDR 控制器?
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第八章FPGA片内FIFO读写测试实验
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介绍
- STM8S BLDC电机第六章工程的stm8选项字节配置 8次下载
- 静噪基础第六章_EMI静噪滤波器 4次下载
- 数字信号处理 第六章 4次下载
- 《测控电路》习题完整参考答案(第六章) 0次下载
- 高频电子线路第六章答案
- 针对UltraScale/UltraScale+芯片DFX应考虑的因素有哪些(1) 1.6k次阅读
- Xilinx ZYNQ UltraScale+系列产品介绍 4.6k次阅读
- FPGAs,Zynq和Zynq MPSoC器件的特点 3.8k次阅读
- 基于Xilinx Zynq UltraScale+ RFSoC ZCU216评估套件详细内容介绍 1.4w次阅读
- 基于Xilinx Zynq ultraScale+ 系列FPGA的AXU2CGB 开发板评测 1.3w次阅读
- 米尔科技Zynq UltraScale+ MPSoC技术参考手册介绍 4.1k次阅读
- 详解Xilinx公司Zynq® UltraScale+™MPSoC产品 3.9k次阅读
- Xilinx Zynq UltraScale MPSoC可扩展电源设计 2.4k次阅读
- Xilinx Kintex UltraScale+ FPGA KCU116评估套件主要性能和优势 7.5k次阅读
- Zynq UltraScale+ MPSoC ZCU102评估套件解决方案 9.5k次阅读
- Enea OSE可实现对Xilinx UltraScale+ MPSoC的支持 3.5k次阅读
- Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞 2.9k次阅读
- Zynq UltraScale+ MPSoC 上的多个Linux UIO设计 3.7k次阅读
- 用ZYNQ MPSoC玩DOOM! 3.1k次阅读
- Ti推出面向Zynq UltraScale+ MPSoC的电源参考设计 4.1k次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1491次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 95次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 4次下载 | 免费
- 8基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537793次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
电子发烧友App





创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论