DDR3 SDRAM物理层(PHY)的控制器(PUB)内置了DDL VT补偿与I/O阻抗校准功能,这两个功能可在DFI Update请求中由控制器触发完成,或者是PHY触发完成。DFI Update接口时序需要符合DFI 2.1协议中对Update接口的要求。

1 DFI Update的两种工作方式

在DFI Update的两种方式中,采用存储控制器触发的Update是由控制器控制何时来进行DFI Update,在Update过程中控制器周期性的向PHY发送Update命令,并保证在整个Update过程中没有任何的数据请求访问PHY。而PHY触发的Update则是由PHY来决定何时进行Update。当PHY内部的检测机制检测到PHY需要进行Update时,就会通过DFI Update接口向控制器发送Update请求,在一定时间内控制需要停止所有对PHY的数据请求访问,并通过DFI Update接口回应PHY的请求,直到PHY撤销Update请求。

这两种方式各有各的好处,控制器触发的Update可由控制根据数据通路的闲忙状态,选择性的向PHY发送Update请求,以达到最佳的性能指标。而PHY触发的Update则能够实时更新PHY内部状态,使PHY的时序能够保持在最佳状态。在GK6202S中,MC(DDR3存储控制器)仅采用了控制器触发完成Update的方式,并且不支持PHY来触发Update的方式。

以下为Update中DDL VT补偿与I/O阻抗校准功能的详细说明。

2 DDL VT补偿原理

2.1 功能概述

在芯片操作时,电压与温度都会随着运行时间增加而变化。PUB中包含了VT漂移补偿逻辑,用来动态地调整延迟单元的延迟选择输入,以保持延迟单元的延时为一个固定值。DATX8中的DDL都是可以进行补偿的,而AC中的DDL则不能进行补偿。AC中的DDL都是用来匹配DATX8中的数据路径的,所以不会对这些延迟设置0以外的值。
一旦使能VT补偿功能,DATX8中的主延迟线(MDL)会持续的以选择的延迟时间为单位测量DDR的时钟。在每个更新周期内,由VT漂移造成的变化,将会传递到其他的延迟线状态机中,以适应期望的延迟时间。每个延迟线的更新使能可通过配置 PGCR0-2 寄存器。
在初始校准或数据训练被触发时,MDL控制逻辑将第一次测量的MDL周期存储为MDL校准周期,前期MDL校准周期和当前MDL校准周期。
在MDL初始校准之后,MDL会继续周期性的进行周期测量。随后每一次的测量MDL周期都会被存储为当前的校准周期。如果当前周期与前期周期不符,且超过PGCR.DLDLMT规定的VT阈值,VT漂移补偿就会开启。 参考PUB文档420页,“VT Drift Status and Update Timing” 可得到更详细的VT漂移状态与VT更新时序描述。
DATX8中需要补偿的延时参数可通过以下公式得到:

DLnew=MDLnew/MDLinit*DLinit

MDLinit为初始MDL校准周期(IPRD)
MDLnew为当前MDL校准周期(TPRD)
DLinit为初始延迟线的延迟选择值,与MDLinit一起计算得到
DLnew为延迟线的VT补偿值
当MDL周期的变化被检查到,VT补偿逻辑就就会计算出DDL的VT补偿值。此计算结果会被存储到一个内部本地寄存器里,并且在VT更新被PUB触发前都不会被使用到DDL上去。
例如:在针对DDL VT补偿的仿真验证中,我们观察到了整个DDL VT补偿的过程。从过程上看,分为三个步骤:
1. TPRD的检测与计算
2. VT补偿值的计算
3. 等待DFI Update触发,更新DDL的延迟值

下面,我们从这三个步骤来描述整个DDL VT补偿的过程:

2.2 TPRD的检测与计算

在PUB内的init_phy中,MDL中TPRD的计算在dx_ctl[0].init_lcdl_dx_mdl(以下简称MDL模块)模块中完成计算。在MDL模块中,TPRD的计算分为两级,首先是measure_probe的计算,然后通过measure_probe的结果来计算TPRD。
measure_probe的计算总共有8个迭代步骤,在初始状态下会被初始化为0x80,根据PHY反馈的cal_out信号来对measure_probe进行操作,cal_out为1时对measure_probe进行减操作,cal_out为0时对measure_probe进行加操作。这一级对measure_probe的计算约为1400ns的时间。

得到measure_probe后,average_period在每次cal_average信号为1时与measure_probe的值相加。然后cfg_tprd_16x的计算过程则是将cfg_tprd_16x本身的值减去cfg_tprd_16x/2再加上average_period。在mdl_cal_update为1时将cfg_tprd_16x的值作为TPRD输出个其他的DDL计算模块。这一级的计算时间约为11148ns。

2.3 VT补偿值的计算

当TPRD完成计算后,会将cfg_tprd_16x信号输出到每个lcdl与bdl的延迟计算单元。在这些延迟计算单元中都实例化了同一个计算模块——u_DWC_ddr3phy_init_ddl_vtcomp。此模块的功能就是将cfg_tprd_16x的值转化成LCDL与BDL等DDL中可识别的dly_sel,同时也将这些翻译过了的值传输给配置寄存器,以供外部访问。
具体计算过程就不详细描述。
当LCDL与BDL的所有延迟单元需要更新的延迟值都已经计算完毕时,u_DWC_ddr3phy_init_phy模块就会想外部控制模块发起vt_drift请求,表示此时VT补偿的计算已经完成,等待外部响应,一旦响应更新值就会更新到各个DDL中去。

2.4 等待DFI Update触发,更新DDL的延迟值

在PUB中,共有三种vt_drift的协议,如下图所示:

第一种协议:当PHY完成补偿计算后就会将vt_drift信号拉高,而PUB则会根据DFI端口Update的情况在控制器空闲状态时将vt_update信号拉高,此时在T4周期表示当前的VT补偿值都已经更新到DDL中去了。
第二种协议:在第一种协议的基础上,若在T4周期时又有一次新的补偿计算完成,那么在两个周期后vt_drift拉高的同时,vt_update也会同时拉高。从而将最新的VT补偿结果更新到DDL中。
第三种协议:在第一种协议的基础上,在T4周期后,若PUB能够从DFI Update中得知控制仍然处于空闲状态或自刷新状态,那么PUB就会将vt_update一直保持高电平,以保证DDL中的VT补偿的结果是最新的。此时每一次vt_drift拉高都只需要一拍就可以完成VT补偿值的更新。

2.5 禁止VT计算过程

当我们手动配置DXnLCDLR0-2与DXnBDLR0-4寄存器时,延迟线的VT计算应该被禁止。以下为禁止VT计算的流程:
1. Write DXCCR[2] (MDLEN) = 1’b0
2. Write PGCR1[26] (INHVT) = 1’b1 to stop VT compensation and write PGCR[22:15]=8’b0 to prevent a
PHY initiated DFI update request
3. Write PGCR0[5:0] = 6’b000000 OR disable the DFI update interface from issuing controller initiated
DFI updates
4. Wait for approximately 5000 clock periods for all Master Delay Lines to complete the calibration
5. Calibrations will be completed and the DXnMDLR registers can be written.
6. To re-enable master delay line calibrations, VT calculations and VT compensation
7. Write DXCCR[2] (MDLEN) = 1’b1
8. Write PGCR1[26] (INHVT) = 1’b0
9. Write PGCR0[5:0] = 6’b111111
10. System ready

3 阻抗校准原理


如上图所示参与阻抗校准的单元主要有三个:*_PZQ模块,位于IO;*_VREF模块,位于IO;阻抗控制单元(数字电路),位于PUB。
可校准内容:
1、ODT pull-up
2、ODT pull-down
3、驱动电阻 pull-up
4、驱动电阻 pull-down
阻抗控制单元通过ZCTRL将阻抗码输出至每一个VREF单元。VREF单元进行解码,并通过ZIOH总线传输给每一个功能IO单元以及*_PZQ单元。PZQ单元将VREF发来的阻抗码与外接电阻进行比较,并将结果通过ZCOMP反馈给阻抗控制单元。阻抗控制单元根据比较结果调整ZCTRL的值。直到阻抗码与外接电阻相匹配。阻抗控制单通过ZCAL来选择对哪一个电阻进行校准。
阻抗校准可分为以下三种方式,但是在整个Update过程中,PUB都是使用Direct Calibration方式来进行校准的。
A. Direct Calibration,使用ZPROG设置
在此模式下,用户仅需要配置ODT(ZPROG[7:4])与驱动电阻(ZPROG[3:0]),并运行阻抗校准单元内的自动校准程序。在内部程序中,ODT与驱动电阻的上、下拉电阻会独立进行校准。

B. Override Setting,使用ctrl_ovrd_data设置
在此模式下,用户不需要使用校准循环,仅需直接配置zctrl_ovrd_data[19:0]来控制阻抗值。共有32个可编程序列,每一种序列代表一个阻抗值,此阻抗值与corner有关。
例如,假设电流为I,校准电压为VREF,那么序列N的可编程阻值为:
Zprog = K * VREF / (N * I )
K为校正因子,近似于1
具体阻值可参考PHY文档中的表格,《dwc_ddr32_phy_gf40lp25_db》第96页。

C. Custom Calibration,在使用ZPROG基础上,进行扩展校准
此模式为前两种模式的结合,可分成两步完成:
1、用户提供一个ZPROG的值,并记录下ZCTRL的值。
2、用户通过计算ZCTRL的值,来对阻抗进行override。
例如:需要得到一个ZO 为18 ohm的阻抗
1、用户执行直接校准ZO为36 ohm,此时pull-up index = 12,pull-down index = 13。
2、计算18 ohm的index,index不得大于31
pull-down (36/18) * 13 = 26
pull-up (36/18) * 12 = 24

DFI Update的原理与实现相关推荐

  1. 计算机原理学习(序)

    转载地址:http://blog.csdn.net/cc_net/article/details/10418711 序言 又有两年没有写Blog了, 这2年从做windows phone 到 Andr ...

  2. rosdep update出错解决办法(2021)

    ROS安装方法:ros安装后,初始化时rosdep update出错解决办法(2021-06-30) 初始化时rosdep update出错解决办法 2021年以前,通过科学上网.手机开热点等方式,还 ...

  3. 用基于模型和接口的T4来生成RESTful服务

    \ 关键要点 \ 许多REST服务中都包含重复的模式: \ 如果能自动生成这些模式相关的代码就可以节省很多时间: \ Visual Studio的T4和EnvDTE具有强大的生成代码功能,不需要更多工 ...

  4. 解决pytorch半精度amp训练nan问题

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 可可哒@知乎(已授权) 来源 | https://zhua ...

  5. yum 更新_CentOS7 - 使用yum-cron自动更新软件

    使用yum-cron自动更新软件 我们知道保持在任何安全警报和应用重要更新之上的重要性,但确保CentOS系统上的所有软件都得到更新可能是一项繁琐而耗时的任务,尤其是当您管理的不仅仅是 一台服务器. ...

  6. 理解setState(),异步还是同步?

    state state的存在是为了动态改变组件,比如根据不同的用户操作和网络请求,来重新渲染组件. setState()是React给我们的一个API,用来改变或定义state. setState() ...

  7. es 创建索引_es的基本原理和操作文档

    来源:https://blog.csdn.net/wanbf123/article/details/81504097 一.背景知识 1.搜索的分类 我们想要寻找某些信息的时候,一般会直接去百度.谷歌. ...

  8. 安装过程中检测数据库是否已经存在

    制作服务端程序的安装包,常常要创建数据库和其中的表.在创建之前,应该检测一下这个数据库是否已经存在了,如果已经存在,那么弹出消息框问用户是不是要覆盖现有的数据库数据.这里是一个使用NSIS制作安装包时 ...

  9. ubuntu服务器安装可视化桌面(Gnome)

    作者:锕琅 原文链接ubuntu服务器安装可视化桌面(Gnome) - 知乎 目录 基础环境配置和安装 1.切换用户为Root 2.更新获取软件及版本信息 3.安装VNC4Server 4.启动VNC ...

  10. OCA/OCP Oracle 数据库12c考试指南读书笔记:第6章: DML and Concurrency

    DML语句 共5个: • SELECT • INSERT • UPDATE • DELETE • MERGE insert 可以插入一行,或多行.可以插入多张表. 可以指定值插入,可以从子查询结果集插 ...

最新文章

  1. python之路之面向对象3
  2. 使用idea编写第一个Java程序
  3. env: zh_CN.GB2312:: No such file or directory
  4. 通告,消息,提醒 DB
  5. MyEclipse连接MySQL
  6. 第十六周项目3-有相同数字?
  7. 特征级融合_遥感影像融合的方法有哪些
  8. Arduino笔记-使用RFID-RC522读取IC卡卡号
  9. 【转】状态压缩动态规划
  10. android无网络状态栏,Android中检查网络连接状态的变化,无网络时跳转到设置界面...
  11. Spring Security3
  12. 两年前,梦开始的地方.
  13. Fashion-MNIST数据集无法下载解决方案
  14. 三峡大学学生选课系统_201014119_赵敏_三峡大学学生选课系统.doc
  15. 中国外显子组测序行业市场供需与战略研究报告
  16. Golang环境windows 设置 GOROOT 和 GOPATH
  17. 爬虫基础知识+Scrapy框架
  18. CryEngine 渲染流程
  19. win10系统优化---持续整理中
  20. 代理IP 有效性检测

热门文章

  1. easyboot的一个严重不足
  2. 开放式社区?太小儿科了,智慧城市才是重点
  3. 移动架构师第一站UML建模
  4. 整流二极管的细节分析
  5. 腾讯面试算法题——编码
  6. 硬件基本概念-模拟电子电路
  7. 有趣的23000词根
  8. 解决dns没问题,能上qq不能上网的问题
  9. LeetCode刷题时遇到error: control reaches end of non-void function [-Werror=return-type]的解决方法
  10. windows服务器硬盘怎么扩容,windows2016 扩容硬盘