关于FPGA对 DDR4 (MT40A256M16)的读写控制 4
关于FPGA对 DDR4 (MT40A256M16)的读写控制 4
语言 :Verilg HDL 、VHDL
EDA工具:ISE、Vivado、Quartus II
- 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4
- 一、引言
- 二、DDR4 SDRAM设备中模式寄存器
- 重要的模式寄存器之MR1
- (1) 延迟锁定环(DLL)的启用
- (2)输出驱动器阻抗的控制方式
- (3)片上终止电阻(ODT, On-Die Termination)
- (4)加法延迟(ADDITIVE LATENCY, AL)
- (5)写均衡(Write Leveling)
- (5)输出使能
- (6)终止数据选通(Termination Data Strobe, TDQS)
- 关键词: 调用,Verilog HDL,ifdef 和 endif ,generate语句
一、引言
博主将会写一个系列的文章 关于FPGA对DDR4(MT40A256M16)的有效读写控制,最大化FPGA对DDR4的读写控制。首先将对DDR4的技术文档进行研读,注重DDR4的读写操作、刷新时间等。
二、DDR4 SDRAM设备中模式寄存器
重要的模式寄存器之MR1
1、功能:MR0控制着设备的各种操作模式,具体的设置可以在随后提供的寄存器定义表中查看。并不是表中列出的所有设置在每个芯片上都可用;只有那些对于速度等级支持所必需的设置才是可用的。
2、写入方法:MR0是通过发出模式寄存器设置(MRS)命令来写入的。在发出MRS命令的同时,需要控制BGx、BAx和Ax地址引脚的状态。
3、地址引脚映射:在MRS命令期间,地址引脚的映射关系会在随后的MR0寄存器定义表中展示
(1) 延迟锁定环(DLL)的启用
这三个参数是控制内存访问行为的关键参数
1、DLL的启用
DLL必须在正常操作中启用,并且在上电初始化以及在禁用DLL后返回正常操作时都需要启用。
2、DLL在自刷新操作中的行为
在正常操作期间(MR1[0]置为1以启用DLL),当进入自刷新(SELF REFRESH)操作时,DLL会自动禁用,并在退出自刷新操作时自动重新启用。
3、DLL复位后的同步
每次DLL被启用并在之后被复位,必须等待tDCLK个时钟周期后才能发出读(READ)或同步ODT(On-Die Termination)命令,以允许内部时钟与外部时钟同步。
tDCLK 期间CKE(时钟使能)必须连续置为为高电平。
1、DLL与写操作的关系
设备在任何写操作中不需要DLL,除非启用了RTT(WR)(写终止电阻),并且DLL需要正确进行ODT操作。
2、DLL关闭模式下的ODT支持
在DLL关闭模式下,不支持直接ODT特性。必须通过持续注册ODT引脚为低电平,或者通过MRS命令将MR1寄存器的RTT(NOM)位[9,6,2]编程为000来禁用ODT电阻。
3、DLL关闭模式下的动态ODT
在DLL关闭模式下不支持动态ODT特性;要在外部禁用动态ODT,使用MRS命令将MR2寄存器的RTT(WR)位[10:9]设置为00。
(2)输出驱动器阻抗的控制方式
1、输出驱动器阻抗选择
DDR4 SDRAM设备的输出驱动器阻抗可以通过模式寄存器1(MR1)中的第2位和第1位(MR1[2,1])来选择。
2、寄存器定义表
具体的阻抗设置选项和对应的值会在MR1寄存器定义表中展示。
(3)片上终止电阻(ODT, On-Die Termination)
关于片上终止电阻(ODT, On-Die Termination)的不同终止值(RTT, Resistor Termination Type)的设置。
1、ODT终止值
设备能够提供三种不同的终止电阻值:
RTT(Park):当ODT信号为低电平时的终止值。
RTT(NOM):标称终止值,用于正常的操作条件。
RTT(WR):写操作期间的终止值,当ODT在写操作期间被启用时使用
ODT是一种用于减少信号反射和提高信号完整性的特性,特别是在高速内存接口中。通过编程不同的RTT值,系统设计者可以根据不同的操作条件和性能要求来优化内存设备的性能。
(4)加法延迟(ADDITIVE LATENCY, AL)
1、加法延迟(AL)的目的
AL操作被支持以提高设备在可持续性带宽方面的命令和数据总线的效率。
2、AL操作的工作原理
设备允许在读命令(READ)或写命令(WRITE)后立即发出激活命令(ACTIVATE)。
该命令会在设备内部保持AL时间长度,然后才被实际执行。
3、读延迟(RL)的控制
读延迟(RL)由加法延迟(AL)和CAS延迟(CL)寄存器设置的总和控制。
即:RL=AL+CLRL=AL+CL
**
4、写延迟(WL)的控制**
写延迟(WL)由加法延迟(AL)和CAS写延迟(CWL)寄存器设置的总和控制。
即:WL=AL+CWLWL=AL+CWL
5、AL操作的优势
通过使用AL,可以在不牺牲性能的情况下,减少对时钟周期的需求,从而提高内存子系统的效率。
6、AL操作的灵活性
由于AL允许命令在激活命令后立即发出,它为系统设计者提供了更大的灵活性来优化内存访问模式。
(5)写均衡(Write Leveling)
1、信号拓扑
设备使用飞线(fly-by)拓扑结构来传输命令、地址、控制信号和时钟。飞线拓扑的优点在于减少了stub的数量及其长度,有助于降低信号反射和交叉干扰。
2、信号问题
尽管飞线拓扑有其优势,但它也会导致在DIMM上每个DRAM之间的时钟和行选信号(strobe)的飞行时间(flight-time)不一致,即存在飞行时间偏斜(skew)。
3、写均衡功能
为了解决这个问题,设备支持写均衡特性。写均衡允许控制器对飞行时间偏斜进行补偿,确保数据在内存中正确写入。
4、控制器的作用
写均衡过程中,控制器会调整写操作的时序,以适应由于飞线拓扑引起的信号偏斜,从而确保数据信号的准确性和可靠性。
5、性能优化
通过写均衡,可以提高信号完整性,减少时序违规的风险,优化内存的性能和稳定性。
写均衡是DDR4内存技术中的一个重要特性,特别是在高频率高容量的内存系统中,它对于确保数据传输的准确性和系统的稳定性至关重要。控制器需要通过复杂的算法来实现写均衡,这通常涉及到对内存系统的深入理解和精确的时序控制。
(5)输出使能
通过模式寄存器1(MR1)的第12位(MR1[12])来控制输出使能:
1、输出使能/禁用控制
通过MR1[12]的设置,可以启用或禁用设备的所有输出引脚。这些输出引脚包括数据引脚(DQ)和数据选通信号(DQS)等。
2、输出禁用
当MR1[12]被设置为1时,所有输出引脚将与设备断开连接,这将消除输出驱动器的任何负载。这种设置对于某些特定的操作是有用的,比如在测量模块功耗时,可能需要禁用输出以避免影响测量结果。
3、输出使能
为了正常操作,应将MR1[12]设置为0。这样,输出引脚将正常工作,输出驱动器将加载并驱动信号到系统。
输出使能/禁用功能可以用于多种目的,比如在进行系统调试、功耗测量或在某些特定的低功耗状态下,可能需要暂时禁用输出。然而,在大多数正常操作中,输出应该是使能的,以确保数据可以正确地在内存设备和系统之间传输。
(6)终止数据选通(Termination Data Strobe, TDQS)
1、TDQS功能
TDQS是x8设备的一个特性,它提供了额外的终止电阻输出,这在某些系统配置中可能有用。
2、配置依赖性
由于TDQS功能仅在x8配置中可用,因此在x4和x16配置中必须禁用此功能。
3、TDQS与DQS的关系
在x4或x16配置中不支持TDQS时,当通过模式寄存器启用时,应用于TDQS引脚的相同终止电阻功能将应用于DQS引脚。
TDQS功能的主要目的是提供额外的信号完整性,通过在数据选通信号上增加终止电阻来减少反射和提高信号质量。然而,由于物理引脚的限制,TDQS功能与DM和DBI功能不能同时使用。系统设计者需要根据具体的系统配置和性能要求来决定是否启用TDQS功能,以及如何配置DM和DBI功能。在设计过程中,需要仔细考虑这些特性的兼容性和对系统性能的影响。
三、总结
本文详细介绍了FPGA对DDR4 SDRAM(MT40A256M16型号)的读写控制方法,重点探讨了DDR4的模式寄存器,尤其是MR1寄存器的不同配置选项及其对内存性能的影响。文章讨论了延迟锁定环(DLL)的启用、输出驱动器阻抗的控制、片上终止电阻(ODT)的设置、加法延迟(AL)以及写均衡等关键参数,解释了它们如何影响内存访问行为和性能。此外,还提到了输出使能和终止数据选通(TDQS)等特性,强调了正确配置这些参数以最大化FPGA与DDR4内存之间的读写效率和信号完整性的重要性。
相关文章:

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4
关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…...
android——Livedata、StateFlow、ShareFlow和Channel的介绍和使用
目录 一、LiveData介绍 二、StateFlow介绍 三、ShareFlow介绍 四、Channel介绍 小结 一、LiveData介绍 LiveData是一种在Android开发中用于观察数据变化的组件。它可以被观察者注册并在数据变化时通知观察者,从而实现数据的实时更新。LiveData具有生命周期感知能力&…...
Debezium 同步 MySQL 实时数据并解决数据重复消费问题
我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL,代码网上基本都有,都是在引入 debezium-api,debezium-embedded 后写 Java 代码,做好了基本配置后启动程序,Debezium 会自动读取 MySQL 的实时 binlog&…...
【图像处理】1、使用OpenCV库图像轮廓的检测和绘制
OpenCV (Open Source Computer Vision Library) 是一个用于计算机视觉和图像处理的开源库。它提供了数百种用于图像和视频分析的算法,并被广泛应用于研究和商业领域。OpenCV 支持多种编程语言,包括 C、Python、Java 等,具有跨平台的特性&…...

【AI编译器】triton学习:矩阵乘优化
Matrix Multiplication 主要内容: 块级矩阵乘法 多维指针算术 重新编排程序以提升L2缓存命 自动性能调整 Motivations 矩阵乘法是当今高性能计算系统的一个关键组件,在大多数情况下被用于构建硬件。由于该操作特别复杂,因此通常由软件提…...
动静分离网络
动静分离网络的主要目的是分别处理视频帧中的静止区域和运动区域,以便对不同区域采用不同的去噪策略。这里提供一个实现思路,通过两个分支网络分别处理静止区域和运动区域,然后将两者的输出融合起来。 实现步骤 帧差图生成:计算…...
Python商务数据分析知识专栏(三)——Python数据分析的应用①Matplotlib数据可视化基础
Python商务数据分析知识专栏(三)——Python数据分析的应用①Matplotlib数据可视化基础 Matplotlib数据可视化基础1.掌握绘图基本语法与常用绘图2.分析特征间关系3.分析特征内部数据分布与分散情况 Matplotlib数据可视化基础 1.掌握绘图基本语法与常用绘…...

DataV大屏组件库
DataV官方文档 DataV组件库基于Vue (React版 (opens new window)) ,主要用于构建大屏(全屏)数据展示页面即数据可视化,具有多种类型组件可供使用: 源码下载...
paraview跨节点并行渲染
参考: https://cloud.tencent.com/developer/ask/sof/101483588 ParaView 支持使用其内置的网络拓扑来进行跨节点的并行渲染。以下是一个简单的步骤来设置和运行跨节点的并行渲染: 确保你的计算环境支持多节点计算,比如通过SSH、MPI或其他集…...
Java中相等比较详解
本文对Java中的相等判断进行详细解释,包括,equals和compareTo等。 一、 运算符 1. 用途 基本数据类型:用于比较两个基本数据类型的值是否相等。 引用类型:用于比较两个对象引用是否指向同一个对象。 2. 示例 // 基本数据类型比…...

HBuilder X 小白日记01
1.创建项目 2.右击项目,可创建html文件 3.保存CtrlS,运行一下 我们写的内容,一般是写在body里面 注释的快捷键:Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…...
使用Protocol Buffers优化数据传输
使用Protocol Buffers优化数据传输 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是Protocol Buffers? Protocol Buffers(简称P…...

如何把mkv转成mp4?介绍一下将mkv转成MP4的几种方法
如何把mkv转成mp4?如果你有一个MKV格式的视频文件,但是需要将其转换为MP4格式以便更广泛地在各种设备和平台上播放和共享,你可以通过进行简单的文件格式转换来实现。转换MKV到MP4格式可以提供更好的兼容性,并确保你的视频文件能够…...

PHP语言学习02
好久不见,学如逆水行舟,不进则退,真是这样。。。突然感觉自己有点废。。。 <?php phpinfo(); ?> 新生第一个代码。 要想看到运行结果,打开浏览器(127.0.0.1/start/demo01.php) 其中,…...
PX2资料及问题记录
PX2的一些资料 官方论坛:https://devtalk.nvidia.com/default/board/182/drive-px2/ 官方网站:https://www.nvidia.com/en-us/self-driving-cars/ap2x/ 开发网站:https://developer.nvidia.com/drive/downloads docker docker run --devic…...

Jenkins容器的部署
本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…...
QT 自绘树形控件
资源来自:https://gitee.com/qt-open-source-collection/NavListView/blob/master/navlistview.h 1、解决的问题:一处编译报错;空白区域绘制背景;点击页面崩溃 2、源码: #ifndef NAVLISTVIEW_H #define NAVLISTVIEW_H/*** 作者:feiyangqingyun(QQ:517216493) 2016-10-1…...

axios之CancelToken取消请求
从 v0.22.0 开始,Axios 支持以 fetch API 方式—— AbortController 取消请求 此 API 从 v0.22.0 开始已被弃用,不应在新项目中使用 官网链接 1. 背景 最近项目中遇到一个场景,当连续触发一个请求时,如果是同一个接口…...
Unity | API鉴权用到的函数汇总
目录 一、HMAC-SHA1 二、UriEncode 三、Date 四、Content-MD5 五、参数操作 六、阿里云API鉴权 一、HMAC-SHA1 使用 RFC 2104 中定义的 HMAC-SHA1 方法生成带有密钥的哈希值: private static string CalculateSignature(string secret, string data){byte[] k…...

【python】socket通信代码解析
目录 一、socket通信原理 1.1 服务器端 1.2 客户端 二、socket通信主要应用场景 2.1 简单的服务器和客户端通信 2.2 并发服务器 2.3 UDP通信 2.4 文件传输 2.5 HTTP服务器 2.6 邮件发送与接收 2.7 FTP客户端 2.8 P2P文件共享 2.9 网络游戏 三、python中Socket编…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...