本文对 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 控制器读数据的操作时序

kepware怎么读modbus/tcp数据_DDR3读写数据调试相关推荐

  1. kepware怎么读modbus/tcp数据_kepware怎么选择驱动?它是怎么与下位机进行通讯的?...

    Kepware是一款常用的OPC服务软件,主要负责上位机与下位机之间的通讯,在控制系统中,往往上位机与下位机之间的通讯协议不匹配,导致无法直接进行通讯,这时我们就会使用OPC进行转换来进行通讯. 今天 ...

  2. kepware怎么读modbus/tcp数据_多机房多活架构,究竟怎么玩?

    前情提要:<当年,我们是怎么平滑上云的?>一文中提到了上云的背景,将所有的系统,从一个机房,迁移到另一个机房.如上图:迁移之前,系统部署在机房A(M6)内,是单机房架构.迁移之后,系统部署 ...

  3. js实现modbus_nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据

    nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据 在nodejs中安装modbus-serial库 本人使用的开发环境是Windows10下的VSCode,安装并配 ...

  4. java dataset读取数据,TensorFlow读写数据

    前言 回顾前面: 众所周知,要训练出一个模型,首先我们得有数据.我们第一个例子中,直接使用dataset的api去加载mnist的数据.(minst的数据要么我们是提前下载好,放在对应的目录上,要么就 ...

  5. 欧姆龙PLC网关BL110之41:实现欧姆龙 PLC 接入Modbus TCP 云平台

    COM口采集欧姆龙 PLC CJ/CS/CP 的配置 欧姆龙PLC网关一共有四个COM 接口, 4个COM口的配置内容一样,COM1固定为RS232,COM2.COM3和COM4是RS232/RS48 ...

  6. 钡铼智能楼宇控制BACnet 接入Modbus TCP Server云平台

    COM口采集 楼宇控制BACnet的配置 工业智能网关一共有四个COM 接口, 以COM口采集楼宇控制BACnet MS/TP设备为例,COM口 485接口A+.B-分别对应楼宇控制 BACnet M ...

  7. 工业现场通讯协议网关BL110应用17:实现三菱 PLC FX2N 接入Modbus TCP Server云平台

    COM口采集三菱 PLC FX2N 的配置 工业智能网关一共有四个COM 接口, 4个COM口的配置内容一样,COM1固定为RS232,COM2.COM3和COM4是RS232/RS485可选串口(默 ...

  8. 工业智能网关BL110详解之1:实现三菱 PLC FX1S 接入Modbus TCP Server云平台

    COM口采集三菱 PLC FX1S 的配置 工业智能网关一共有四个COM 接口, 4个COM口的配置内容一样,COM1固定为RS232,COM2.COM3和COM4是RS232/RS485可选串口(默 ...

  9. 台达PLC网关BL110应用33:实现台达PLC DVP接入Modbus TCP云平台

    COM口采集台达 PLC Delta_DVP的配置 台达PLC网关一共有四个COM 接口, 4个COM口的配置内容一样,COM1固定为RS232,COM2.COM3和COM4是RS232/RS485可 ...

  10. 10通信端口感叹号_S71200 技术篇——MODBUS TCP通信

    一.S7-1200 Modbus TCP 通信指令块 图1. Modbus TCP V4.0 版本指令块 二.S7-1200 Modbus TCP 实验环境 下面以两台S7-1200之间进行 Modb ...

最新文章

  1. 【ACM】杭电OJ 2010
  2. .net framework开发winform_这个Winform的UI库也太全了!四十多个控件都在这一个项目里了...
  3. 二、linux命令(ubuntu)
  4. 跨平台移动开发_PhoneGap 使用Accelerometer 加速器
  5. MVC3 Razor学习资料汇总(ScottGu的博客截至2011-02-15动态)
  6. 只针对异常的情况才使用异常_如何以及何时使用异常
  7. 你的代码(软件)安全吗?【信息图】
  8. crammd5 php,使用CRAMMD5的SMTP身份验证
  9. android电源管理白名单,刷BIOS工具分享(白名单,高级菜单,电源管理
  10. 从IAP升级到涂鸦OTA升级介绍 (下)
  11. 图像修复(拖影、失焦、雨雾、模糊)deblurGAN 论文解读
  12. 研究生必备的文献翻译软件知云文献翻译替代品--Mac monterey
  13. 跑步,找到自己的节奏
  14. vue中clearInterval()清除定时器报timeout.close is not a function错误?
  15. Appium报错解决
  16. [1600]卡斯丁狗要吃糖葫芦
  17. 中国56个民族脚本数据
  18. Qt信息隐藏(Q_D/Q_Q)介绍
  19. Choregraphe不能连接虚拟机器人以及搜索不到开机的机器人
  20. 加速出圈的B站:商业化心结何时割

热门文章

  1. 字节跳动、腾讯、阿里的社交战,浑水中依然没有赢家
  2. vs2019找不着工具箱了_解决vs2010中工具箱的不见问题
  3. LTE-5G学习笔记14--VoLTE常用12大知识点
  4. wifi服务器延迟高,网络延时高(网络延迟高怎么办(家里WIFI延迟高,教你几招搞定网络延迟))...
  5. 计算机办公软件应用中级,计算机办公软件应用中级和计算机123级有什 – 手机爱问...
  6. Kali安装beef-xss
  7. Chelly个人训练
  8. 千人基因组(1000 Genomes)提取群体(population)或者样本(sample ID)信息
  9. 一本通1325:【例7.4】 循环比赛日程表
  10. java action接口,Struts2 Action接口与ActionSupport类