DDR3 数据传输 (三)
目录
前言
一、地址映射
二、命令路径
三、写路径
四、读路径
五、内存刷新
六、ZQ校准
参考说明
前言
前两篇文章主要介绍 MIS IP的配置(非AXI4)以及用户接口各信号的含义。本文将继续介绍DDR3数据传输过程的读写时序问题。
前情回顾:
1、DDR3 数据 传输 (一)
2、DDR3 数据 传输 (二)
建议PC端食用~
一、地址映射
地址空间有两种方式:
1、Bank- Row-Column
2、Row-Bank-Column
方式的选择由字符参数:MEM_ADDR_ORDER控制,参数为 BANK_ROW_COLUMN 时,地址空间为方式1,参数为 ROW_BANK_COLUMN 时,地址空间为方式2。参数为 TG_TEST 时,地址映射仅用于测试目的。它使地址重新映射能够测试对DRAM不同部分的地址访问。它重新映射地址,重新映射在控制器的UI部分中完成。
举例说明:
行地址位宽:15,列地址位宽:10,BANK位宽:3 地址映射方式为: ROW_BANK_COLUMN
二、命令路径
当用户逻辑侧的 app_en 信号和 MIS IP核的UI块输出的 app_rdy 信号同时有效时,用户发出的命令(读或者写)被 IP核接收,并且写入 命令 FIFO中等待被执行。但如果 app_rdy 信号无效,那么用户发出的命令将不被IP 核接收。如下图所示,用户需要一直保持 app_en信号、地址信号、命令信号有效直到 app_rdy 信号有效,将命令以及地址接收。下图中,app_cmd信号、app_addr信号、app_en信号一直保持3个时钟周期同时有效,直到第三个时钟周期时,app_rdy信号输出有效才将命令信号、地址信号接收。
非连续的写命令如下图所示,对应有三种不同情况:
- 写的数据和与之对应的写命令同时有效;
- 写的数据出现(有效)的时刻早于写命令一个时钟周期;
- 写的数据出现(有效)的时刻晚于写命令,但是不能超过两个时钟周期;
三、写路径
当 app_wdf_wren 和 app_wdf_rdy 均有效时(握手),写入的数据将被寄存在写FIFO中。如果 app_wdf_rdy 信号输出无效(低电平),用户需要保持 app_wdf_wren 和 app_wdf_end 高电平 以及 数据 app_wdf_data 有效,直到 app_wdf_rdy 信号输出有效。
上图中,内存的突发类型为 BL8(突发长度为8,即连续写入8个数据),2:1模式 和 4:1模式 指的是在配置MIS IP的GUI界面选择的DDR3时钟频率与FPGA内部逻辑时钟频率之间的比例。 app_wdf_end 信号必须在写突发模式结束时拉高。对于内存突发类型为 BL8,2:1 模式下,app_wdf_end 信号必须在第二个写数据字拉高(如图1-76)。
※ 以8位内存、突发类型为 BL8 ,4:1模式为例,如果应用接口处的64位数据是:0000_0806_0000_0805(16进制),那么在外部DRAM接口处的数据如下图所示。
在不同时钟边沿的数据为:
※ 以8位内存、突发类型为 BL8 ,2:1模式为例,应用数据位宽为32位,第一个周期发送的数据是:0000_0405(16进制),第二个周期发送的应用数据是:0000_080A(16进制)如下图所示,64位的用户数据必须用两个时钟周期发送。
对应的外部DRAM接口的数据为:
总结:
1、突发类型与模式(2:1或4:1)之间没有任何关系,对于BL8(Burst Length eight),突发长度为8,仅仅表示一次性连续写入数据(app_wdf_data)的周期个数。
2、假设 app_wdf_data 位宽为 WIDTH_DATA;选择的模式为 MODE (MODE=2或4);DDR3的存储单元位宽 WIDTH_DDR3 (一般来说等于8或16),在DDR3存储单元位宽等于GUI界面(Controller Options 页面)设置的数据位宽(Data Width)的前提下,位宽则有如下关系成立:
WIDTH_DATA = MODE * WIDTH_DDR3 * 2
再假设 Controller Options 页面设置的数据位宽为:WIDTH_USER,则通用的表达式为:
WIDTH_DATA = MODE * WIDTH_USER * 2
3、详细解释一下 app_wdf_end 信号拉高的条件,该信号表面含义指的是在最后一个周期数据(app_wdf_data)传输时,拉高。那么何为最后一次?如何把握?
技术文档原话:The app_wdf_end signal must be used to indicate the end of a memory write burst.
意思是,在一次内存突发写的末尾将该信号,拉高,那么何时是一次突发写结束?对于存储单元位宽为8位的DDR3来说,BL8的突发模式下,一共需要写入8*8=64位,对于app_wdf_data为64位的情况,写的第一次即是最后一次,对于app_wdf_data 为32位的情况,写的第二次即使最后一次。(认真对比图1-76 和1-77的相关信号 特别是 app_wdf_end 信号)
四、读路径
IP 的UI块 会把用户侧请求的读数据按照请求的顺序进行数据输出。当 app_rd_data_valid 拉高时,UI输出的数据为有效数据。如下图所示:
app_rd_data_end 信号在一次 突发读 操作结束时拉高。但是对于 用户侧的逻辑不是那么必要。
读取的数据会按照 请求的地址顺序进行输出。如下图所示:
五、内存刷新
用户逻辑需要通过将 app_ref_req 信号拉高一个时钟周期,来发起一次内存刷新请求。IP 核中 内存控制器模块(Memory Controller)向物理层(PHY)发送刷新指令后,物理层会将 app_ref_ack 拉高一个时钟周期来响应刷新请求。 在 app_ref_ack 信号应答之后,才可以发送第二次刷新请求。时序逻辑如下图:
六、ZQ校准
用户逻辑需要通过将 app_zq_req 信号拉高一个时钟周期,来发起一次内存ZQ校准请求。IP 核中 内存控制器模块(Memory Controller)向物理层(PHY)发送ZQ校准指令后,物理层会将 app_zq_ack 拉高一个时钟周期来响应ZQ校准请求。 在 app_zq_ack 信号应答之后,才可以发送第二次ZQ校准请求。时序逻辑如下图:
参考说明
【1】Zynq-7000 SoC and 7 Series FPGAs MIS v4.2
【2】图取自官方文档 ☝
DDR3 数据传输 (三)相关推荐
- FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇三
前言 本以为测试基于FPGA 的DDR3,比较简单的事情,发现环境搭建还是比较的繁琐的,这里做个详细的记录,后面就可以通过直接修改工程的方式,快速搭建测试验证环境 开发环境 Windows 10 64 ...
- DDR3 数据传输 (一)
文章目录 目录 前言 MIG IP核 配置 1.检索 IP 2.首页 3."Output Options"页 4."Pin Compatible FPGAs"页
- DDR3 数据传输 (四)
目录 引言 AXI从侧接口参数 AXI从侧接口信号 参考说明 引言 前文链接&#
- DDR3 数据传输 (五)
目录 引言 设计说明 参数说明 设计简图 IP配置说明 写FIFO IP
- FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾
FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...
- 大三上期末复习(网络安全物联网概论安全协议软件工程)
网络安全 零. 试题解析 1.分数分配 删去.... 2.IP分类复习 根据上图,我们可以推出下面的表 再筛选掉特殊的地址,就有如下的范围 P地址根据网络号和主机号来分,分为A.B.C三类及特殊地址D ...
- 计算机网络——传输层实现可靠数据传输
文章目录 一.传输层为什么实现不了可靠数据传输 二.传输层如何实现可靠数据传输 三.可靠传输协议--停-等协议 1.关于ACK数据包+差错检测+重传 2.关于只需1位作序号位 3.关于多次发ACK+序 ...
- OneNET云平台-EDP协议数据传输
OneNet真是中移动的良心之作,对比阿里云和庆科云,OneNet不但免费而且功能也足够嵌入式应用,对学生党而言真是大大的福利,感谢中移动!!!. 一.云端创建设备与应用 (1)创建产品:进入开发者中 ...
- Linux学习笔记 驱动开发篇
ARM Linux 驱动开发篇 本篇我们将会详细讲解 Linux 中的三大类驱动:字符设备驱动.块设备驱动和网络设备驱动. 字符设备最多,从最简单的点灯到 I2C.SPI.音频等都属于字符设备驱动的类 ...
- DDR学习心得(一)
前言 最近在学习DDR3/DDR4相关知识,从中总结了一些心得,想放在CSDN上记录下来.之前在CSDN上看了不少大神的帖子,对我的学习颇有帮助,现在我也想把我的学习进程记录下来,希望可以和各位大神进 ...
最新文章
- SAP LSMW 导入Open PO单据,系统报错 --- GL account 670100 cannot be used ---
- ashx+jQuery,一个轻量级的asp.net ajax解决方案
- fastjson查找指定键值_分布式键值存储 etcd
- [SPDK/NVMe存储技术分析]012 - 用户态ibv_post_send()源码分析
- tomcat配置文件详解
- 《HTTP权威指南》 – 11.验证码和新鲜度
- Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析
- WinForm始终置顶并获取焦点
- 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)
- 定时器(setTimeout/setInterval)调用带参函数失效解决方法
- Ubuntu 12.04 下安装 Eclipse
- WINCE6.0+ILI9806E休眠唤醒显示异常问题
- 安卓微信无root降级教程
- C.I.刘易斯的学术之路--- 刘易斯逻辑之十二尾篇
- 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
- [USACO09OCT]谷仓里的回声Barn Echoes(hush、STL)
- Java 基础 - List 遍历时为什么不能通过 for 循环进行删除,而使用 Iterator 可以 ?
- 服务器Linux环境下安装Matlab2018b
- 在当前项目组中引入敏捷开发思想
- linux用什么剪辑视频教程,极简主义:Linux视频剪辑利器Viedo Trimmer