当前位置:网站首页>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)
);
endmodule4、测试结果
(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 拉低,该数据是无效的。

边栏推荐
- 《迁移学习导论》第2版,升级内容抢先看!
- mysqldump远程备份数据库
- 字节技术官亲码算法面试进阶神技太香了
- 深度学习100例 —— 卷积神经网络(CNN)天气识别
- Heap Sort
- Graphical Hands-on Tutorial--ESP32 OTA Over-the-Air Upgrade (VSCODE+IDF)
- cubemx stm32 afm3000模块 气体流量传感器 驱动代码
- Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
- 面试蚂蚁(P7)竟被MySQL难倒,奋发图强后二次面试入职蚂蚁金服
- Small program containers accelerate the construction of an integrated online government service platform
猜你喜欢

【LeetCode】653. 两数之和 IV - 输入 BST

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

再次搞定 Ali 云函数计算 FC

【机器学习】:如何对你的数据进行分类?

Jenkins使用手册(1) —— 软件安装

【Inspirational】The importance of review

Advanced transcriptome analysis and R data visualization hot registration (2022.10)

Heap Sort

cubemx stm32 afm3000 module gas flow sensor driver code

Apache Calcite 框架原理入门和生产应用
随机推荐
3-5年以上的功能测试如何进阶自动化?
DB2查看执行过长的SQL
【黄啊码】MySQL入门—1、SQL 的执行流程
mae,mse,rmse分别利用sklearn和numpy实现
MySQL之my.cnf配置文件
【LeetCode】232.用栈实现队列
Advanced transcriptome analysis and R data visualization hot registration (2022.10)
Mysql高级篇学习总结14:子查询优化、排序优化、GROUP BY优化、分页查询优化
Four ways to traverse a Map
Super Learning Method
cubemx stm32 afm3000模块 气体流量传感器 驱动代码
临床研究方法学,到现场,到数据真实发生的地方 | 对话数智 x 张维拓
audio_policy_configuration.xml配置文件详解
【LeetCode】98.验证二叉搜索树
A topic of map
WPF 截图控件之画笔(八)「仿微信」
shell变量
音频编辑 合唱
开源一夏|ArkUI如何自定义弹窗(eTS)
图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)