"本文档介绍了在处理卡死情况时针对相控阵雷达系统(94版)内存训练的问题,特别是DDR3 SDRAM相关的调试方法。文档由龙芯中科技术有限公司在2017年的技术培训中提供,涵盖了龙芯内存控制器的主要结构、参数及其作用,以及如何解决内存卡死和DLL_BYPASS模式的相关知识。"
在9.2章节中,针对卡死情况的处理,主要提到内存金手指与插槽接触不良可能导致系统卡死,解决办法是清洁内存金手指并重新插入。如果训练完成后发生卡死,可能涉及读操作故障。可以尝试调整以下参数来解决问题:
a) 调整dll_ck0-3(0x1c-0x1f)的值,这些值可能影响内存时钟的同步。
b) 修改tPHY_RDDATA,增加或减少1~2个单位,以优化读取延迟。
c) 设置2T/3T模式,通过3.21节的方法,这可以改变内存的读取时序,减少错误。
d) 将rdfifo_valid(0x162)设为0x0,防止因读操作导致的卡死。
e) 如果上述方法无效,可能需要检查硬件,如电压、电流等,可能需要硬件工程师进一步诊断。
9.3章节讨论了DLL_BYPASS模式,此模式允许在DLL(Delay-Locked Loop)未锁定时,内存控制器的初始化仍能继续。dll_bypass(0x19)位控制DLL主设备的锁定旁路功能,当设置为1时,即使DLL未锁定,初始化过程也能继续。
在龙芯内存控制器中,涉及到多个关键参数,例如:
- dll_init_done(0x2)指示DLL初始化完成状态。
- dll_value_ck(0x4)与内存时钟DLL的值相关。
- init_start(0x18)用于启动初始化。
- dll_bypass(0x19)控制DLL的旁路功能。
- dll_start_point(0x1a)和dll_increment(0x1b)影响DLL的调整起始点和步进值。
- dll_ck_*(0x1c-0x1f)、dll_gate_*(0x38…)、dll_wrdqs_*(0x39…)、dll_wrdata_*(0x3a…)等与DLL的各个部分相关,调整这些参数可以优化时序。
- dll_rddqs_p/n与读取DQS信号的DLL相关。
- 其他如dq_oe_…、dqs_oe_…、rd_oe_…、odt_oe_…等参数与数据线和控制线的开启和关闭边缘有关。
- rddata_delay_*(0x23)影响读取数据的延迟。
- pad_en_clk(0x140)、pad_en_ctl(0x141)、pad_odt_se(0x149)、pad_reset_po(0x156)等与I/O端口的启用、ODT(On-Die Termination)和复位有关。
- cmd_timing(0x161)控制命令时序。
- rdfifo_valid(0x162)与读取FIFO的有效性关联。
- burst_length(0x16c)定义突发长度。
- odt_*(0x170-0x...)控制ODT配置。
这些参数的调整是内存调试中的关键步骤,正确设置它们可以确保内存系统的稳定性和性能。