当前位置:网站首页>Xilinx VIVADO 中 DDR3(Naive)的使用(3)仿真测试
Xilinx VIVADO 中 DDR3(Naive)的使用(3)仿真测试
2022-08-04 11:04:00 【chylinne】
1、概述
本文对之前配置的基于用户接口(Naive)的 MIG IP 核以及所设计的读写模块进行 Testbench 仿真,通过波形数据验证写入/读出数据的一致性。
2、DDR3 仿真文件调用
由于 MIG IP 核中的物理端口(比如 ddr3_dq、ddr3_dqs_n、ddr3_dqs_p、ddr3_addr 等)需要连接到 DDR3 芯片上,所以我们在仿真时也需要将这些接口连接到特定的 DDR 仿真模块上,这样才能模拟 DDR3 芯片的工作。
在运行仿真前,我们需要将头文件 ddr3_model_parameters.vh 和 DDR3 仿真模块文件 ddr3_model.sv 添加进工程中,如下图所示。这两个文件可以从 MIG IP 核的官方例程中复制出来。选中工程中添加的 MIG IP 核(mig_7series_0),然后右键选择 Open IP Example Design 即可下载官方例程。在官方例程中的 import 目录下可以找到这两个文件。
3、Testbench 代码设计
前面的文章介绍了读写状态机的设计,此处可简要概括如下:
空闲状态 IDLE(4'b0001)、写数据状态 WRITE(4'b0010)、写读间隔状态 WAIT(4'b0100)、读数据状态 READ(4'b1000)。写操作是将 0~511 依次写入,地址从 0 开始,地址增 8。读操作则是从地址 0 开始读,地址增 8,并计数,计数值应该等于读出数据值。
因此在 Testbench 中,我们只需设置一个 50 MHz 的系统时钟,然后确保待测顶层(ddr3_rw_top)与 DDR3 仿真模块(ddr3_model)连线正确即可。Testbench 代码如下所示:
`timescale 1ns/100ps
module tb_ddr3_rw_top();
reg sys_clk;
reg sys_rst_n;
wire [15:0] ddr3_dq;
wire [1:0] ddr3_dqs_n;
wire [1:0] ddr3_dqs_p;
wire [13:0] ddr3_addr;
wire [2:0] ddr3_ba;
wire ddr3_ras_n;
wire ddr3_cas_n;
wire ddr3_we_n;
wire ddr3_reset_n;
wire [0:0] ddr3_ck_p;
wire [0:0] ddr3_ck_n;
wire [0:0] ddr3_cke;
wire [0:0] ddr3_cs_n;
wire [1:0] ddr3_dm;
wire [0:0] ddr3_odt;
wire error_flag;
initial begin
sys_clk = 1'b0;
sys_rst_n <= 1'b0;
#50
sys_rst_n <= 1'b1;
end
always #10 sys_clk = ~sys_clk;
ddr3_rw_top ddr3_rw_top_inst(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.ddr3_dq (ddr3_dq),
.ddr3_dqs_n (ddr3_dqs_n),
.ddr3_dqs_p (ddr3_dqs_p),
.ddr3_addr (ddr3_addr),
.ddr3_ba (ddr3_ba),
.ddr3_ras_n (ddr3_ras_n),
.ddr3_cas_n (ddr3_cas_n),
.ddr3_we_n (ddr3_we_n),
.ddr3_reset_n (ddr3_reset_n),
.ddr3_ck_p (ddr3_ck_p),
.ddr3_ck_n (ddr3_ck_n),
.ddr3_cke (ddr3_cke),
.ddr3_cs_n (ddr3_cs_n),
.ddr3_dm (ddr3_dm),
.ddr3_odt (ddr3_odt),
.error_flag (error_flag)
);
ddr3_model ddr3_model_inst (
.rst_n (sys_rst_n),
.ck (ddr3_ck_p),
.ck_n (ddr3_ck_n),
.cke (ddr3_cke),
.cs_n (ddr3_cs_n),
.ras_n (ddr3_ras_n),
.cas_n (ddr3_cas_n),
.we_n (ddr3_we_n),
.dm_tdqs (ddr3_dm),
.ba (ddr3_ba),
.addr (ddr3_addr),
.dq (ddr3_dq),
.dqs (ddr3_dqs_p),
.dqs_n (ddr3_dqs_n),
.tdqs_n (),
.odt (ddr3_odt)
);
endmodule
4、测试结果
(1)总览
下图中红框所示,DDR3 芯片输出的 init_calib_complete 被拉高,表示 DDR3 初始化成功。数据校验结果 error_flag 全部为 0,表示读写正确。其中,error_flag 拉高(置 1)的条件是:当 DDR3 输出读有效时,读计数值 ≠ 读出数据值。
(2)写开始
下图中红框所示,cur_state 是状态机当前状态,2 表示写状态。给出地址 app_addr 从 0 开始,依次增 8。当写使能 app_wdf_wren 拉高,数据 app_wdf_data(0、1、2 ...)被写入。
(3)写结束
下图中红框所示,cur_state 是状态机当前状态,2 表示写状态。当写使能 app_wdf_wren 为高,数据 app_wdf_data(509、510、511 ...)被写入,512 不能被写入,因为 app_wdf_wren 被拉低了。
(4)读开始
下图中红框所示,cur_state 是状态机当前状态,8 表示读状态。当 DDR3 输出的读有效 app_rd_data_valid 为高时,之前输入的地址所对应的数据才能被读出,红框中读出 app_rd_data 数据 0、1、2 ...,同时计数器 rd_cnt 也开始计数,二者数值一样,说明读出正确。
(5)读结束
下图中红框所示,当 DDR3 输出的 app_rd_data_valid 为高,读出数据才有效,红框中读出了数据 ... 509、510、511。后面输出的数据 480(或其他数据)可以不用管,因为此时 app_rd_data_valid 已被 DDR3 拉低,该数据是无效的。
边栏推荐
- Four ways to traverse a Map
- 小程序容器加快一体化在线政务服务平台建设
- 什么是 DevOps?看这一篇就够了!
- 123
- Jina 实例秀|七夕神器!比你更懂你女友的AI口红推荐
- There are 12 balls, including 11 weight, only one, don't know is light or heavy. Three times in balance scales, find out the ball.
- 线程必备内容
- 转转测试环境的标签域名实践
- 图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)
- WPF 截图控件之画笔(八)「仿微信」
猜你喜欢
cubemx stm32 afm3000模块 气体流量传感器 驱动代码
【黄啊码】MySQL入门—1、SQL 的执行流程
【励志】复盘的重要性
What is the principle of thermal imaging temperature measurement?Do you know?
AWS Lambda related concepts and implementation approach
iMeta | German National Cancer Center Gu Zuguang published a complex heatmap visualization method
解决:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING
MySQL之my.cnf配置文件
audio_policy_configuration.xml配置文件详解
123
随机推荐
ORA-00054 资源正忙
Graphical Hands-on Tutorial--ESP32 OTA Over-the-Air Upgrade (VSCODE+IDF)
Learn to use the basic interface of set and map
Jina 实例秀|基于神经搜索的网络安全威胁检测(一)
Super Learning Method
Oracle中对临时表空间执行shrink操作
Google Earth Engine APP ——制作上传GIF动图并添加全球矢量位置
【LeetCode】653. 两数之和 IV - 输入 BST
语音社交app源码——具备哪些开发优势?
Heap Sort
深度学习100例 —— 卷积神经网络(CNN)天气识别
关于架构的思考
What is the principle of thermal imaging temperature measurement?Do you know?
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之三
华为云安全云脑,让企业云化运营更放心
Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
BOSS 直聘回应女大学生连遭两次性骚扰:高度重视求职者安全,可通过 App 等举报
浅析深度学习在图像处理中的应用趋势及常见技巧
Business collocations
Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)