
本篇主要是SDRAM有效带宽解析与估算

在进行电子系统设计时,我们经常会用到SDRAM(SDR SDRAM或者DDRX SDRAM)作为缓冲单元,但是如何评估SDRAM的有效带宽呢(评估有效带宽才能够了解当前缓冲单元以及驱动方式能否满足我们的设计需求)?
SDRAM的“有效带宽”指的是在实际系统中,扣除所有必要开销后,能够用于数据传输的实际可用带宽。它总是显著低于理论峰值带宽。
理论带宽
公式:
理论峰值带宽 = (时钟频率 × 数据总线位宽 × 数据传输次数(每个时钟周期传输的bit数:SDR为1,DDR为2)) / 8
单位通常是 字节/秒(B/s) 或 GB/s。
举例:
一片 DDR3-1600,位宽为 16位(2字节);
核心时钟频率:800 MHz
数据传输率(DRAM Frequency):1600 MT/s(每秒百万次传输)
理论峰值带宽 = 800 × 10⁶ × 2 x 16 /2 Bytes = 3200 MB/s = 3.2 GB/s
这个值通常被芯片厂商和市场宣传所使用。
有效带宽
SDRAM在进行通信时,是无法每个时钟周期都用于进行数据读写的。
一次完整的访问通常包含三步:
激活(Activate): 将指定Bank的指定Row数据送到该Bank的“行缓冲器”。此操作功耗较高,延迟较大。
读/写(Read/Write): 在行缓冲器中,根据列地址进行精细的读或写操作。可以连续进行多个读/写(突发传输)。
预充电(Precharge): 操作完成后,必须将行缓冲器的数据写回原Row,并关闭该行,为激活新的行做准备。
下面以SDR SDRAM为例:

在上述时序中可以清楚的看到:为了将四个数据写入到SDRAM中使用了九个周期(包括了激活、写入、关闭等)。
那么也就是说:有效带宽只是理论带宽的一半不到(4/9).
下面给出DDR3的波形图:

与SDR SDRAM类似。
SDRAM在工作时,还需要定时进行刷新操作以避免数据丢失。所以有效带宽就会更低。
提高有效带宽的几种方式
在此只是根据单个芯片进行说明(关于多芯片扩位宽以及RANK,在此不再说明)。
1. 增大突发长度
在每次突发读写中,无论突发长度为多少,前面的激活和后面的预充电所占用的时间是相同的。
例:激活4+读写4+预充电4:那么有效带宽为三分之一;如果激活4+读写8+预充电4:那么有效带宽为二分之一。
说明:在SDR SDRAM中经常采用此方法进行提高有效带宽(可以利用页突发,几乎可以达到百分之百)。在DDRX SDRAM中取消了页突发,并且突发长度一般固定,所以此方法在DDRX SDRAM中失效。
2. 连续突发访问
在SDRAM中,如果第一次操作和第二次操作处于同一个bank的同一行,那么第一次操作可以不用关闭,第二次操作可以不用打开(节省了一次关闭,一次激活)。
以SDR SDRAM的写入为例:

第一次写入没有关闭,第二次写入没有激活。
在电子设计开发时,如果采用的是DDRX SDRAM,一般主控芯片会有IP 控制器,不用我们直接操作DDRX SDRAM。在配置时,注意一个选项:命令的顺序。
建议选择可以优化(重新排列序号)。
例:第一次操作N行,第二次操作M行,第三次操作N行。因为第一次和第二次处于不同行,所以第一次关闭了以后才可以激活第二次操作(完成上述操作需要三次激活、三次操作、三次关闭)。如果我们可以将第三次操作和第二次操作对调执行顺序,那么只需要两次激活、三次操作、两次关闭。
操作的数据量没有改变,但是缩短了需要的时间。
3. 改变地址映射
在SDRAM中,如果第一次操作和第二次操作处于不同bank时,那么可以利用第一次操作关闭的时间来激活第二次操作。
以SDR SDRAM为例:

我们在使用SDRAM在进行缓冲时,一般是使用连续的一块地址(逻辑地址),如果逻辑地址对应的是:BANK ROW COL,那么将会出现用完ABANK的第一行,就会用ABANK的第二行(在同一个bank中,无法实现第一次操作的关闭和第二次操作的激活利用同一段时间)。如果逻辑地址对应的是:ROW BANK COL,那么将会出现用完ABANK的第一行,就会用BBANK的第一行(此时第一次操作的关闭和第二次操作的激活利用的是同一段时间)。
评估有效带宽
当设计完控制器(IP控制器或自己设计控制器)后,可以自己写一些逻辑进行测试有效带宽。
例:统计一秒钟能够写入多少字节,统计一秒钟能够读出多少字节。
说明:
1. 有效带宽和地址的改变规律有一定的关系。
2. 测量时,应该保证最大限度的给予命令或命令(反例:控制器能够五个周期写入一个数据,测量者10个周期才给与一个数据)。
设计注意事项
务必保证有效带宽在你的设计需求之上,否则项目就会出现崩盘。