【问答】Zynq UltraScale+ MPSoC 处理系统的设计咨询 - 在 85°C 以上运行时,需要更频繁地更新 PS DDR4 / DDR3

描述
如果在 85 摄氏度以上的工作温度下运行,DRAM 需要更频繁地更新。

对于 PS DDR4/DDR3,更新周期必须减半。如果不进行调整,可能会出现数据丢失/损坏的情况。

解决方案
要解决此问题,可修改 psu_init.c:

1. 将更新间隔更改为当前设置的 1/2。找到行 PSU_Mask_Write(DDRC_RFSHTMG_OFFSET, 0x0FFF83FFU, 0x0iiibccc); 其中 iii 是 ROUNDDOWN(tREFI/(2*32*clock_period_in_ns)) 以 3 位十六进制数表示。
将 iii 更改为原始值的 1/2。
注:新值 * 32 必须大于 ccc(3 位十六进制 t_rfc_min)。

2. 将 PGCR2.tREFPRD 更改为当前设置的1/2。
找到行:PSU_Mask_Write(DDR_PHY_PGCR2_OFFSET, 0xFFFFFFFFU, 0x00FaaaaaU);, 其中 aaaaa 是 (8 * ROUNDDOWN(tREFI / clock_period_in_ns))-1000 以 5 个十六进制数字表示。
使用 tREFI / 2,而不是 tREFI重新计算该值,并将新值用于 PSU_Mask_Write 行。

3. 查找以 Xil_Out32(0xFD080018U 开头那行的两个实例,并将其替换为以下内容:

示例一:
int cur_R006_tREFPRD;
cur_R006_tREFPRD = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U;
prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD);

示例二:
prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD);

4. 将 MR2 自刷新更新率调整为 Manual Extended(手动扩展)温度范围内。
找到 PSU_Mask_Write(DDRC_INIT4_OFFSET, 0xFFFFFFFFU, 0x00a00b00U); 所在行,并把 a 的位 3:2 设置为 '10'。 这是整个数据字的位 23:22。
找到 PSU_Mask_Write(DDR_PHY_MR2_OFFSET, 0xFFFFFFFFU, 0x000000c0U); 所在行,并把 c 的位 3:2 设置为'10'。这是整个数据字的位 7:6。
注:修复程序和解决方法都将导致 DRAM 在更高的温度下运行,从而将更新开销从总逻辑内存带宽的大约 6% 增加到大约 12%。

此问题已在 Vivado 2018.3 及更高版本中修复。

最新文章

最新文章