本文对 Xilinx Vivado 中提供的 DDR3 控制器 IP 核模块进行例化,实现基本的 DDR3读写操作。并使用在线逻辑分析仪查看有规律变化的 DDR3 数据读写时序。

1.DDR3控制器IP接口时序

DDR3 控制器 IP 核用于衔接 DDR3 芯片和 FPGA 的用户逻辑,DDR3 控制器与 FPGA 用户逻辑之间有一套简单易用的接口,以下为User Interface 的基本时序。

1.1 Command 时序

首先,关于 User Interface 的 Command 时序,Xilinx 的用户手册中只给出如图所示的波形。简单的来讲,app_cmd 和 app_addr 有效,且 app_en 拉高,app_rdy 拉高,则该命令成功发送给 DDR3 控制器;若是在 app_cmd、app_addr 和 app_en 都有效时,app_rdy为低,那么必须保持 app_cmd、app_addr 和 app_en 的有效状态直到 app_rdy 拉高,那么该命令才算是成功发送给DDR3控制器。

User Interface 的 Command 时序波形

1.2数据写入时序

对于单次的数据写入 DDR3 控制器,用户手册中给出如图所示的时序波形。这里对应写入 command 发起的前后有 1、2 和 3 不同时间的 Data Write 时序,也就是说,数据比 command 早一点或晚一点写入都是可以的。

User Interface 的写数据时序波形

对于“数据比 command 早一点或晚一点写入都是可以的”这句话,用户手册中提到,

command 以及 data 都有各自的 FIFO,因此他们是需要同步的,换句话说,如果让我设计这个 controller 的 User Interface,并且和目前的机制一样,command 和 data 都有 FIFO,那么很简单,我会根据 command FIFO 中的新命令,对应取一个 data FIFO 中的写入数据,也不用管它们谁先被送到各自的 FIFO 中。当然了,command FIFO 有命令是 data FIFO 取数据的先决条件。至于两个 FIFO 万一不同步,那么怎么办?没办法,用户必须保证它们同步。

前面说 command 时关注接口 app_cmd、app_addr、app_en 和 app_rdy,这里写数据则需要关注接口 app_wdf_data、app_wdf_wren、app_wdf_end 和 app_wdf_rdy。

先说 app_wdf_end,DDR3 实际读写的 Burst =8,举例来说,DDR3 的数据位宽为 16bit,

Burst 为 8,就是说每次对 DDR3 执行读写,必须是连续的 8*16bit 数据。那么在 User

Interface 这端,如果逻辑时钟为 DDR3 时钟的 4 分频,且数据位宽为 128bit,那么单个时钟周期就对应 Burst=8 的一次读写操作;而如果数据位宽为 64bit,那么必须执行 2 次数据操作才能够完成一次 Burst=8 的读写。对于前者,app_wdf_end 始终为 1 就可以了;而对于后者,app_wdf_end 每 2 个写数据时钟周期内,前一次拉低,后一次拉高。

余下3个信号app_wdf_data、app_wdf_wren和app_wdf_rdy,他们的工作原理和command时序类似。app_wdf_data 有效,且 app_wdf_wren 拉高,必须 app_wdf_rdy 也为高,才表示当前数据写入 DDR3 控制器。

注意:执行写数据 command 和执行写数据操作,它们是一一对应的,虽然控制时序可以分开实现。

1.3读数据时序

写时序和读时序它们本质上是一样的。每个数据的读操作,也需要先有读 command 的发起,当有效读 command 发起后,若干个时钟周期后,app_rd_data_valid 拉高,此时 app_rd_data 有效,用户逻辑据此读出数据即可,非常简单。

对于连续读取也是一样的。User Interface 可以送一大堆读 command,注意这些读command 必须都是有效 command,随后就等着 app_rd_data_valid 拉高接收app_rd_data 即可。用户手册给出的读数据时序波形如图所示。

User Interface 的读数据时序波形

代码解析

该工程实例的模块层次:

● ddr.v 模块是工程顶层模块,例化子模块并申明端口。

● clk_wiz_0.v 模块例化 PLL IP 核,产生 DDR3 的时钟。

●DDR ip 模块例化 DDR3 控制器 IP 核。

● data_source.v 模块产生 DDR3 的读写控制命令,实现 DDR3 控制器和 DDR3 芯片的读

写测试功能。其下例化的 dist_mem_gen_0.v 是片内 RAM 的 IP 核,用于存储每次读出DDR3 芯片的数据;

ila_0.v 模块则是在线逻辑分析仪的例化。

2.在线逻辑分析仪调试

连接好开发板、下载器并且给板子供电。打开工程,点击“Program and Debug 、Open Hardware Manager 、Open Target”按钮,弹出菜单中点击“Auto Connect”。

此时“Program Device”选项高亮,点击它。

在 Program Device 页面中,Bitstream file 为当前工程路径下的 .bit 文件,Debug probes file 为当前工程路径下的 debug_nets.ltx 文件。设置好以后,点击“Program”按钮。

在 Trigger Setup 页面中,可以点击左侧的“+”号添加作为触发信号的接口,如这里找到 timer_wrreq 作为触发信号。

完成触发信号、触发条件设置,并且添加好观察信号后,可以点击页面按钮开始运行在线逻辑分析仪。

下图为触发一次的采样,捕获到了DDR3 控制器数据写入操作的时序。

同样的,若是我们将 timer_rdreq 信号添加到 Trigger Setup 页面中作为触发信号,那么接下来运行在线逻辑分析仪则会抓到DDR3 控制器读数据的操作时序。

ps读写ddr3里面的数据 zynq_DDR3读写数据调试相关推荐

  1. ps读写ddr3里面的数据 zynq_Zynq:用PS控制DDR3内存读写

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  2. PL读写DDR3 实现PS和PL间的数据交互 代码分析

    本文是PL读写DDR3 实现PS和PL间的数据交互 的继续,深入分析其代码. 首先分析基本要求,或者需求分析,然后读写流程描述,实测采集的读写过程的波形图,最后分段代码分析,这个代码是上文中利用viv ...

  3. PL读写DDR3 实现PS和PL间的数据交互

    本文构建一个AXI4-Lite Master IP来实现PL读写DDR3.最后用sdk 程序验证pl 读写过程中写入的数据. 本文参考 https://www.eefocus.com/antaur/b ...

  4. ps读写ddr3里面的数据 zynq_ZYNQ_PL与PS的DDR交互

    ZYNQ7000系列中PS端与PL端的通信都是通过AXI总线进行连接的,利用好AXI协议是PS与PL交互的基础,因此设计这个实验来进一步了解两者间的通信. 1.实验目的 PL端通过AXI协议访问PS端 ...

  5. Xilinx DDR3 —— MIG IP核的读写仿真(APP接口)

    在上一篇中Xilinx DDR3 -- MIG IP核的配置(APP接口),已经观看了Xilinx官方提供的MIG IP核读写例程仿真波形,本着学习的目的,本篇开始自己编写MIG IP核读写程序,用于 ...

  6. Xilinx MIG核读写DDR3内存,连续读写内存的正确方法(时序)及代码

    关于Xilinx 2020.1新建工程时配置MIG核的完整步骤,请参阅:https://blog.csdn.net/ZLK1214/article/details/111349678 MIG核里面有两 ...

  7. spring Batch实现数据库大数据量读写

    spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理  1. data-source-context.xml Xml代码   &l ...

  8. c语言作业雇人写,C语言作业的链表数据的读写

    问题的引入: 这学期C语言项目我选择做一个理财管理系统,数据存储使用链式映象,也在此基础上实现数据显示功能块.在完成了数据的统计显示,按时间段显示,按类别显示等功能后,才开始考虑数据的读写的文件操作功 ...

  9. python把数据写入excel_Python读写sqlite3数据库的方法并且将数据写入Excel的实例详解...

    这篇文章主要介绍了Python实现读写sqlite3数据库并将统计数据写入Excel的方法,涉及Python针对sqlite3数据库的读取及Excel文件相关操作技巧,需要的朋友可以参考下 本文实例讲 ...

  10. VTK修炼之道13:数据读写_图像数据的读写

    1.前言 VTK应用程序所需的数据可以通过两种途径获取: 第一种是生成模型 ;第二种是从外部存储介质里导入相关的数据文件,(如vtkBMPReader读取 BMP图像) .VTK 也可以将程序中处理完 ...

最新文章

  1. python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?
  2. 姍姍遲來的iPhone文檔處理功能
  3. Python调用茉莉机器人API接口
  4. css 实现app图标样式_界面按钮样式丑?不可能!16款css实现炫酷按钮
  5. getElementById和querySelector区别
  6. 初创企业融资应量力而行
  7. (05)VHDL实现分频器
  8. WordPiece是如何基于词表对文本进行切分的
  9. gcd函数(C/C++)
  10. 神威太湖之光是微型计算机,计算机“天河二号“、“神威·太湖之光“是( )。...
  11. 【Python | 词云】聊天记录绘制超美词云(七夕快乐 ,曾同学)
  12. 如何将PDF转换Word?微信如何转换PDF文件?
  13. 如何关闭win10防火墙_如何彻底关闭win10自带杀毒软件:windows defender?
  14. 心脏支架手术后遗症 做完心脏支架手术留下后遗症
  15. channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no
  16. Apple ipad发布会rtsp地址
  17. Linux安装RPM包、查看本机ip和端口、手动配置ip、中标麒麟无法显示ip地址的详细解决方法
  18. 28个数据可视化图表的总结和介绍
  19. Web前端面试题(全锦集)
  20. comfort说明书 tp1200_西门子TP1200COMfort用什么编程软件

热门文章

  1. 亲自面试汇丰银行面试题目总结
  2. 竞赛|全球物联网数据创新大赛
  3. 逐步分析类的拆分之案例——五彩斑斓的小球碰撞
  4. 电视浏览器Emotn V1.0.0.2+悟空跨屏电视输入法
  5. Java实现经纬度格式转化
  6. 解决Matplotlib中Times New Roman字体无法改变字体
  7. 基于jsp+mysql+Spring+mybatis java的SSM健身房管理系统
  8. html 中数字一直往上加的动态效果,CSS动画:数字增量效果
  9. JAVA定义矩形类 方法二
  10. 数据库mysql实训报告_数据库实训报告.doc