当前位置: 首页 > news >正文

DDR Study - LPDDR4 TTR/PPR/ECC/PASR/DBI

参考来源:JESD209-4B,JESD209-4E
简单分享下LPDDR4中部分功能模块TRR,PPR,PASR,DBI的设计。

TRR - Target Row Refresh

随着DRAM密度增加,在相同芯片尺寸下,单个的DRAM Cells单元更小,每个Cell之间的距离更小,可以存储的电荷也会更少。
这会导致DRAM Cell更容易收到串扰,并且数据噪声容限降低(电荷更容易丢失),从而使系统更容易出现数据错误。
又因为DRAM Row每次访问之前都需要ACTIVATE激活,把目标Row的单元置于较高的电压电平,而该组的其他行保持在较低的电压电平。
当一行快速激活时,其电压电平也会相应变化。

由于不同Row之间的Cell距离特别近,目标行的加速充电会引起相邻周围的DRAM Cell单元的加速放电,从而可能会导致相邻行单元数据丢失。
这种现象容易被黑客利用(Rowhammer Attacking),通过不断地访问某些DRAM固定区域形成大量重复激活,让DRAM部分DRAM Cell漏电形成bit翻转,从而跨过Secure访问限制。

为了克服这种情况,LPDDR4 引入了目标行刷新 (TRR) 机制。 TRR 限制刷新周期内单行的最大激活次数(MAC 计数)。
每当单行(Target Row)的激活计数达到 MAC 计数时,或者最多同时有两个Target Row场景下两行激活计数总和达到MAC 计数时,TRR 过程将刷新相邻行(Victim Row)以避免数据丢失。
DRAM CELL

需要注意的是初始化期间必须禁用 TRR 模式以及任何其他 LPDRR4 SDRAM 校准模式,TRR模式在完成之后回自动关闭。
TRR 模式是从 DRAM IDLE空闲状态进入的,一旦进入 TRR 模式,除了允许设置 MR24 [OP7=0] 以中断并重新发出 TRR 模式外,在 TRR 模式完成之前不允许执行其他模式寄存器命令。

PPR - Post Package Repair

随着DRAM长时间地使用以及高低温场景下对DRAM Cell的损耗,会出现内存老化导致存储的单元信息错误。
PPR就是LPDDR4中针对这种问题的一种自修复机制,当系统启动过程中发现错误单元,使用DDR4里面冗余单元或者临时空闲单元进行替换,俗称自修复。

如果是将错误单元重新路由到临时的空闲DRAM有效单元,就是soft PPR。具有速度快的优势(耗时大约1us),但是每次掉电或者reset之后就会失效。
如果是将错误单元的原有address信息通过E-Fuse熔断,并重新路由到特别预留的冗余DRAM单元,就是hard PPR。速度较慢(耗时约为毫秒级),但是永久有效。
PPR每个Bank最多支持一个Row Address修复。
PPR

PPR流程如下:

  1. 在进入“PPR”模式之前,必须对所有存储体进行预充电
  2. 使用 MR4 位“OP4=1”启用 PPR 并等待 tMRD - Mode register set command delay
  3. 发出包含故障行地址的 ACT 命令
  4. 等待 tPGM - PPR Programming Time 以允许 DRAM 内部修复目标行地址然后发出 PRE - Precharge
  5. 在 PRE 之后等待 tPGM_Exit,这允许 DRAM 识别已修复的行地址 RAn
  6. 设置 MR4 位“OP4=0”退出 PPR 在 tPGMPST - New Address Setting time 后发出 RESET 命令
  7. 在多个故障地址修复情况下,重复步骤 2 至 7

一旦退出 PPR 模式,为了确认目标行是否已正确修复,主机可以通过将数据写入目标行并在 PPR 结束后读回来进行验证。

Fuse

这里简单提一下Fuse的概念:
Fuse属于OTP - One-Time-Programmable Memory类型的存储单元,特点是存储的数据在编程后无法更改。
fuse

详细可以参考Anti-Fuse OTP
因为其一次性编程不可逆的特性,常被用作存储系统Secure数据,常见的有E-fuse和Anti-fuse:
E-fuse 通过吹制一部分金属或聚乙烯,将数据编程到一次性可编程 (OTP) 存储器中。Blown前是导通状态,Blown后熔丝断裂,不再导通。
Anti-fuse是基于氧化物烧毁机制编程的。烧毁会产生导电路径,而不会在表面上留下任何可见的痕迹。

ECC - Error Correction Code

上面的PPR是DRAM的自修复机制,而ECC则是DRAM的纠错机制。
在DRAM使用中,会存在设计错误导致的硬件错误和系统噪声等干扰引起软错误,这些错误会引起DRAM数据value的错误写入和读取。

DDR 控制器通过为实际数据生成 ECC和SECDED(单位纠错和双位检错)数据并存储到附加 DRAM 中,可以对 DRAM 发送的数据进行单位纠错和双位检错。
关于单位纠错和双位检错机制可以参考这篇文章ECC纠错检错算法,可以做到在检查错误的同时对错误进行修正。

ECC的生成和校验顺序如下:

  • ECC 数据由MC控制器根据实际的 WR 数据生成,DRAM同时存储写命令的数据和 ECC 数据
  • 在 RD 操作期间,MC控制器从内存读取数据和相应的 ECC 数据
  • MC控制器利用接收到的数据重新生成 ECC 数据,并将其与接收到的 ECC 数据进行比较
  • 如果两者匹配,则不会发生错误。如果不匹配,控制器会纠正任何单 bit 错误并检测双 bit 错误

ECC 方案可能有两种类型:side-band ECC 或 inline ECC。
标准 DDR 内存的应用通常使用 side-band ECC,而使用 LPDDR 内存的应用则使用 inline ECC。
另外在DDR5上增加了On-Die ECC和Link ECC机制,有兴趣可以参考Synopsys DRAM info

Side-Band ECC

在 Side-Band ECC 中,ECC 数据存储在单独的 DRAM 上。
Side-Band ECC 数据拥有专属的通信信道,会作为边带数据连同实际数据发送到内存。
MC控制器会同时读写 ECC 数据和实际数据。此 ECC 方案不需要额外的 WR 或 RD 开销命令。
SB ECC

Inline ECC

在Inline ECC 中,ECC 数据与实际数据一起存储在同一个 DRAM 上。
因为Side-Band ECC 会额外占用DRAM的通信带宽,在LPDDR中属于较为昂贵的解决方案。
Inline ECC将 ECC 数据存储在存储实际数据的同一 DRAM 信道中。
因此,内存信道的总体数据宽度与实际数据宽度相同。
MC控制器为 ECC 数据生成单独的开销 WR 和 RD 命令。
IL ECC

PASR - Partial Array Self Refresh

在之前的介绍中提到过,由于DRAM Cell中的电荷会随着时间的推移而泄漏,因此必须定期刷新DRAM Cell,以保持数据的完整性。
PASR 则是面向低功耗场景的特定自刷新模式,主要是LPDDR的suspend state这种休眠场景,并不需要刷新所有DRAM region。
PASR刷新操作不会在整个存储单元阵列(full memory cell arrays)中执行,而只会在需要保留数据的自定义存储单元组(specific banks)中执行。
定义的刷新区域之外的数据存储将不会保留。这种 PASR 有助于降低自刷新电流,从而实现低功耗功能。
更多细节可以参考PASR
PASR

LPDDR4 PASR的区域由MR16(Bank) + MR17(Segment)控制。
LPDDR5由MR23+MR25(PARC)控制,如何选择PASR Bank需要MC控制器端SW Code配合控制。

MC控制器端的SW控制内容主要是决定保留数据的高频访问DRAM区域和减少刷新的低频访问DRAM区域。
在PASR region选择上,如果被Kernel定义为moveable region,就可以Enable这部分的PASR,disable self-refresh
MAP

DBI - Data Bus Inversion

在DRAM和SOC通信中进行数据传输时,如果某种电平信号传输需要更多的能耗支持,那么大量此类电平信号的传输无疑会增加功耗。
而DBI就是一种通过减少信号反转次数来降低功耗通信的方法。

在DDR4中引入了低电压摆幅端接逻辑 (LVSTL),LVSTL能够让DDR4使用的电压电平低于以往的DDR。
并且LVSTL可以让低电平通过 I/O 驱动器驱动时,不会消耗终端功率。
这意味着如果数据流中有更多的零,则消耗的功率会更少。

DBI 在字节级粒度上工作。每当一个字节包含超过 4 个位数的 1 时,驱动程序就会反转整个字节并发送相应的数据掩码反转 DMI 位,以通知接收器相应的字节已被反转。
从而保证单字节数据传输中的高电平信号始终小于低电平信号,实现了尽可能低功耗的通信。
DBI


http://www.mrgr.cn/news/64606.html

相关文章:

  • 第三十四章 Vue路由进阶之声明式导航(导航高亮)
  • Vue:模板 MVVM
  • ruoyi若依vue分离版前端资源打包到jar中
  • 《深度学习入门》笔记
  • 【逆向基础】十八、PE文件格式(三)
  • 【Linux】- 权限(2)
  • Qt中的Model与View 4:QStandardItemModel与QTableView
  • 将数据条格式应用于列
  • Docker小记
  • 使用Docker Compose构建多容器应用
  • 农作物叶片病害检测数据集汇总(猫脸码客 第235期)
  • Spring ApplicationContext接口
  • 【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录功能设计
  • 【k8s】-备份恢复etcd数据
  • 【LwIP源码学习4】主线程tcpip_thread
  • http://43.139.152.26 枪声问题(桂城真题)
  • 构 造 器
  • linux perf 环境部署和基本测试(基于Ubuntu20.04)
  • Qt中的Model与View 2
  • Linux -- 初识信号
  • Guava Cache 原理与实现剖析
  • Git - 两种方式撤销已提交到远端仓库的记录并删除提交记录
  • 文化素质教育系列讲座听讲5
  • DICOM标准:MR图像模块属性详解——磁共振成像(MR)在DICOM中的应用
  • PHP如何处理密码嗅探和重播攻击
  • 撒大苏打是