从零开始讲DDR(5)——读懂Datasheet

        对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。


一、基础信息

        学习阅读datasheet,最直接的方式当然是找到一个datasheet的示例,这里我采用的是MT40A1G16WBU-083E的DDR,这个名字看着就很长,但是其实每一段都有其对应的含义,阅读完本文,我们就可以做到仅仅根据名字就了解这个DDR的大致信息了。

        以上就是这块DDR的datasheet的第一页内容。首先我们从左上角的商标就可以获知这是一块来自 Micron 的DDR。

1.1 厂家

        这里我们介绍几家知名的DDR厂家:

  • Micron Technology, Inc:全球领先的半导体制造公司,专注于存储和半导体技术,特别是动态随机存取存储器(DRAM)、闪存(NAND Flash)和固态硬盘(SSD)等产品。Micron的存储解决方案广泛应用于消费电子、计算机、数据中心、网络、移动设备、汽车、工业和其他专业应用领域。
  • Samsung Electronics(三星电子):全球最大的内存芯片制造商之一,生产各种类型的存储器,包括DDR3、DDR4和DDR5。三星的内存技术领先,并且在手机、服务器、PC等市场中占据重要地位。
  • SK Hynix:韩国的另一大内存制造商,全球第二大存储芯片制造商。SK Hynix在DRAM市场占有较大份额,提供高性能的存储解决方案。
  • Kingston Technology(金士顿):金士顿是全球知名的内存模块制造商,虽然它不生产芯片,但它将各种内存芯片集成到自己的模块中,提供广泛的内存解决方案,特别是在消费市场和服务器市场中很受欢迎。

1.2 TwinDie™ 1.2V DDR4 SDRAM MT40A1G16 – 64 Meg x 16 x 16 Banks x 1 Ranks

        Micron的TwinDie™技术能够将两个独立的存储芯片封装在一个模块中,提高了内存的密度和容量,通常用于高性能应用场景,如服务器和高端计算系统。

        1.2V是DDR4的对应电压,我们使用的这块DDR就是属于DDR4类型。 

版本发行年份电压 (V)数据速率 (MHz)带宽 (MB/s)引脚数量 (DIMM)特点
DDR120002.5200 - 4001600 - 3200184DDR1是第一代双倍数据速率内存。它通过双边缘的数据传输,提供了比传统SDRAM快一倍的传输速率。
DDR220031.8400 - 8003200 - 6400240DDR2进一步提高了数据速率,优化了信号传输,支持更高的时钟频率,并通过降低电压实现了更好的功耗控制。
DDR320071.5800 - 16006400 - 12800240DDR3提供了更高的频率和带宽,并支持更大的内存模块容量。与DDR2相比,DDR3在性能和能效上都有显著提升。
DDR420141.21600 - 320012800 - 25600288DDR4在能效、数据速率和容量方面有显著提高,能够支持更大的内存模块。它的时钟频率更高,延迟优化,满足了当代计算机和服务器对高带宽的需求。
DDR520201.13200 - 640025600 - 51200288DDR5在数据速率、带宽和效率上都有极大的提升,尤其适合高性能计算、AI、大数据等对内存有极高需求的应用。DDR5还引入了更智能的电源管理和更高的能效优化。

        MT40A1G16 – 64 Meg x 16 x 16 Banks x 1 Rank 各个部分的解释:

  • 64 Meg:每个bank的存储密度为64 Mbit(兆bit)。

  • x16:数据位宽为16位(bit)。每次数据传输时,16位数据会并行传输。

  • 16 Banks:芯片包含16个独立的bank。DDR4 SDRAM中,更多的bank可以提高内存的并发访问性能。

  • 1 Rank:内存中只有1个rank。rank指的是内存模块中的独立访问的颗粒组。1个rank意味着内存条上所有颗粒是同时工作的。

        总容量计算:64 Meg×16(bit宽度)×16(banks)=16384 Mbits = 2048 MB=2 GB。MT40A1G16 这颗DDR4 SDRAM芯片的总容量为 2GB。

1.3 Description

        描述部分会给出一些关于本芯片的基本介绍:“16Gb (TwinDie™) DDR4 SDRAM 使用了美光的 8Gb DDR4 SDRAM die;通过将两个x8组合成一个x16。它的信号类似于单die的x16设计,额外增加了一个ZQ连接以实现更快的ZQ校准,并且需要一个BG1控制信号用于x8的寻址。有关未在本文档中包含的规格,请参考美光的 8Gb DDR4 SDRAM 数据手册(x8选项)。基础部件编号 MT40A1G8 的规格与TwinDie制造部件编号 MT40A1G16 相对应。”

1.4 Features

        特征部分会给出一下基本的参数信息,一般来说,对于开发人员,这部分不需要特别关注。

1.5 Options & Marking

         这部分就给出了DDR名字的组成含义,这部分可以结合DDR Part Numbers部分一起看,但是我们使用的这块DDR手册中没有这部分,我们从其他的datasheet里找一张图来暂时用一下:

        现在我们有了2个DDR的名字:MT40A1G16WBU-083E(我们现在的DDR4),MT41J256M8DA-125:K(我们刚刚为了看DDR Part Numbers引入的一块DDR3)。

NameType
Configuration
Package
Speed Grade
Temperature
Revision
MT40A1G16WBU-083EMT40A1G16WBU-083ENone
A
:B, D
:H
MT41J256M8DA-125:KMT41J256M8DA-125None:K

1.5.1 Type

        区分不同的系列,有时候相同系列的不同产品会共用一本datasheet。

1.5.2 Configuration

        配置内容,我们可以从中获知这块DDR的组成结构。不过有一个需要注意的点,以MT40A1G16WBU-083E为例,我们之前计算的DDR容量是64 Meg×16(bit宽度)×16(banks)=16384 Mbits = 2048 MB=2 GB,到这里为什么要用1G表示呢?

        这是因为1G16表示的是16根数据线16bit,对应的容量就是1G * 16 = 16Gbit = 2G Byte,与我们之前计算的是一致的。这里的1G可以有一个抽象化的理解,如果我们把整个DDR展平,那么1G就是深度,16就是数据位宽。

1.5.3 Package

        封装形式,了解就行

1.5.4 Speed Grade

        我们首先解释一下两个参数的含义:

  • CL(CAS Latency):表示内存从接收到命令到数据实际可用之间的时钟周期数。CL值越低,延迟越低,性能越好,但较高的时钟频率通常会使用较高的CL值以维持稳定性。
  • Cycle Time(也可以表示成tCK):指的是内存时钟每个周期所需的时间。单位为纳秒(ns),周期越短,内存的时钟频率越高,数据传输速度也越快。

        接下来,我们就可以查询Datasheet获取DDR的时钟频率了。

  • -083E表示:0.833ns @ CL = 16 (DDR4-2400),时钟周期为1/0.833ns = 1200MHZ
  • -125表示:tCK = 1.25ns, CL = 11,时钟周期为1/1.25ns = 800MHZ

        这是DDR内存的时钟频率(实际数据传输率是该频率的两倍,因为DDR(Double Data Rate)在时钟的上升沿和下降沿都传输数据)。 

1.5.5 Temperature & Revision

        这个我们就不关心啦

二、时序及地址信息

        针对不同的速度等级,DDR Datasheet会给出不同的时序参数信息表格:

2.1 时序关键参数解释

  • Data Rate (MT/s):数据传输速率,以每秒百万次传输(MT/s)为单位,表示DDR内存每秒可以传输的数据量。DDR4内存的典型数据速率如2400 MT/s、2666 MT/s、2933 MT/s等。我们之前提到的实际数据传输率是DDR时钟频率的两倍,因为DDR(Double Data Rate)在时钟的上升沿和下降沿都传输数据,就是指的这个速率。
  • Target tRCD-tRP-CL: 其实就是把后面的3个参数连起来的一种表示方式,单位应该是时钟周期
  • tRCD(Row to Column Delay):行到列延迟,表示激活一个内存行后,到访问该行中某一列所需的最小时钟周期数。单位为纳秒(ns)。
  • tRP(Row Precharge Time):行预充电时间,表示关闭当前正在访问的行,并准备访问另一行所需的时间。单位为纳秒(ns)。
  • CL(CAS Latency):CAS延迟,表示从发送读命令到数据实际可用之间的时钟周期数。单位为纳秒(ns)。

        tRCD、tRP、CL 的值是根据时钟周期时间(tCK)计算的。有了Target tRCD-tRP-CL后,我们就可以计算出后面的每个参数。

        例如-083E的Target tRCD-tRP-CL为16-16-16,tCK = 0.833ns,tRCD = 16 * tCK = 13.328ns,其他两个参数也是一样计算。

2.2 地址信息

参数中文解释
Configuration64 Meg x 16 x 16 banks x 1 rank每个bank有64 Mbit的存储,数据宽度为16位,共16个bank,1个rank
Bank group addressBG[1:0]2位bank组地址,表示有4个bank组
Bank count per group4每个bank组包含4个bank
Bank address in groupBA[1:0]2位bank地址,用于选择每个bank组中的具体bank
Row addressingA[15:0]16位行地址,共64K行(65536个行)
Column addressingA[9:0]10位列地址,共1K列(1024个列)
Page size1KB每个页面大小为1KB,行与列的组合决定页面大小
Data widthx16数据宽度为16位,意味着每次传输16位(2字节)数据
Rank count1该内存芯片包含1个rank

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

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

相关文章

软考高级:系统安全分析与设计- 加密管理:PKI 和 KMI 区别

讲解 PKI(公钥基础设施)和 KMI(密钥管理基础设施)都是与加密和密钥管理相关的重要概念,但它们有不同的侧重点。接下来,我将通过一个生活化的例子和概念讲解,帮助你理解它们的区别。 生活化例子…

【redis-02】深入理解redis中RBD和AOF的持久化

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756 如需转载,请输入:htt…

[Java EE] 网络原理 ---- UDP协议 序列化 / 反序列化 长短连接

Author:MTingle major:人工智能 Build your hopes like a tower! 文章目录 文章目录 一. UDP 协议 1.UDP协议的特点 2. UDP 的结构 3. md5算法 二. 长短连接 协程 IO多路复用 序列化和反序列化 1.长短连接 2. 协程 3. IO 多路复用 4.序列化 / 反序列化 一…

队列+宽搜专题篇

目录 N叉树的层序遍历 二叉树的锯齿形层序遍历 二叉树最大宽度 在每个树行中找最大值 N叉树的层序遍历 题目 思路 使用队列层序遍历来解决这道题,首先判断根节点是否为空,为空则返回空的二维数组;否则,就进行层序遍历&#x…

论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)

可证安全隐写:理论、应用与展望 一、什么是可证安全隐写? 对于经验安全的隐写算法,即使其算法设计得相当周密,隐写分析者(攻击者)在观察了足够数量的载密(含有隐写信息的数据)和载体…

6.数据库-数据库设计

6.数据库-数据库设计 文章目录 6.数据库-数据库设计一、设计数据库的步骤二、绘制E-R图三、关系模式第一范式 (1st NF)第二范式 (2nd NF)第三范式 (3nd NF)规范化和性能的关系 一、设计数据库的步骤 收集信息 与该系统有关人员进行交流、座谈,充分了解用户需求&am…

Vulkan 学习(9)---- vkSuraceKHR 创建

目录 OverView创建窗口表面参考代码 OverView Vulkan 是一个平台无关的图形API,这意味着它不能直接与特定的窗口系统(Windows,linux 和 macOS 的窗口系统)进行交互 为了解决这个问题,Vulkan 引入了窗口系统集成(Window System Intergration …

DOM【JavaScript】

在JavaScript中,DOM (Document Object Model:文档对象模型) 是web页面的编程接口,用于表示和操作 HTML 和 XML 文档。它将文档结构化为一个树形结构,允许开发者通过 JavaScript 访问和修改网页的内容、结构和样式。以下是一些关于…

基于单片机的智能校园照明系统

由于校园用电量较大,本设计可以根据实际环境情况的改变,实现实时照明的控制。本设计以单片机芯片为控制芯片,热释电传感器采集教室中学生出入的信息,并把信息传递给单片机芯片,单片机芯片根据传感器传递过来的信息来控…

【软件测试】Bug 篇

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 今天给大家带来的是 【软件测试】Bug 篇,首先了解, 什么是Bug, 如何定义一个Bug, 如何描述一个 Bug, Bug的级别, 和 Bug 的生命周期, 以及测试人员跟开发人员产生争执如何处理,…

【MYSQL】聚合查询、分组查询、联合查询

目录 聚合查询聚合函数count()sum()avg()max()和min()总结 分组查询group by 子句having 子句 联合查询笛卡尔积内连接外连接自连接子查询单行子查询多行子查询from子句使用子查询 合并查询 聚合查询 聚合查询就是针对表中行与行之间的查询。 聚合函数 count() count(列名)&a…

个人随想-代码生成工具v0+claude+cursor

cursor出来已经有一段时间了,不知道大家用了感觉怎么样。今天就以我个人为例,给大家介绍一下我是如何使用cursor搭建原型。 首先,我并不觉得cursor对于后端程序员带来了革命性改进,我们与很多团队沟,使用cursor80%以上…

spring中的容器接口的实现类和功能

容器实现 BeanFactory 实现 这里我们就来一步步实现BeanFactory的功能。 首先创建我们需要的类 Configuration static class Config{Beanpublic Bean1 bean1(){return new Bean1();}Beanpublic Bean2 bean2(){return new Bean2();}}static class Bean1{private static fina…

【Linux】Shell 编程规范及检查工具推荐

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…

【RH124】解释Linux文件系统权限

RH124教材中控制对文件的访问一章中有一道解释Linux文件系统权限的测验题,可以一起来看看: 一、权限解释 这是通过 ls -l 命令查看的结果。它显示了文件或目录的权限、拥有者、所属组等信息。 1、长列表的第一个字符表示文件类型: -是常…

【C语言零基础入门篇 - 16】:栈和队列

文章目录 栈和队列栈栈功能的实现源代码 队列队列功能的实现源代码 栈和队列 栈 什么是栈:功能受限的线性数据结构 栈的特点:先进后出 。例如:仓库进货、出货。 栈只有一个开口,先进去的数据在栈底(bottom&#xf…

STM32篇:STM32CubeMX的安装

一.介绍与安装 1.作用 通过界面的方式,快速生成工程文件。 2.下载 官网 https://www.st.com/zh/development-tools/stm32cubemx.html#overview 3.安装 一路下一步,建议不要安装在C盘 4.配置 更新固件包位置(比较大,默认在…

LeetCode 257. 二叉树的所有路径(回溯详解)

文章目录 LeetCode 257. 二叉树的所有路径思路递归版本一:非常明确的回溯代码版本二:精简的回溯代码 LeetCode 257. 二叉树的所有路径 LeetCode 257. 二叉树的所有路径 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节…

全网最适合入门的面向对象编程教程:51 Python函数方法与接口-使用Zope实现接口

全网最适合入门的面向对象编程教程:51 Python 函数方法与接口-使用 Zope 实现接口 摘要: 在 Python 中,Zope 提供了一种机制来定义和实现接口。Zope 的接口模块通常用于创建可重用的组件,并确保组件遵循特定的接口规范。 原文链…

力扣 209.长度最小的子数组

一、长度最小的子数组 二、解题思路 采用滑动窗口的思路&#xff0c;详细见代码。 三、代码 class Solution {public int minSubArrayLen(int target, int[] nums) {int n nums.length, left 0, right 0, sum 0;int ans n 1; for (right 0; right < n; right ) { …