PS DRAM接口的函数式编程模型(一)

news2024/11/28 6:40:06

针对PS DRAM接口的操作启动,确实需要遵循一系列精心设计的步骤来确保DRAM控制器(DDRC)和DRAM模块能够正确初始化和配置。以下步骤详细说明了这些操作,并指出了Vivado Design Suite通常如何提供这些编程支持。

  1. DDR时钟初始化:涉及配置和稳定DDR时钟信号。时钟的稳定性和准确性对于DRAM操作的时序至关重要。Vivado Design Suite会提供工具来配置时钟源,包括时钟频率、相位和占空比等参数。
  2. DDR I/O缓冲区(DDR IOB)初始化和校准:DDR I/O缓冲区负责在DDR控制器和DRAM模块之间传输数据。初始化这些缓冲区并对其进行校准可以确保信号完整性和性能。Vivado Design Suite通常包含用于配置和校准I/O缓冲区的工具和算法。
  3. DDR控制器(DDRC)寄存器编程:DDRC寄存器编程是配置DDR控制器以匹配DRAM模块特性和系统需求的关键步骤。这包括设置时序参数、配置突发长度、启用或禁用特定功能等。Vivado Design Suite提供了图形用户界面(GUI)或命令行工具来配置这些寄存器。
  4. DRAM重置和初始化:在DRAM模块开始正常操作之前,需要对其进行重置和初始化。这通常包括将DRAM置于已知状态,并设置必要的初始化序列。Vivado Design Suite可以生成这些初始化序列,并通过DDRC将其发送到DRAM模块。
  5. DRAM输入阻抗(ODT)校准:ODT校准是优化DRAM信号质量的重要步骤。通过调整ODT电阻值,可以减少信号反射和过冲,从而提高信号完整性。Vivado Design Suite可能包含用于自动校准ODT的工具或提供指导如何手动进行校准。
  6. DRAM输出阻抗(Ron)校准:类似于ODT校准,Ron校准也是优化DRAM信号质量的一部分。它关注于调整DRAM模块的输出驱动强度,以确保信号在传输过程中保持足够的幅度和清晰度。Vivado Design Suite可能支持Ron校准的自动化或提供相关的配置选项。
  7. DRAM训练:DRAM训练是确保DRAM模块与DDR控制器之间正确同步和数据传输的关键步骤。它包括多个子步骤,如写电平调整、读DQS门控训练和读数据眼图训练。
  • 读数据眼图训练:通过调整读操作的时序参数来优化数据眼图,从而提高数据传输的可靠性和性能。
  • 读DQS门控训练:优化DQS(数据选通信号)的接收时序,以确保读数据窗口的正确对齐。
  • 写电平调整:调整写操作的时序,以确保数据在DRAM内部正确采样。

Vivado Design Suite通常包含自动化工具来执行这些训练步骤,并验证DRAM模块的性能和稳定性。

时钟工作频率

在DDR初始化之前,DDR时钟必须处于活动状态。DDR_2x和DDR_3x时钟都必须正确配置。DDR_3x时钟是DRAM使用的时钟,应设置为所需的工作频率(请注意,每比特的数据速率是工作频率的两倍)。DDR_2x时钟由互连使用,通常设置为工作频率的2/3。DDR PLL频率应设置为工作频率的偶数倍。

表10-5提供了假设50 MHz参考时钟的频率配置示例

对DDR时钟进行编程涉及SLCR中的DDR_PLL_CTRL和DDR_CLK_CTRL寄存器。

除了主DDR时钟外,DDR IOB内置的数字控制阻抗(DCI)功能还使用10 MHz时钟。该时钟通过SLCR DCI_CLK_CTRL寄存器配置。

DDR IOB阻抗校准

DDR IOB使用IOB的DCI数控阻抗模式支持校准的驱动强度和端接强度。在DDR2/DDR3/DDR3L模式下,这用于校准端接强度。在LPDDR2模式下,这用于校准驱动器强度。
DCI状态机需要两个外部引脚VRN和VRP,它们分别连接到VCCO_DDR和地的外部电阻器。DCI设置如表10-6所示。

启用后,DCI状态机将自动将驱动和端接阻抗与外部电阻器匹配。此背景校准需要1-2ms才能锁定,然后连续运行。

校准

1.配置时钟模块,在dci_clk上配置10 MHz时钟

2.使用SLCR寄存器DDRIOB_DCI_CTRL和DDRIOB_DCL_STATUS启用DDR DCI校准系统

   a.将DDRIOB_DCI_CTRL.RESET_B切换为0并设置为1   

   b.根据表10-7设置DDRIOB_DCI_CTRL.PREF_OPT和NREF_OPT字段

  c.将DDRIOB_DCI_CTRL.UPDATE_CONTROL设置为0

  d.将DDRIOB_DCI_CTRL.ENABLE设置为1

  e.对DDRIOB_DCI_STATUS进行轮询。一点一点地做,直到它是1

DDR IOB配置

DDR IOB必须配置为用作I/O。每种类型的DDR IOB由两个不同的SLCR配置寄存器控制。配置寄存器配置IOB的输入模式、输出模式、DCI模式和其他功能。

配置

DDR系统支持16位和32位模式以及断电模式下的DDR3L/DDR3/DDR2/LPDDR2。

按如下方式设置IOB配置:

1.将所有LPDDR2 I/O的DCI_TYPE设置为DCI驱动器。

2.将DCI_TYPE设置为DDR2/DDR3/DDR3L双向I/O的DCI终止。

3.设置OUTPUT_EN=obuf以启用输出。

4.设置TERM_DISABLE_MODE和IBUF_DESABLE_MODE以启用省电输入模式。在DDR训练完成之前,不应设置TERM_DISABLE_MODE和IBUF_DESABLE_MODE字段。

5.将SSTL的INP_TYPE设置为基于VREF的差分接收器,将HSTL设置为单端输入。

6.将INP_TYPE设置为差分输入接收器,用于差分输入。

7.将TERM_EN设置为启用DDR3/DDR32L和DDR2双向I/O(输出和LPRDDR2 IO未终止)。

8.如果只使用16位DQ DDR(包括ECC位),则将DDRIOB_DATA1和DDRIOB_DIFF1寄存器设置为断电。

9.对于DDR2和DDR3/DDR3L,DCI只影响端接强度,因此地址和时钟输出不使用DCI。

10.对于LPDDR2,DCI会影响驱动器强度,因此所有I/O都使用DCI。

VREF配置DDR I/O使用差分输入接收器。该接收器的一个输入端连接到数据输入端,另一个连接到称为VREF的电压基准。对于DDR2/3和LPDDR2 DRAM接口,VREF电压设置为I/O VCCO电压的一半。VREF可以通过专用VREF焊盘从外部提供,也可以从内部电压源提供。建议所有设计都使用外部VREF,以提供额外的时序裕度,但需要外部板组件。要配置VREF参考电源,请按如下方式设置DDRIOB_DDR_CTRL寄存器:

  1. 启用内部VREF
  • 将DDRIOB_DDR_CTRL.VREF_EXT_EN设置为00(断开I/O与外部信号的连接)
  • 根据DDR标准将DDRIOB_DDR_CTRL.VREF_SEL设置为适当的电压设置(VREF=VCCO_DDR/2)
  • 将DDRIOB_DDR_CTRL.VREF_INT_EN设置为1,以启用内部VREF发生器

     2. 启用外部VREF

  • 将DDRIOB_DDR_CTRL.VREF_INT_EN设置为0,以禁用内部VREF发生器
  • 将DDRIOB_DDR_CTRL.VREF_SEL设置为0000
  • 将DDRIOB_DDR_CTRL.VREF_EXT_EN设置为11,以将IOB VREF输入连接到32位接口的外部焊盘
  • 将DDRIOB_DDR_CTRL.VREF_EXT_EN设置为01,将IOB VREF输入连接到16位接口的外部焊盘

DDR控制器寄存器编程

在启用DDRC之前,所有DDRC寄存器都必须初始化为系统特定的值。

大约80个具有350多个参数的寄存器可能会被设置或保持其开机默认值。然后通过写入DDRC_ctrl寄存器来启用DDRC。一旦启用,DDRC会自动执行初始化步骤4-7(功能编程模型)。

DDRC操作是自主的,除非需要更改功能(例如更改AXI端口优先级),否则不需要进一步编程。

DRAM重置和初始化

DDRC根据JEDEC规范执行DRAM重置和初始化,包括重置、刷新和模式寄存器初始化。

DDR初始化顺序
LPDDR2初始化序列

当与LPDDR2 DRAM一起使用时,初始化状态机执行以下初始化序列:

  1. 同时给VDD和VDDQ加电。坚持并抓住CKE。
  2. 使用稳定的时钟
  3. 在reg_ddrc_pre_cke_x1024指定的持续时间内发布NOP/取消选择(规范要求至少200 us,电源和时钟稳定)。
  4. 发布刷新
  5. 加载模式寄存器
  6. 加载扩展模式寄存器
  7. 发出ACTIVE命令
  8. 取消选择reg_ddrc_final_wait_x32周期(无规范要求)。
  9. 开始正常运行
DDR2初始化顺序

对于DDR2,初始化状态机执行以下初始化序列:

  1. 加电
  2. 在reg_ddrc_pre_cke_x1024指定的持续时间内发布NOP/取消选择(规范要求至少200 us,电源和时钟稳定)
  3. 断言CKE并为reg_ddrc_post_CKE_x1024发出NOP/Deselect(规范要求至少400 ns)
  4. 在reg_ddrc_t_rp循环中,先发出“全部预充”,然后再发出“NOP/取消选择”
  5. 将EMR2编程为reg_ddrc_EMR2值,然后对reg_ddrc.t_mrd循环进行NOP/取消选择
  6. 将EMR3编程为reg_ddrc_EMR3值,然后对reg_ddrc.t_mrd循环进行NOP/取消选择
  7. 通过将EMR编程为reg_ddrc_EMR值,然后对reg_ddrc.t_mrd周期进行NOP/取消选择,启用DLL
  8. 通过将MR编程为reg_ddrc_MR值,然后在reg_ddrc.t_mrd循环中执行NOP/Deselect,来重置DLL
  9. 在(reg_ddrc_t_rp+1)个周期内发布预充全部,然后进行NOP/取消选择
  10. 在reg_ddrc_t_rfc_min循环中发出刷新,然后发出NOP/取消选择。重复9次。
  11. 通过将MR设置为reg_ddrc_MR值,将位8设置为1,在不重置DLL的情况下对MR进行编程。
  12. .在reg_ddrc_pre_ocd_x32指定的持续时间内发布NOP/取消选择(无规范要求)
  13. 发出“OCD完成”命令,表示不会执行片上驱动器校准
  14. 为reg_ddrc_final_wait_x32周期发布NOP/取消选择(无规范要求)
  15. 开始正常运行
DDR3初始化顺序

对于DDR3,初始化状态机将执行以下初始化序列:

  1. 加电
  2. 在reg_ddrc_pre_cke_x1024指定的持续时间内发布NOP/取消选择(规范要求至少200 us,电源和时钟稳定)
  3. 断言CKE并为reg_ddrc_post_CKE_x1024发出NOP/Deselect(规范要求至少500 us)
  4. 发出MRS命令,加载具有reg_ddrc_emr2值的MR2,然后在reg_ddrc.t_mrd的持续时间内执行NOP/Deselect
  5. 发出MRS命令,使用reg_ddrc_emr3加载MR3,然后在reg_ddrc.t_mrd的持续时间内执行NOP/Deselect
  6. 发出MRS命令,使用reg_ddrc_emr加载MR1,然后在reg_ddrc.t_mrd的持续时间内执行OP/Deselect
  7. 发出MRS命令,使用reg_ddrc_mr加载MR0,然后在reg_ddrc.t_mod的持续时间内执行NOP/Deselect
  8. 开始计数reg_ddrc_t_zq_long_nop,并发出ZQCL命令开始zq校准
  9. 等待reg_ddrc_t_zq_long_nop计数完成。确保步骤7的等待时间大于tDLLK
  10. 开始正常运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1DCNN-2DResNet并行故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断入门教学-CSDN博客 Python轴承故障诊断 (13)基于故障信号特征提取的超强机器学习识别模型-CSDN博客 Python轴承故障诊断 (14)高创新故障识别模型-CSDN…

机器学习入门(六):分类模型评估方法

目录 1. 数据集划分 1.1 为什么要划分数据集? 1.2 数据集划分的方法 1.3 留出法(简单交叉验证) 1.4 交叉验证法 1.5 留一法 1.6 自助法 2. 分类算法的评估标准 2.1 分类算法的评估 2.2 SKlearn中模型评估API介绍 3. 小结 前言 掌握分类模型评估方法对于数据科学家…

测试流程规范--准入准出规则

简介: 为了加强测试部软件测试的质量控制及与测试相关部门、人员更好理解测试各阶段的准入/准出条件而建立的准入/准出规范。 一,目的 为了加强测试部软件测试的质量控制及与测试相关部门、人员更好理解测试各阶段的准入/准出条件而建立的准入/准出规范…

【python】在Python中操作MongoDB的详细用法教程与实战案例分享

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

《黑神话:悟空 性能测试工具》Steam已免费开放下载

《黑神话:悟空》将于8月20日上午10点正式解锁,届时大家就能体验到这款期待三年的国产3A之光了。为了方便大家游玩,官方提前上线了性能测试工具,目前《黑神话:悟空 性能测试工具》已在Steam商店开放免费下载。 据Steam评…

Qt | QSQLite内存数据库增删改查

点击上方"蓝字"关注我们 01、演示 参数随便设置 查询 修改 右键菜单是重点 手动提交,点击Submit All

2024下半年软考报考攻略:从报名到拿证全流程,看这一篇就够了!

下半年软考本月就要开启报名了,有一些同学可能是第一次参加,还不清楚具体流程。今天小编就来为大家总结软考从报名到拿证的全过程指南,有需要的可以收藏这篇攻略哦! 一、报名流程 1、登录网站 登录中国计算机技术职业资格网&…

C++结构体指针强制转换以处理电力系统IEC103报文

前言 最近依旧是开发规约解析工具的103篇,已经完成了通用分类服务部分的解析,现在着手开始搞扰动数据传输,也就是故障录波的传输。 在103故障录波(扰动数据)的报文中,数据是一个数据集一个数据集地存放&a…

如何有效优化无线双模蓝牙模块的通讯距离?

许多客户在使用无线双模蓝牙模块时发现传输距离达不到预期要求。影响无线蓝牙模块通讯距离的因素有很多,以下是美迅物联网MesoonRF归纳总结的一些可能的原因以及如何改善: 1.优化天线设计 天线是影响无线双模蓝牙模块通讯距离的关键因素之一,…

IPC进程间通信

信号 信号是一种终端机制,程序运行到一半的时候接收到了某种通知,程序就会立刻中断运行,转而去处理通知。 登记信号 一个进程只会接收默认的几个信号 如果想要让一个进程接收特定信号的话,必须提前在该进程中登记一下想要接收…

一次了解所有功能!超详细【Stable Diffusion界面】大揭秘!

对于AI绘画的初学者而言,一看到SD的UI界面肯定是一脸懵,因为有太多陌生词汇,什么大模型、什么提示词、什么什么采样迭代,和传统的画图方式完全不在一个层面上,学习起来就无从下手~ 今天小元老师就给大家详…

运维高级内容--lvs按权重值轮询调度

创建5台主机(一些配置是基于实验一的基础): 客户端client 172.25.254.200路由器route 172.25.254.100 192.168.0.100 (需要eth0、eth1两个网关)LVS 192.168.0.50webserver1 192.168.0.10webserver2 192.168.0.20 1.LVS主机: vim…

DataGrip安装与MySQL连接

DataGrip安装 官网:DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains 点击页面中的【Download】进入下载界面,如下图所示: 根据自己的电脑系统选择不同的版本【windows/macOS/linux】,点击【.exe】可选择…

MySQL(一)——初识数据库(概念、数据类型、基本表库操作)

文章目录 初识数据库数据库相关基本概念数据库的分类 MySQL数据库数据模型基本操作库操作查看数据库创建数据库删除数据库选中数据库 数据类型数值类型字符串类型日期类型 表操作查看所有表查看表结构创建表删除表 其他操作查看警告信息查看编码集 这是我们 MySQL 学习的第一程…

GD32E503实现串口中断收发功能

如有技术问题及技术需求请加作者微信! 源码下载链接:代码下载 亲测可用实现GD32E503库函数串口数据收发功能: #include "gd32e50x.h" #include "gd32e503v_eval.h" #include "systick.h" #include <stdio.h> #include "user_uart…

JVM知识总结(性能调优)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 性能调优 何时进行JVM调优&#xff1f; 遇到以下情况&#xff0c…

初识C++ · 智能指针

目录 前言&#xff1a; 1 智能指针的发展历史 2 unique_ptr和shared_ptr的基本使用 3 shared_ptr的模拟实现 4 有关定制删除器 前言&#xff1a; 智能指针的引入&#xff0c;我们得先从异常开始说起&#xff0c;异常面临的一个窘境是new了多个对象&#xff0c;抛异常了会…

centos7简介和安装步骤

目录 centos简介 1.CentOS 7 简略简介 2.使用建议 vmware搭建centos7 1.centos镜像下载 2.虚拟机创建 2.1 新建虚拟机 2.2典型 2.3操作系统 2.4客户机操作系统选择 ​编辑 2.5虚拟机命名与位置安装 2.5磁盘容量 2.6完成 2.6编辑虚拟机 2.6.1内存大小编辑 2.6.…

React+vite+antd点击路由切换时出现闪屏

问题描述:点击左侧路由切换会出现闪屏的情况 页面的效果 解决方案 完整代码 import { lazy, Suspense, ReactNode } from "react"; import { Navigate, useLocation } from "react-router-dom"; import LayOut from ../pages/LayOut/LayOut import NotFo…

过滤了字母、数字、_、$的webshell命令执行技巧

目录 对于php5以上首先要解决的问题有 解决技巧 1.code长度小于35位 2.没有字母、数字、_ 、$ 3.怎么把文件放进服务器 4.怎么执行文件里面的内容 1.执行Linux命令 2.执行文件里面的shell命令 5.构造完整的code参数 6.我们还可以通过修改文件里面shell命令&#xff0c;…