FPGA 中 DDR 控制器的**地址映射顺序(Address Mapping Order)是优化设计速度(带宽和效率)**的关键。
简单来说,地址映射顺序决定了线性地址如何映射到 DDR 芯片内部的物理结构(Bank、Row、Column)。正确的映射可以最大化访问的局部性,从而减少耗时严重的**行激活(Row Activate)**命令,显著提升有效带宽。
一、核心概念:DDR 的内部结构
要理解地址映射,必须先了解 DDR SDRAM 的物理结构。你可以把它想象成一个有很多本书的图书馆:
- Bank: 相当于图书馆的楼层(例如,Bank 0, Bank 1, ...)。DDR3/4 通常有 8 个 Banks。
- Row: 相当于一层楼里的一个书架。一个 Bank 里有很多个 Rows。
- Column: 相当于一个书架上的某一本书。一个 Row 里有很多个 Columns。
访问数据的流程:
- 激活(Activate):告诉 DDR,'我要去第 X 层楼(Bank)的第 Y 个书架(Row)'。这是一个高延迟的操作。
- 读/写(Read/Write):'请把那个书架上的第 Z 本书(Column)给我'。在同一个'书架'(Row)上连续取多本书(Burst Length)是非常快的。
- 预充电(Precharge):关闭当前的书架(Row),为打开另一个书架做准备。
关键点:最耗时的操作是 Activate。因此,优化的目标就是尽可能让连续的内存访问发生在同一个 Bank 和同一个 Row内,从而最大限度地减少 Activate 命令。
二、地址映射顺序的作用
地址映射顺序决定了用户发出的线性地址如何被解码成 Bank、Row、Column 这三个物理地址。
- 用户逻辑看到的地址:
addr[31:0](一个长长的、连续的地址空间) - MIG (Memory IP) 做的事情:将
addr[31:0]切分成rank_addr、bank_addr、row_addr、col_addr。
映射顺序就是定义 addr[] 的哪几位被分配给 bank_addr,哪几位给 row_addr,哪几位给 col_addr。
三、DDR 地址映射配置
最常见的两种预设模式是:
a. ROW_COLUMN_BANK(或类似名称)
- 含义:线性地址的高位映射到 Row,中间位映射到 Column,低位映射到 Bank。
- 访问模式:连续地址访问会在不同的 Bank、相同的 Row之间跳转。
- 优点:非常适合连续 burst访问(例如,DMA 传输大块数据)。因为连续访问总是在同一个 Row 内,只需要一次 ,后续都是快速的 命令,效率极高。



