本期我们将讨论 DDR4 的 DBI 数据总线翻转(Data Byte Inversion)特性。
基于 JESD79-4B(4C) / 4.11 节
本系列连载于 OpenIC SIG,除了 DDR 学习时间专栏外,OICG 目前正在陆续上线 HDLBits 中文导学的优化版本,欢迎关注/支持/加入我们
DDR 学习时间 - OpenIC SIG 开源数字IC技术分享
导言
DDR4 相较于 DDR3 的一项重要改进是将数据总线 IO 更新成伪开漏(POD, pseudo open drain)标准,取代了前代的 SSTL 标准。在伪开漏电路中,总线驱动高电平时并不会产生功耗,只在驱动低电平时产生功能,因此一项通过尽可能在数据总线上驱动高电平的省电特性 DBI 由此产生。
DDR4 POD IO 标准
在 POD 中,接收器将信号终结(terminated)到 VDD 的高电平,而不是像前代一样终结到一半的 VDD 电压。在低电平状态下,SSTL 和 POD 都有电流消耗,如下图中的绿线所示。实际上,POD 可能会消耗略高的电流,因为其终结电压是 VDD 电压,而SSTL的终结电压仅为 VDD 电压的一半。这在一定程度上被 DDR4 稍低的电源电压所抵消,DDR4 VDD 电压为 1.2V,比 DDR3 的 1.5V 显著降低。
这两种驱动选项之间的主要区别在驱动高电平时突显出来。当驱动高电平时,SSTL 继续以大约等于驱动低电平时的速率消耗电流,电流方向为接收端的 GND 到发送端的 VDD/2,如下图中的红线所示,而 POD 在驱动高电平时不消耗功率,因为收发两端的电压都是 VDDQ。
因此,降低 DDR4 系统功耗的方法是最大化驱动高电平的数量。这时,数据总线反转(DBI)功能就派上了用场。
DBI 特性原理
DBI 是数据总线翻转(Data Byte Inversion)的缩写。通过前文我们知道 DDR4 的 POD IO 标准电路在驱动高电平时不会消耗功耗,因此发送方会最大化驱动高电平 IO 的数量,比如一个 8bit 数据通道上要传输一个 0b0001_0011 的字节,此时 8 bit 中有 5bit 为低电平,为了最小化功耗,发送方将数据翻转为 0b1110_1100, 转为只有 3bit 低电平。
显然,发送方进行极性翻转后,需要通知接收方此次传输的数据已经经过翻转,不然接收方将接收到错误的数据。DDR4 为每个数据通道(8 或 16 比特)引入一个 DBI 引脚,当发送方将数据翻转为 0b1110_1100 后,DBI 引脚被拉低以指示数据已经经过翻转,接收方需要将数据再次翻转然后使用。
在驱动 DRAM 的 SoC 这一侧,DBI 功能一般由 DDR 控制器实现,DDR PHY 一般不负责此事。写操作时,控制器完成比特翻转后通过 DFI DBI 信号送给 PHY,PHY 只负责原样输出 DQ 和 DBI 信号给 DRAM。读操作时也是同理,PHY 在 DBI 特性上是甩手掌柜。
使能 DBI
通过 MR5 使能或者关闭读写 DBI 功能,读写 DBI 功能分别由 1 比特控制。
DBI 省电性能分析
首先,DBI 省电多少取决于具体数据间的比特翻转情况,也就是平均每次传输中,DBI 能够减少多少次低电平比特传输。以 x8 器件为例,可能的排列组合如下,表格中的 +1 表示算上了此时为低电平的 DBI 引脚:
假设所有比特出现低电平的概率完全随机,那么平均低电平比特数量减少的数学期望为
1/256 x 7 + 8/256 x 5 + 28/256 x 3 + 56/256 x 1 = 187/256 = 0.73
由于完全随机情况下,发生比特跳转的数学期望是 4 次,因此 DBI 平均能够减少 0.73/4 = 18.25% 的比特跳转。
援引美光 DDR4 功耗计算示例中的数据,这大致相当于每个器件节省 18.25% 的读写 IO 动态功耗,大约 28mW,占 DRAM 整体功耗的 7%。具体计算的方法以及场景请参考参考文献中的美光 DDR4 功耗计算 PDF。
另外,DBI 特性也可以节省 SoC 端的 IO 跳转功耗,这个需要另行计算,但笔者个人认为大致和 DRAM 节省的 IO 动态功耗相同。
DBI 省电的代价:DBI 特性开销
DBI 很好很省电,那么,代价是什么呢?
Read DBI 导致读延迟显著增加
当 read DBI 使能时,读数据返回会有额外 tDBI 个时钟周期延迟。Spec 中在规定 CL 的时候,额外规定了 read DBI 使能时的 CL,比正常 CL 数值大 2 - 4,所以笔者认为这里额外的 tDBI 是 2 - 4 个周期。
Write DBI 与 DM 不可兼得
事实上,DDR4 并没有为 DBI 新增引脚,而是让他和 DM (Data Mask)功能复用同一个引脚。那么在写数据时,DM 和 DBI 只能选择其一。因为 DM 功能只在写数据时会用到,所以读数据时没有这样的困扰,可以同时使能写 DM 和读 DBI 功能。
如果一定要使用写 DBI,并且也要使用写 Mask 功能,也有办法。可以通过控制器的 RMW (Read-Modify-Write)功能,先读回数据,修改要写的比特再写回去,来替代 DM 引脚功能。
增大 DDR 控制器 DFI 逻辑深度
写 DBI 使能时,DDR 控制需要增加相应逻辑判断高电平比特数,以及实现比特翻转的逻辑。读 DBI 时,DDR 控制器也需要根据 PHY 送回来的 dfi_dbi_xxx 信号,翻转读数据比特逻辑。因此 DBI 功能会增加 DDR 控制 DFI 通路逻辑深度,影响 DFI 通路时序收敛。
DFI 作为一组高频率、超大比特位宽的总线,它的时序收敛一般都是 DDR 子系统,甚至 SoC 时序收敛的要点。解决办法也比较直观,在 DDR 控制器输出输入级增加 DFI Pipeline,但这又增加了 DDR 访问的时延,而 DDR 时延又是整个系统时延的关键...
结语
本期我们讨论了:
- DDR4 DQ IO 标准变化
- DBI 功能的作用
- DBI 功能原理
- DBI 省电也不完全免费:DBI 特性开销
在一项功耗敏感的应用,可以使用 DBI 功能来节省 DRAM IO 动态功耗,节约的功耗大约在 50mW 量级 (DRAM+SoC/PHY),具体节约的功耗大小取决于数据比特跳转的频率。但 DBI 的开销主要是写方向不能使用 DM 引脚,读方向会增加 2-4 个周期延迟。
参考文献
https://static.sw.cdn.siemens.com/siemens-disw-assets/public/82737/en-US/Siemens-SW-DDR4-board-design-and-signal-WP-82737-C1.pdf
https://www.mouser.com/pdfDocs/tn_4003_ddr4_network_design_guide.pdf
TN-40-07: Calculating Memory Power for DDR4 SDRAM
作者:ljgibbs
原文:知乎
相关文章推荐
更多FPGA干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。