第2章:LPDDR4基本架构与工作原理

今天我们来聊聊LPDDR4的内部架构。这东西看着复杂,其实拆开来看就清楚了。我刚开始接触DDR时,也老觉得Bank、Row、Column这些概念绕来绕去,后来亲手调了几个项目才真正明白——说白了,它就是内存的存储核心。

2.1 宏观架构:从Channel到Die

LPDDR4和我们常见的DDR4有个很大的不同——它物理上就是一个双通道的设备。什么意思?一颗LPDDR4芯片内部其实藏着两个独立的Die,每个Die都是一个完整的存储子系统。我习惯把它比喻成“一条双车道的公路”。

  • Channel:每个Die对应一个独立的通道(Channel 0和Channel 1)。通道之间完全隔离,互不影响。
  • Die:每颗Die内部有它自己的控制逻辑、地址总线、数据总线。你在PCB上看到的是一颗芯片,实际上它等于两颗芯片。
  • Rank:每个Die可以有一个或多个Rank。Rank是片选的粒度,一个Rank共享时钟、命令和地址总线,但独立使用片选信号CS。
我个人习惯把LPDDR4的架构分为三层:Channel层(双通道)→ Die层(每通道一个Die)→ Rank层(每Die一到两个Rank)。调试时先定位到哪个层级出问题,会高效很多。

2.2 逻辑组织:Bank、Row、Column

好,这一层才是真正的存储核心。每个Rank内部由若干个Bank组成。LPDDR4采用了8-bank架构,同时引入了Bank Group的概念。为什么要这样?你想想看,如果只有一个Bank,每次访问都得等它激活完才能操作——太慢了。

Bank内部又是怎么组织的?每个Bank就像一个二维表格。Row是行地址,Column是列地址。一个Row对应一行存储单元,长度一般就是DDR的数据位宽。举个例子:

假设某颗LPDDR4芯片:
- Row地址宽度:16位(2^16 = 65536行)
- Column地址宽度:10位(2^10 = 1024列)
- Bank Group:4组
- 每组Bank Group包含4个Bank

所以总存储容量 = 4 × 4 × 65536 × 1024 × 16位(每列数据宽度16bit)

一句话总结:Bank Group是为了提高并发度。不同Bank Group之间的Bank可以并行操作,同一Bank Group内的Bank则受限于共享的读写总线。

2.3 关键设计概念:预取16n

LPDDR4的另一个重要特性是预取16n。什么意思呢?每次内部访问,Memory Cell会一次性读取16bit数据到SA(Sense Amplifier),然后再分多次送到IO总线上。

我举个例子就容易理解了。假设你访问一个Column地址,LPDDR4内部实际上会读取连续的16个Column,然后通过数据选择电路把你要的那个Column数据送出来。为什么这样设计?因为核心频率其实做不高,但IO频率可以很高。预取就是在核心速度和IO速度之间做平衡。

我在优化带宽时遇到过一个问题:如果地址总是不连续,预取的16个Column里只有1个有用——效率直接掉到1/16。后来我们强制改成顺序访问,带宽提升了近3倍。

注意:预取16n意味着你读一个地址,芯片内部动了16个Column。如果其他Bank正在操作同一行地址的相邻Column,可能会引发冲突。调试时遇到奇怪的数据错误,先查查地址映射有没有打乱。

2.4 控制信号与基本操作时序

LPDDR4的操作可以拆成几个基本命令:

命令 作用 典型时序参数
ACTIVATE 激活一行(打开Row) tRCD:15~18ns
READ 读取列数据 tCL:16~28时钟周期
WRITE 写入列数据 tWL:14~24时钟周期
PRECHARGE 关闭当前行 tRP:15~18ns
REFRESH 刷新所有行 tRFC:130~350ns

这里的时序参数单位有时是时钟周期,有时是ns,要看具体数据手册。我建议调试时先确认tRCD和tRP,这两个参数最容易出错。我曾因为tRCD配短了2ns,导致芯片在高温下唤醒后概率性死机。

2.5 内部组织与地址映射

LPDDR4的地址映射顺序也有讲究。一般是从最小的粒度开始:

  1. Col(列地址)
  2. Bank Group内的Bank(Bank Group内Bank选择)
  3. Row(行地址,跨Bank共享)
  4. Bank Group(高优先级Bank选择,用于并行操作)
  5. Rank(片选)
  6. Byte Lane(如果存在多通道,则增加Channel选择)

这种映射顺序是为了最大化Bank的利用率和预取效率。不过,具体实现每个IP vendor可能略有不同。调试时最好从Memory Controller的配置寄存器里读出来确认一遍。

曾经有个项目,因为地址映射中Row和Bank Group的顺序反了,导致访问大量跳行。表面上看时序都对,就是带宽上不去。我花了两天翻数据手册才发现——嗯,这个问题在文档里只写了一行小字。
LPDDR4内部层次结构图 LPDDR4 芯片(双通道) Channel 0 (Die 0) Channel 1 (Die 1) Rank 0 (CS0) Rank 0 (CS0) BG 0 BG 1 BG 2 BG 3 Bank 0 Bank 1 Bank 2 Bank 3 Row 0 ~ Row N-1 (16bit宽 × 1024列) 关键说明: 1. 每个Bank是单独的存储数组 2. Row是行地址,Column是列地址 3. 预取16n:单次访问读16个Column 4. Bank Group并行操作,提升带宽 5. Rank共享命令地址,独立CS 6. 双通道:每通道独立数据总线

这张图把LPDDR4的内部层次串在一起了。从顶层的双通道芯片,逐层拆到Die、Rank、Bank Group、Bank,最后落到Row和Column。你调试时遇到唤醒失败,按照这个层次一步步排查——先确认通道是否都起来,再看Rank片选,然后检查Bank Group有没有正确激活,最后定位到具体的Row/Column操作。

记得我有个项目,芯片在低温下唤醒失败,排查到最后发现是Rank 1的CS信号时序不满足保持时间。那问题藏得很深,要是没有这张架构图帮忙定位,估计得花好几周。