内存 (DRAM-Random Access Memory) 作为当代数字系统最主要的核心部件之一,从各种终端设备到核心层数据处理和存储设备,从各种消费类电子设备到社会各行业专用设备,是各种级别的 CPU 进行数据处理运算和缓存的不可或缺的周转“仓库”,一个强大的核心处理单元也必须配备一个高速运转的宽通路的数据访问和存储单元。近 20 多年来,DRAM也快速地从 20 世纪末期的 SDRAM 发展到 21 世纪 DDR RAM。在 21 世纪的前10 年,DDR标准主要是个人信息处理终端的代表设备----PC 和个人工作站类驱动,快速从 DDR1 演进到 DDR5,配合以 PCIE5.0 32Gbps 为代表的第5代高速 I/O数据传输走向最终的市场化。(文末有DDR术语供您参考。))
DDR的全拼是Double Data Rate SDRAM双倍数据速率同步动态随机存取内存, 主要用在电脑的内存。DDR的特点就是走线数量多,速度快,操作复杂,给测试和分析带来了很大的挑战。
DDR本质上不需要提高时钟频率就能加倍提高SDRAM的速度,它允许在时钟的上升沿和下降沿读出数据,因而其速度是标准SDRAM的两倍,至于地址与控制信号则与传统SDRAM相同,仍在时钟上升沿进行数据判断。
DDR核心技术点就在于双沿传输和预取Prefetch。
DDR的频率包括核心频率,时钟频率和数据传输频率。核心频率就是内存的工作频率;DDR1内存的核心频率是和时钟频率相同的,到了DDR2和DDR3时才有了时钟频率的概念,就是将核心频率通过倍频技术得到的一个频率。数据传输频率就是传输数据的频率。
目前DDR技术已经发展到了DDR5,性能更高,功耗更低,存储密度更高,芯片容量大幅提升,他的数据速率在3200-6400MT/s。
计算机组成
计算机組成结构 (Computer Architecture)是计算机系統的核心,它定义了计算机的基本工作原理和设计模式。计算机的组成可以分成以下3大类:中央处理器(CPU)、存储器和输入/输出子系统。
中央处理器 (CPU)
CPU用于数据的运算,在大部分的体系结合中,它有3个组成部分:算数运算单元 (ALU)、控制单元、奇存器组。
控制单元 (Control Unit):负责指挥整个计算机系统的操作,解释并执行指令,控制其他硬件的工作。
算术逻辑单元 (ALU):执行所有算术运算(如加减乘除)和逻辑运算(如与、或、非等),是计算机执行指令的核心部分。
寄存器 (Registers):这是CPU中用于存储数据的高速行储器,用来临时存放指令、数据和操作结果。
半导体存储器
随着科技的发展,半导体存储器成为了现代计算机存储器的主流,分为两类主要类型:
静态随机存储器 (SRAM):SRAN利用晶体管存储数据,速度非常快,但每个比特需要更多的晶体管,导致成本高,密度低。主要应用在需要高速绥存的场景,如CPU的缓存 (L1、 L2、 L3)
动态随机存储器 (DRAM):DRAM利用电容存储数据,电容逐渐放电,因此需要不断刷新来维持数据存储。相对于SRAM,DRAM的存储密度更高,成本较低,因此广泛用于主内存 (RAM)。随看集成电路制造技术的进步,DRAN容量和性能持续提升。
现代内存技术
DDR(双倍数据速率)内存:从DDR到如今的DDR5,随看数据传输速度和功耗的改进,DDR系列内存成为计算机和服务器的主流内存。DDR技术从2000年开始引入,持续更新,DDR5的带完和容量比早期版本有了大幅提升。
闪存 (Flash Memory):闪存 (Flash Memory)是一种长寿命的非易失性的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位。闪存是电子可擦除只读存储器(EEPROM) 的变种,闪存与EEPROM不同的是,EEPROM能在字节水平上进行删除和重写而不是整个芯片擦写,而闪存的大部分芯片需要块擦除。由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的B1OS(基本程序)、PDA(个人数字助理)、数码相机中保存资料等。
LPDDR(低功耗DDR):随看移动设备的普及,低功耗内存技术成为了关键,LPDDR(低功耗双倍数据速率)内存在手机、平板等设备上应用广泛,从LPDDR1发展到LPDDR5,强调功耗和性能之间的平衡。
HBM (High Bandwidth Memory,高带亮内存): HBM是一种高性能DRAM,具有更高的带完和更低的功耗,主要用于图形处理器(GPU) 和高性能计算 (HPC)领域。HBM通过垂直堆愛的方式来提升存储密度和传输速度,减少了延迟和能耗。
当时钟脉冲达到一定频率时,DDR存储器才开始工作,此后发生的就是“读-存-读”的过程。在此过程中,器件芯片会从主在取数据,然后与入数据在储区。当写入操作完成后,再从存储区中取出数据,並将其传输到处理器中,然后根据需要将数据处理,再把最终结果返回到主存。
DDR 的双倍数据传输率其实就是每个时钟周期内读写一次数据,即DDR芯片可以在每个时钟周期内分别完成“读-存”和“存-读”操作,从而提高存储器的传输效率。
DDR内存通过双倍数据速率的传输方式,结合多通道传输和数据校验等技术,提高了数据传输效率和可靠性。这使得 DDR 成为了计算机内存的主流技术。
内存芯片 - DDR内存模块中包含多个内存芯片,每个芯片有自己的存储单元。每个存储单元都有一个地址,用于在读取或写入数据时进行寻址。
数据总线 - DDR内存模块连接到计算机的内存控制器,通过数据总线进行数据传输。数据总线可以同时传输多个数据位,例如 64 位或 128位。
时钟信号 - DDR内存模块通过时钟信号进行同步操作。时钟信号用来控制数据的传输速率,每个时钟周期内有一个上升沿和一个下降沿。上升沿时,数据从内存芯片传输到数据总线;下降沿时,数据从数据总线传输到内存芯片。
预充电 - 在开始传输数据之前,DDR内存模块会先进行预充电操作。预充电是将存储单元中的电荷恢复到初始状态,以确保接下来的数据传输是准确的。
数据传输 - DDR 采用了多通道的数据传输方式,即同时传输多个数据位。这样可以在每个时钟周期内传输更多的数据。
存储器分为内部存储器(内存),外部存储器(外存),缓冲存储器(缓存)以及闪存这几个大类。
内存也称为主存储器,位于系统主机板上,可以同CPU直接进行信息交换。其主要特点是:运行速度快,容量小。
外存也称为辅助存储器,不能与CPU之间直接进行信息交换。其主要特点是:存取速度相对内存要慢得多,存储容量大。
内存与外存本质区别是,一个是内部运行提供缓存和处理的功能,也可以理解为协同处理的通道;而外存主要是针对储存文件、图片、视频、文字等信息的载体,也可以理解为储存空间。缓存就是数据交换的缓冲区 (称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
闪存 (Flash Memory)是一种长寿命的非易失性的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位。闪存是电子可擦除只读存储器(EEPROM) 的变种,闪存与EEPROM不同的是,EEPROM能在字节水平上进行删除和重写而不是整个芯片擦写,而闪存的大部分芯片需要块擦除。由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的B1OS(基本程序)、PDA(个人数字助理)、数码相机中保存资料等。
内存带宽计算公式1:
带宽=内存核心频率×倍增系数×(内存总线位数/8)
内存带宽计算公式2:
带宽=标称频率×线宽÷ 8
DDR=双倍速率同步动态随机存储器,是内存的其中一种。DDR取消了主板与内存两个存储周期之间的时间间隔,每隔2个时钟脉冲周期传输一次数据,大大地缩短了存取时间,使存取速度提高百分之三十。
SDRAM是 "Synchronous Dynamic random access memory”的缩写,意思是“同步动态随机存储器”,就是我们平时所说的“同步内存”。从理论上说,SDRAM与CPU频率同步,共享一个时钟周期。SDRAM内含两个交错的存储阵列,当CPU从一个存储阵列访问数据的同时,另一个已准备好读写数据,通过两个存储阵列的紧密切换,读取效率得到成倍提高。
DDR是SDRAM的更新换代产品,采用5伏工作电压,允许在时钟脉冲的上升沿和下降沿传输数据,这样不需要提高时钟的频率就能加倍提高SDRAM的速度,并具有比SDRAM多一倍的传输速率和内存带宽。
下图展示的是内存 RAM 20多年来的发展和信号特点以及设计演进。
DDR是我们嵌入式系统使用比较多的硬件,但是平时我们在做软件开发或者优化的时候,对它的组成及工作原理了解却很少。主要原因是对于DDR的软件开发主要是配置参数,而这些参数由芯片厂商已经提供好了。其实,要想对系统做深度的功耗优化和性能优化,是很有必要深挖DDR的组成与工作原理的细节。
现在嵌入式系统设计或者计算机设计,考虑到存储性能、存储容量、成本等因素,通常采用存储金字塔式的设计,比如CPU后面紧接着寄存器,寄存器后面跟着cache,cache后面紧接着DDR,然后DDR后面跟着SSD、EMMC等非易失。通过利用程序的时间及空间局部性原理,可以在尽可能少的影响性能的前提下,增加存储容量,降低存储成本。
随着CPU 发展,内存也发生了巨大的变革,DDR从诞生到现在已经经历了多代,分别是第一代SDR SDRAM(Single Data Rate SDRAM,同步型动态存储器),第二代的DDR SDRAM,第三代的DDR2 SDRAM,第四代的DDR3 SDRAM,现在已经发展到DDR5 SDRAM。为了实现容量增加和传输效能增加,规范的工作电压越来越低,DDR容量越来越大,IO的速度越来越高。
从SDRAM到DDR1:速度通常在200 MHz到400 MHz之间。原来数据只在方波上升沿传输,DDR改成上升和下降都传输(2n),速度就翻倍了。
从DDR1到DDR2:速度频率从400 MHz到800 MHz。提供更高的性能和更低的功耗。I/O接口频率翻倍,但是DRAM核心频率保持不变。
从DDR2到DDR3:频率从800 MHz到1600 MHz甚至更高。DDR3典型I/O频率800MHz,核心频率200MHz,等效读写速度1600MT/s。
从DDR3到DDR4:起始频率约为2133 MHz。加快8n预取速度,通过把数据分块允许各个Bank Group具备独立启动操作读、写等动作特性,内存可以同时取两个4n合并为8n发给cpu,相比ddr3速度就提升了一倍。DDR4典型I/O频率1600MHz,核心频率200MHz,等效读写速度3200MT/s。
从DDR4到DDR5:初始频率高达4800 MHz。在核心速度不变的情况下I/O速度又翻倍了,延迟仍然不变。DDR5典型I/O频率3200MHz,核心频率200MHz,等效读写速度6400MT/s。DDR5提供了比DDR4更高的带宽和更大的容量,还降低了功耗,并改进了信号完整性处理,支持内存模块内置电源管理。
从DDR5到DDR6:推出时间:预计2025年5月正式发布。DDR6典型I/O频率6400MHz,核心频率200MHz,等效读写速度12800MT/s。
基本DDR 子系统框图架构图
DDRC +DDRphy +SDRAM颗粒,DDR IP一般包括DDR Controller和DDR PHY,内部涉及的内容包括但不限于以下几个方面:数据保序、仲裁、最优调度、协议状态机设计、防饿死机制、bypass通路、快速切频、DDR training
内存控制器负责初始化DRAM,并重排读写命令,以获得最大的DRAM带宽。它通过多端口与其他用户核进行连接,这些端口的类型包含AXI4/AXI3/AHB/CHI。每个端口有可配置的宽度、命令和数据FIFO。
内存控制器接收来自于一个或者多个CPU、DSP、GPU的请求,这些请求使用的地址是逻辑地址,由仲裁器来决定这些请求的优先级,并将其放入内存控制器中。如果一个请求处于高优先级(赢得仲裁),会被映射到一个DRAM的物理地址并被转换为一个DRAM命令序列。这些命令序列被放置在内存控制器中的队列池(Queue pool)中,内存控制器会执行队列池中这些被挂起的命令,并将逻辑地址转化为物理地址,并由状态机输出符合DRAM访问协议的电信号,经由PHY驱动DRAM的物理IO口。
DDR PHY是连接DDR颗粒和DDR Controller的桥梁,它负责把DDR Controller发过来的数据转换成符合DDR协议的信号,并发送到DDR颗粒。相反地,它也负责把DRAM发送过来的数据转换成符合DFI(DDR PHY Interface)协议的信号并发送给内存控制器。DDR PHY和内存控制器统称为DDR IP,他们保证了SoC和DRAM之间的数据传输。
从DDR PHY到内存颗粒的层次关系如下:channel->DIMM->rank->chip->bank->row/column组成的memory array。例如,i7 CPU 支持两个Channel(双通道),每个Channel上可以插2个DIMM(dual inline memory module,双列直插式存储模块),每个DIMM由2个rank构成,8个chip组成一个rank。由于现在多数芯片的位宽是8bit,而CPU的位宽是64bit,因此经常是8个芯片可以组成一个rank。
DDR术语
Bank - 是一个逻辑上的概念。一个bank可以分散到多个chip上,一个chip也可以包含多个bank。DDR4以前是没有Bank Group的,所以该值就表示整个颗粒中Bank数量。但是在DDR4和DDR5中,就表示每个Bank Group中Bank的数量,整个颗粒Bank数量 = Bank Group * Bank。
8阵列bank
Bank Group - Bank分组数量,该特性只存在于DDR4和DDR5中。
Burst Length - 指突发长度,突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度,在DDR SDRAM中指连续传输的周期数。一般对应预取bit数目。
Core frequency - 颗粒核心频率,即内存cell阵列的工作频率,它读取数据到IO Buffer的频率。它是内存频率的基础,其他频率都是在该频率的基础上得出来的。
Channel - 简单理解一个通道对应一个DDR控制器,每个通道拥有一组地址线、控制线和数据线。
Chip - 是内存条上的一个芯片,由多个bank组成,大多数是4bit/8bit/16bit,多个chip做成一个rank,配合完成一次访问的位宽。
DDR - Double Data Rate 双倍速率
SDRAM - Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器。
DDR SDRAM - Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。
DDR SDRAM Control - DDR SDRAM的控制。包含了一个命令队列,接受来自仲裁器的命令。该命令队列使用一个重排算法来决定命令的放置顺序。重排逻辑遵循一些规则,通过考虑地址碰撞、源碰撞、数据碰撞、命令类型和优先级,来确定命令插入到命令队列的位置。重排逻辑还通过命令分组和bank分割,来提高控制器的效率。当命令进入命令队列后,选择逻辑扫描命令队列中的命令进行运行。若较高优先级的命令还没有准备好运行,较低优先级的命令不与命令队列中排在前面的命令冲突,那么这个较低优先级的命令,可以先于该没准备好的高优先级命令运行。此外,控制器还包含一个仲裁块,支持软件可编程接口、外部引脚及计数器的低功耗控制。另外,控制器支持调频功能,用户可以通过操作寄存器组,调整ddr的工作频率。
DIMM - DIMM全称Dual-Inline-Memory-Modules,中文名叫双列直插式存储模块,是指奔腾CPU推出后出现的新型内存条,它提供了64位的数据通道。是主板上的一个内存插槽,一个channel可以包含多个DIMM。
Device Width - 颗粒位宽,常见为4/8/16bit。一个Memory Array中由行地址和列地址的交叉选中一个位,若2个Array叠加在一起,就同时选中了2个Bit,位宽是X2。若4个Array叠加到一起,就能够同时选中4个Bit,位宽则是X4。也就是说,对一个X4位宽的DDR 颗粒,如果给出行地址和列地址,就会同时输出4个Bit到DQ(数据输入、输出:双向数据总线)数据线上。
Die Density - 颗粒密度,也就是容量,随着DDR迭代,容量越来越大。
Data rates- MT/s指每秒传输多少个数据(Mega-transfer per second),和时钟频率是两个不同的概念。DDR(dual data rate)是双边沿传输数据。因此MT/s是IO时钟频率的两倍。
Rank - 一组可以被一个内存通道同时访问的芯片组合称作一个rank,一个rank中的每个芯片都共用内存通道提供的地址线、控制线和数据线,同时每个芯片都提供一组输出线,这些输出线组合起来就是内存条的输出线。简单来说rank是一组内存芯片集合,当芯片位宽*芯片数=64bit(内存总位宽)时,这些芯片组成一个Rank,存储64bit的数据。一般每个芯片位宽是8bit,然后内存条每面8个芯片,那么每面就构成了一个Rank,这两面的Rank通过一根地址线来区分当前要访问的是哪一面。同一个Rank中所有的芯片协作来读取一个地址(1个Rank,8个芯片*8bit=64bit),这个地址的不同bit,每8个一组分散在这个Rank上的不同芯片上。设计Rank的原因是为了减少每个芯片的位宽(在CPU总位宽确定的前提下,比如64bit),降低复杂度。
Row、Column组成的memory array -可以简单的理解bank为一个二维bit类型的数组。每个bank对应一个bit,8个bank组成8bit的数据。
Voltage(VDDQ)- 存储芯片(颗粒)的输出缓冲供电电压。
Prefetch - 在一个时钟周期中,同时将相邻列地址的数据一起取出来,并行取出DRAM数据,再由列地址0/1/2(DDR1使用列0,DDR2使用列0和列1,DDR3/DDR4使用列0,1和2)选择输出。2n/4n/8n。这里的数字指的就是并行取出的位数。这里的n,就是DQ位宽,即上面的device width(x4/x8/x16)。所以DDR3 16bit SDRAM内存颗粒,16bit指的是位宽,其一次读写访问的数据量是8*16=128bit。
IO clk Frequency - 内存的数据传输速率。它和内存的prefetch有关。对于DDR,一个时钟周期的上升沿和下降沿都在传输数据,即一个时钟周期传输2bit的数据,所以DDR的prefetch为2bit。对于DDR2,IO时钟频率是其核心频率的两倍,同时也是双沿传输数据,因此DDR2的prefetch为2×2bit=4bit。对于DDR3,IO时钟频率是其核心频率的四倍,同时也是双沿传输数据,因此DDR3的prefetch为4×2bit=8bit。
Arbitration CMD priority - 仲裁器,仲裁CMD的优先级。会对来自各端口的请求进行仲裁,并将请求发送给控制器,仲裁其从端口收到的每个事务,每个事务都有一个相对应的优先级。端口仲裁逻辑会根据优先级进行处理,从而确定如何向控制器发出请求。
Round Robin - 每个端口对应一个独立的计数器,当端口上有请求被接受的时候,计数器就会增加,然后仲裁器会针对计数器非0的端口的请求进行轮流仲裁,每仲裁执行一次,相应端口的计数器减一,直到端口接受请求计数器变为0。
带宽分配/优先级轮流操作 - 结合轮流操作、优先级、带宽和端口带宽保持等,根据用户分配的命令优先级,将传入的命令按优先级分组。在每个优先级组内,仲裁器评估请求的端口、命令队列和请求的优先级,从而确定优先级。当控制器繁忙时,超过其带宽分配的端口,可能会接受较低的优先级服务。
加权优先级循环 - 是一种面向服务质量的算法,结合了循环操作、优先级、相对优先级、端口排序的功能。根据命令的优先级或该类型命令的相关端口的优先级,将传入的命令分成优先级组。具有较高权重的端口可能会更频繁的接受仲裁,从而更容易被运行到。
Transaction Processing - 事务处理用于处理命令队列中的命令。该逻辑会重排命令,使DRAM的读写带宽吞吐最大化。
Voltage(VDDQ)- 存储芯片(颗粒)的输出缓冲供电电压。
点击阅读原文了解:DDR存储器概述、开发周期和挑战
是德科技 www.keysight.com.cn