深入理解随机访问存储器RAM:从SRAM到DRAM的技术演进

作为计算机系统中最核心的组件之一,随机访问存储器(RAM)的性能和成本直接决定了整个系统的表现。每当我们抱怨电脑卡顿、游戏加载慢、服务器响应延迟的时候,很大概率都和内存系统的瓶颈有关。为什么CPU的缓存只有几十MB,而主内存却能做到上TB?为什么同样是存储器,SRAM和DRAM的价格差了上千倍?在通信IC设计领域,内存系统的设计更是直接决定了基带芯片、路由器、交换机等核心设备的吞吐量和时延表现。今天我们就来拆解RAM的技术原理,理解这些问题背后的底层逻辑。

RAM家族的两大分支:SRAM与DRAM

RAM主要分为两大类,它们的设计目标和应用场景截然不同:

  • 静态RAM(SRAM):速度极快但成本高昂,主要用于CPU的片上和片下缓存
  • 动态RAM(DRAM):速度稍慢但密度极高、成本低廉,是我们日常所说的”内存”的主力,也用于图形系统的帧缓冲区

在典型的桌面系统中,SRAM的总容量通常只有几十MB,却要消耗CPU芯片上相当大的面积;而DRAM容量可以轻松达到数百甚至数千GB,为系统运行提供充足的空间。这种巨大的差异,本质上是由它们底层的存储单元设计决定的。在通信芯片设计中,这种差异表现得更为明显:高端5G基带芯片中,SRAM可能占据整个芯片面积的30%以上,用来缓存实时处理的基带信号,而DRAM则作为外部存储用来承载协议栈和应用数据。

静态RAM(SRAM):速度的极致追求者

SRAM的核心是双稳态(bistable)存储器单元,每个位需要6个晶体管组成的电路来实现。这种电路的设计非常巧妙,它有两个稳定的电压状态,可以类比成一个倒置的单摆:只有向左或向右两个稳定位置,中间的任何位置都是不稳定的,只要有微小的扰动就会倒向其中一个稳定状态。

这种设计赋予了SRAM非常优秀的特性:

  • 只要保持供电,SRAM单元就能无限期保持存储的值,完全不需要刷新操作
  • 即使受到电气噪声等干扰,只要干扰消失,电路就会自动恢复到稳定状态
  • 访问速度比DRAM快约10倍
  • 对光照和电气噪声不敏感,稳定性极高

但天下没有免费的午餐,6个晶体管才能存1位的设计,也带来了致命的缺点:密度极低、功耗高、成本更是达到了DRAM的约1000倍。这也是为什么SRAM只能用于对速度要求极致苛刻的缓存场景,而不可能作为大容量存储使用。在通信IC设计中,SRAM的这些特性被充分利用在关键路径上:比如路由器的转发表缓存、5G物理层的符号缓冲,这些场景要求纳秒级的访问时延,只有SRAM能够满足要求。

动态RAM(DRAM):容量与成本的平衡大师

与SRAM的复杂电路不同,DRAM的存储单元简单到极致:每个位只需要一个电容和一个访问晶体管,通过电容上的电荷来表示0和1。这种极简的设计让DRAM的密度极高,单位成本只有SRAM的千分之一。

但电容的物理特性也带来了天生的缺陷:

  • 电容存在漏电电流,会导致存储的电荷在10-100毫秒内逐渐流失,因此内存系统必须定期刷新每个位(读出数据后重新写入)
  • 对干扰非常敏感,电容电压一旦受到扰动就无法恢复,因此很多系统会使用错误纠正码(ECC)来检测并纠正单个错误位
  • 访问速度只有SRAM的十分之一左右

在数据中心和通信基础设施中,ECC内存已经成为标准配置,因为长时间运行的系统中,宇宙射线和电气干扰导致的单比特翻转是不可忽略的问题,而这些错误可能会导致路由错误、数据损坏甚至系统崩溃。

SRAM与DRAM的核心对比

特性 SRAM DRAM
每个位所需晶体管数 6 1
相对访问时间 10×
是否需要刷新 不需要 需要
是否对干扰敏感 不敏感 敏感
相对成本 1000×
典型应用 高速缓存 主内存、帧缓冲区

这个对比非常直观地展现了两种存储技术的权衡:SRAM牺牲了密度和成本换取极致的速度,而DRAM则牺牲了一定的速度和稳定性换取了极高的存储密度和极低的成本。正是这种巧妙的分工,让现代计算机系统既能拥有接近SRAM的访问速度,又能拥有DRAM级别的大容量存储。在通信系统设计中,这种权衡体现得更加淋漓尽致:为了实现100Gbps甚至400Gbps的数据包转发能力,设计师需要精心规划不同层次存储的使用,在成本、功耗和性能之间找到最佳平衡点。

DRAM的内部结构与访问原理

理解了DRAM的基本特性后,我们再来看看它的内部组织结构。为了在有限的芯片面积下实现尽可能高的容量,DRAM的设计者们想出了非常精巧的结构。

超级单元的二维阵列组织

DRAM芯片的存储单元被划分为多个超级单元(supercell),每个超级单元由w个DRAM单元组成。一个d×w的DRAM总共可以存储d*w位信息。为了减少地址引脚的数量,这些超级单元被组织成二维矩形阵列,r行c列,满足rc = d。每个超级单元的地址形式为(i, j),其中i是行号,j是列号。

举个简单的例子,一个16×8的DRAM芯片:

  • 总共有d=16个超级单元,每个w=8位(1字节)
  • 被组织成r=4行,c=4列的阵列
  • 总容量:16×8=128位=16字节

虽然这个例子很小,但现代大容量DRAM芯片的组织原理是完全一样的,只是阵列的规模更大而已。现在的DDR5芯片单颗容量已经达到32Gb,内部阵列的行列数都达到了数万级别。

DRAM的访问过程

DRAM通过内存控制器进行访问,整个过程分为两步:

  1. 内存控制器首先发送行地址i(称为RAS,行访问选通请求)
  2. DRAM将整行内容复制到内部行缓冲区
  3. 内存控制器发送列地址j(称为CAS,列访问选通请求)
  4. DRAM从行缓冲区中取出对应超级单元的内容发送给控制器

你可能会问,为什么要分两步发送地址,而不是一次性发送完整的地址?这是因为RAS和CAS请求共享相同的地址引脚,分两步发送可以大大减少芯片的地址引脚数量,降低成本,但代价是会增加访问时间。这又是一个典型的硬件设计中的权衡:牺牲一点性能,换取更低的成本和更高的集成度。

在高性能通信芯片设计中,内存控制器的设计是整个系统的关键瓶颈。为了充分利用DRAM的带宽,设计师需要尽可能将访问请求合并,提高同一行的访问命中率,减少行激活的次数。这也就是为什么我们在编写网络转发程序时,要尽量保证数据结构的内存布局是连续的,这样可以大幅提高DRAM的访问效率。

内存模块:从芯片到系统的桥梁

单个DRAM芯片的容量和带宽都是有限的,无法满足现代系统的需求。因此,实际系统中会把多个DRAM芯片封装在一起,组成内存模块,也就是我们平时买到的内存条,插入主板的扩展插槽中使用。

现代系统普遍使用240针的双列直插内存模块(DIMM),以64位块为单位与内存控制器传输数据。我们以一个64MB的内存模块为例,看看它的工作原理:

  • 由8个64Mbit的8M×8 DRAM芯片组成
  • 每个超级单元存储1字节
  • 主内存中地址A的64位字由8个DRAM芯片中对应地址(i,j)的超级单元共同组成
  • 读取时,内存控制器将地址A转换为超级单元地址(i,j),广播到所有DRAM芯片,每个芯片输出对应超级单元的8位内容,组合成64位字返回给控制器

这种并行访问的设计,既提高了内存的总容量,又大大提升了访问带宽。系统还可以连接多个内存模块,内存控制器会根据地址选择对应的模块进行访问,进一步扩展容量。在高端服务器和通信设备中,内存通道数可以达到8个甚至更多,总带宽超过1TB/s,才能满足高性能计算和高速数据包处理的需求。

DRAM技术的演进之路

从最初的DRAM到现在的DDR5,内存技术一直在不断演进,核心目标就是在保持成本优势的前提下,不断提高访问速度。

  1. 快页模式DRAM(FPM DRAM):最早的优化技术,允许对同一行的连续访问直接从行缓冲区获取,无需重复发送RAS请求,大大提高了顺序访问的速度。
  2. 扩展数据输出DRAM(EDO DRAM):FPM的增强版,允许CAS信号间隔更短,进一步提高了访问效率。
  3. 同步DRAM(SDRAM):革命性的改进,使用与内存控制器相同的外部时钟信号同步通信,相比之前的异步DRAM速度提升明显。
  4. 双倍数据率同步DRAM(DDR SDRAM):另一个重大突破,使用时钟的上下沿作为控制信号,理论带宽直接加倍。根据预取缓冲区大小分为不同代:
    • DDR:2位预取
    • DDR2:4位预取
    • DDR3:8位预取
    • DDR4:16位预取
    • DDR5:32位预取
  5. 视频RAM(VRAM):专门为图形系统优化的DRAM,支持并发读写操作,还可以按顺序输出整个内部缓冲区内容,特别适合屏幕刷新的场景。

这些技术演进的路线非常清晰:每一代都在现有DRAM的基础上,通过优化访问方式、改进通信协议,不断挖掘DRAM的性能潜力,同时保持成本的优势。当前DDR5已经成为市场主流,单条内存容量可达128GB,速率达到6400MT/s,而下一代DDR6标准已经在制定中,预计速率将突破12.8GT/s,将进一步满足AI计算和高性能网络的需求。

在通信领域,内存技术的演进直接推动了网络设备的代际升级。从10G到100G再到400G以太网,每一次速率提升都需要对应的内存技术提供足够的带宽支撑。现在的5G基站中,单个基带板就需要配备数百GB的DDR5内存,用来缓存海量的用户数据和协议状态。

非易失性存储器:断电后也能保存数据

无论是SRAM还是DRAM,都是易失性存储器,只要断电,存储的所有信息就会全部丢失。但很多场景下我们需要即使断电也能保存的数据,这就需要非易失性存储器。历史上这类存储器统称为只读存储器(ROM),尽管现在很多类型也支持写入操作。

常见的非易失性存储器包括:

  1. 可编程ROM(PROM):只能编程一次,通过高压熔断内部熔丝实现编程,一旦写入就无法修改。
  2. 可擦除可编程ROM(EPROM):可以多次擦写,通过石英窗口暴露在紫外线下擦除所有内容,可擦写约1000次。
  3. 电可擦除PROM(EEPROM):无需紫外线照射,可以在电路板上直接编程,可擦写约10^5次。
  4. 闪存(Flash Memory):现在最流行的非易失性存储器,基于EEPROM技术改进而来,广泛应用于数码相机、手机、音乐播放器、固态硬盘(SSD)等设备。

存储在ROM中的程序称为固件(Firmware)。系统上电后会首先运行ROM中的固件,比如PC的BIOS(基本输入输出系统),显卡、磁盘控制器等复杂设备也依赖固件来处理CPU的I/O请求。可以说,固件是连接硬件和软件的第一座桥梁。在通信设备中,固件存储着操作系统、配置信息和关键特性,设备启动时首先从Flash中加载固件到DRAM中运行。近年来,随着存储级内存(SCM)技术的发展,非易失性存储器的速度已经接近DRAM,为系统架构设计带来了新的可能性,比如持久化内存数据库、零丢失的数据包缓存等应用场景正在逐渐成为现实。

主内存的访问流程

最后我们来看看CPU是如何和主内存交互的。CPU和DRAM主内存之间通过总线(bus)传输数据,每次数据传输称为总线事务

  • 读事务:从主内存传输数据到CPU
  • 写事务:从CPU传输数据到主内存

典型的系统包含三个核心组件:

  1. CPU芯片
  2. I/O桥接器(包含内存控制器)
  3. DRAM内存模块(主内存)

这些组件通过两类总线连接:

  • 系统总线:连接CPU和I/O桥接器
  • 内存总线:连接I/O桥接器和主内存

总线本质上是一组并行导线,用来传输地址、数据和控制信号。控制信号用于同步事务,标识事务类型(读/写)和目标设备(内存或I/O设备)。当CPU需要访问内存时,会通过系统总线向I/O桥发送请求,I/O桥中的内存控制器再通过内存总线和DRAM交互,完成数据的读写。

在现代异构计算架构中,这个访问流程变得更加复杂。GPU、NPU、网络接口卡等设备都可能直接访问内存,这就需要复杂的缓存一致性协议来保证数据的正确性。在通信芯片中,网络接口通常支持直接内存访问(DMA)技术,可以绕过CPU直接将数据包写入内存,极大地降低了CPU的负载,这也是高性能网络设备实现高吞吐量的关键技术之一。

技术思考

理解RAM的工作原理,对我们做软件开发也有很大的启发。比如为什么我们要尽量提高程序的局部性?因为DRAM的二维阵列设计导致连续访问同一行的速度比随机访问快很多,良好的局部性可以大大减少内存访问的开销。又为什么缓存的命中率这么重要?因为SRAM的访问速度是DRAM的10倍,只要缓存能命中,性能就能提升一个数量级。

笔者在做通信芯片性能优化的时候,经常会遇到”内存墙”的问题:CPU的速度提升得太快,而内存的速度跟不上,导致很多时候CPU都在等待内存的数据。这时候理解内存的层次结构和访问原理,就能帮我们设计出更高效的数据结构和算法,尽量减少对内存的随机访问,充分利用缓存的优势。在400G路由器的转发平面设计中,为了实现每秒钟数十亿次的数据包转发,笔者的团队曾经花费了数月时间优化数据结构的内存布局,将随机访问降低到最少,最终才达到了性能目标。

另一个让笔者印象深刻的点是硬件设计中的权衡哲学。无论是SRAM和DRAM的分工,还是DRAM内部的地址复用设计,都充满了”牺牲某一方面的优势,换取另一方面的收益”的智慧。这种权衡的思想,在软件设计中也同样适用。我们在设计系统架构时,也经常需要在复杂度、性能、可靠性、成本之间做出类似的权衡,而硬件领域几十年的发展经验,其实可以给我们很多借鉴。

当前,随着AI大模型的爆发,内存系统的瓶颈变得更加突出。大容量高带宽内存已经成为训练大模型最关键的资源之一,HBM(高带宽内存)技术的快速发展就是为了应对这一挑战。HBM通过3D堆叠的方式将多个DRAM芯片集成在一起,带宽比传统DDR5高出数倍,成为AI加速卡的标配。这也让我们看到,存储技术的创新仍然是推动整个计算产业发展的核心动力。

总结

RAM作为计算机系统的核心组件,其设计充分体现了硬件工程师的智慧。SRAM和DRAM的分工合作,让我们既能拥有极致的访问速度,又能拥有足够的存储容量;DRAM的二维阵列设计和不断演进的访问技术,在保持成本优势的同时不断提升性能;而非易失性存储器则满足了断电保存数据的需求。理解这些底层原理,不仅能帮助我们更好地理解计算机系统的工作方式,也能为我们的软件设计和性能优化提供思路。在通信IC设计这个对性能和时延极度敏感的领域,深入掌握内存系统的工作原理,更是每个硬件和软件工程师的必备技能。