logo资料库

龙芯内存调试详细过程.pdf

第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
资料共56页,剩余部分请下载后查看
2017 年龙芯技术培训主题二 龙芯内存调试 龙芯中科技术有限公司 2017 年 8 月
目录 适用范围 ................................................................................................................... 1  龙芯内存调试 .................................................................................................................... 2  1  内存系统简要介绍 ...................................................................................................... 2  1.1  内存基本原理 ............................................................................................................ 2  1.2  内存接口 .................................................................................................................... 3  2  龙芯内存控制器主要结构及功能 ................................................................................ 8  2.1  龙芯内存控制器概述 ................................................................................................ 8  2.2  龙芯内存控制器结构 ................................................................................................ 9  2.3  龙芯内存控制器 PHY 结构 ...................................................................................... 9  3  龙芯内存控制器主要参数及作用: ........................................................................... 11  dll_init_done(0x2) .................................................................................................... 11  3.1  dll_value_ck(0x4) .................................................................................................... 11  3.2  init_start(0x18) ......................................................................................................... 11  3.3  dll_bypass(0x19) ...................................................................................................... 11  3.4  dll_start_point(0x1a) ................................................................................................ 11  3.5  dll_increment(0x1b) ................................................................................................. 12  3.6  dll_ck_*(0x1c-0x1f) ................................................................................................. 12  3.7  dll_gate_*(0x38…) .................................................................................................. 12  3.8  3.9  dll_wrdqs_*(0x39…) ............................................................................................... 12  3.10  dll_wrdata_*(0x3a…) .............................................................................................. 12  3.11  dll_rddqs_p/n ............................................................................................................ 13  3.12  dq_oe_end/dq_oe_begin/dq_stop_edge/dq_start_edge(0x24-0x27,…) ................... 13  3.13  dqs_oe_end/dqs_oe_begin/dqs_stop_edge/dqs_start_edge(0x28-0x2b,…) ............. 14  3.14  rd_oe_end/rd_oe_begin/rd_stop_edge/rd_start_edge(0x2c-0x2f,…) ...................... 14  3.15  odt_oe_end/odt_oe_begin/odt_stop_edge/odt_start_edge(0x30-0x33,…) .............. 14  3.16  rddata_delay_*(0x23) .............................................................................................. 15  3.17  pad_en_clk(0x140) ................................................................................................... 15  3.18  pad_en_ctl(0x141) .................................................................................................... 15  3.19  pad_odt_se(0x149) ................................................................................................... 15  3.20  pad_reset_po(0x156) ................................................................................................ 15  3.21  cmd_timing(0x161) .................................................................................................. 17 
3.22  rdfifo_valid(0x162) .................................................................................................. 17  3.23  burst_length(0x16c) ................................................................................................. 18  3.24  odt_*(0x170-0x177) ................................................................................................. 18  3.25  lvl_cs(0x183) ............................................................................................................ 19  3.26  mr_*_cs_*(0x1a0-0x1b8) ........................................................................................ 19  3.27  tRDDATA(0x1c0) .................................................................................................... 23  3.28  REF(0x1cb,0x320)、tRFC(0x1ca) .......................................................................... 23  3.29  tPHY_WRLAT(0x1d4) ............................................................................................ 23  3.30  t*_diff*(0x1e0-0x1e8) ........................................................................................ 24  3.31  cs/row/ba/col_diff_*(0x210-0x228) ......................................................................... 24  3.32  时序参数对内存带宽的影响: .......................................................................... 24  4  PMON 中内存控制器相关内容 ................................................................................. 25  4.1  内存相关宏定义 ...................................................................................................... 25  4.2  start.S 中 s1 寄存器的设置 ..................................................................................... 26  4.3  内存初始化流程: .................................................................................................. 27  4.4  内存读写测试: ...................................................................................................... 28  PMON 下简单读写测试 .................................................................................. 28  PMON 下复杂读写测试 .................................................................................. 29  5  内存训练 .................................................................................................................. 31  5.1  龙芯内存训练程序: .............................................................................................. 31  write leveling .................................................................................................... 31  5.1.1  Gate leveling ..................................................................................................... 34  5.1.2  5.1.3  训练文件中宏定义说明 .................................................................................. 37  6  内存测试常用程序: ................................................................................................ 39  6.1  PMON 测试程序: ................................................................................................. 39  6.2  系统下 stressapptest ................................................................................................. 39  7  内存信号测量 ........................................................................................................... 40  7.1  测量点选择: .......................................................................................................... 40  7.2  时钟信号 CLK ......................................................................................................... 40  7.3  命令信号 .................................................................................................................. 41  7.4  写信号 ...................................................................................................................... 42  7.5  写眼图 ...................................................................................................................... 44  7.6  读信号 ...................................................................................................................... 45  4.4.1  4.4.2 
7.7  读眼图 ...................................................................................................................... 46  8  硬件设计注意事项 .................................................................................................... 47  9  内存常见问题及解决方法总结 .................................................................................. 48  9.1  内存调试最重要的参数--dll_ck_0-dll_ck_3(0x1c-0x1f) ....................................... 48  9.2  卡死情况 .................................................................................................................. 48  9.3  DLL_BYPASS 模式 ................................................................................................ 48  9.4  DLL 锁定问题 ......................................................................................................... 49  9.5  训练后内存参数分析 .............................................................................................. 49  9.6  稳定性-性能矛盾 .................................................................................................... 51  9.7  合理电压范围 .......................................................................................................... 51  9.8  32/16 位通道模式 .................................................................................................... 51  9.9  使用 ECC 功能排除内存问题 ................................................................................ 51  9.10  双路开发板调试建议 .......................................................................................... 52  9.11 DDR2 内存参数配置方法 .............................................................................. 52 
适用范围  芯片型号: 该文档适用于龙芯 3A1500、3A2000、3A3000、3B1500、3B2000、3B3000、 2J1500 以及 2K1000 几款芯片。 内存类型: DDR2/DDR3、UDINN/RDIMM/SODIMM 以及按照 DIMM 方式走线的贴片 颗粒 训练程序: 在 PMON 中训练程序文件为 loongson3C_ddr3_leveling.S。该训练程序仅支 持 DDR3 类型的内存,由于 DDR2 类型的内存本身不支持 Leveling 操作,所以 只能手动配置 DDR2 参数。另外,该训练程序主要针对 UDIMM/RDIMM 进行了 适配,如果同一内存通道内不同颗粒之间的走线关系与 UDIMM/RDIMM 存在差 别,那么可能需要修改训练程序。 参考文档: 芯片的用户手册中关于内存控制器的章节以及 DDR2/3 协议 1
龙芯中科技术有限公司 龙芯内存调试 1 内存系统简要介绍  1.1 内存基本原理 内存是现代计算机的重要组成部分。内存的读写速度对计算机的整体性能影 响重大。为了提升处理器的访存性能,现代处理器采用了大量的结构优化方法。 例如,在片内增加了多级的 Cache 层次,或更进一步将内存控制器与 CPU 集成 在同一芯片内,以减小平均访存延迟。大部分处理器已经集成内存控制器。 现代内存基本都采用同步动态随机存储器(SDRAM)实现。SDRAM 芯片 一般采用行列地址线复用技术,对 SDRAM 进行读写时,需要先发送行地址打开 一行,再发送列地址读写需要访问的存储单元。为了提高访问的并发度, SDRAM 芯片一般包含多个 bank,这些 bank 可以并行操作。图 1-1 显示了一个 DDR2 SDRAM x8 芯片的内部结构图。可以看到,该 SDRAM 内部包含了 8 个 bank, 每个 bank 对应一个存储阵列(Memory array)和一组感应放大器(Sense amplifiers),所有的 bank 共用读锁存(Read latch)和写 FIFO。对 SDRAM 进行 写操作后,由于必须等到写数据从 IO 引脚传送到对应 bank 的感应放大器后,才 能进行后续的预充电操作(针对相同 bank)或着读操作(针对所有 bank),因此 写操作会给后续的其它操作带来较大的延迟,但连续的写操作却可以流水执行。 为了降低写操作带来的开销,内存控制器往往将多个写操作聚集在一起连续发 送,以分摊单个写操作的开销。 图 1-1 SDRAM 的功能结构图 2
龙芯内存调试 存在两个影响 SDRAM 芯片读写速度的重要方面:行缓冲局部性(row buffer locality,RBL)和 bank 级并行度(bank level parallelism,BLP)。 行缓冲局部性 如图 1-1 所示,SDRAM 芯片的一行数据在从存储体中读出后,会保存在对 应的一组感应放大器中,在访问其他行的数据前,如果访问该行的数据,可以直 接从该感应放大器中读出,而不需要重新访问存储体内部,这组感应放大器也被 称为行缓冲。命中行缓冲的数据可以大大降低 SDRAM 的访问延迟。当然,在行 缓冲不命中而且发生行冲突的时候,就需要首先将行缓冲中的数据写回存储体, 也就是 DRAM 中,再将下一行读出到行缓冲中进行访问。 由此,每一个读写请求都可能产生三种不同的状态,导致了访存延迟上的差 异。这三种状态分别为:一、行命中,这种情况下,直接进行读写即可,延迟最 短;二、行关闭,这种情况下,需要先将该行数据读入行缓冲,再进行读写;三、 行冲突,这种情况下,需要先将行缓冲中的数据写回对应的行,再将新地址的数 据读入行缓冲,再进行读写,延迟最长。 bank 级并行度 SDRAM 芯片包含的多个 bank 体是相互独立的,它们可以同时执行不同的 操作,比如,对 bank 0 激活的同时,可以对 bank 1 发出预充电操作,因此,访 问不同 bank 的多个操作可以并行执行。bank 级并行度可以降低冲突命令的等待 时间,容忍单个 bank 访问的延迟。 利用内存的这两个特性,可以在内存控制器上对并发访问进行调度,尽可能 降低读写访问的平均延迟,提高内存的有效带宽。内存控制器可以对十几甚至几 十个访存请求进行调度,有效并发的访存请求数越多,可用于调度的空间就越大, 可能得到的访存性能就更优。 1.2 内存接口 内存接口用于连接处理器和主存储器。 前面章节我们介绍了目前使用的主存储器——DRAM 芯片以及内存条、内 存控制器的一些概念。内存控制器和内存芯片(或者说内存条)的接口就是内存 总线。内存总线规范是由 JEDEC(Joint Electron Device Engineering Council)组 织制定的。内存总线规范包含了一般总线的三个层级:机械层、电气层和协议层。 在机械层,JEDEC 规定了内存芯片的封装方式、封装大小和引脚排布,内 3
龙芯中科技术有限公司 存条生产厂家可以据此设计内存条 PCB 板,可以使用不同 DRAM 厂家的芯片。 同时,JEDEC 也制订了内存条和计算机主板连接的规范,也就是内存插槽规范, 规定了内存条的引脚个数、排布和内存条的长度、厚度、机械形式。这样不同厂 家的内存条就可以在同一块主板上使用。图 1-2 是台式机使用的 DDR3 内存条 和对应的内存插槽的图片。DDR3 内存条使用双列直插式设计,每列分布了 120 个引脚,共 240 个引脚。中间的缺口不是位于内存条的正中心,目的是为了防止 将内存条反插。图 1-3 是台式机使用的 DDR2 内存条的图片。DDR3 内存条和 DDR2 内存条的长度大小相同,但内存条上的缺口位置是不同的,以防止 DDR2 和 DDR3 内存条之间的误插。 图 1-2 台式机的 DDR3 内存条和内存插槽 图 1-3 台式机脑的 DDR2 内存条 在电气层,JEDEC 组织规定了 DRAM 芯片的电气特性。例如,DDR2 内存 使用 1.8V 电压,而 DDR3 内存使用 1.5V 电压。另外,规范还会规定输入电压高 低电平的标准、信号斜率、时钟抖动的范围等信号电气特性。 在协议层,JEDEC 组织规定了 DRAM 芯片的操作时序。协议规定了 DRAM 芯片的上电和初始化过程,DRAM 工作的几种状态,状态之间的转换,以及低 功耗控制等内容。比如,DRAM 初始化完成后,进入空闲态,通过激活(activate) 命令进入打开某一行激活态,只有在激活态,才可以读写 DRAM 的数据,单纯 的读写操作后,DRAM 仍会进入激活态,等待下一次读写。如果想要读写其他 行,需要首先发送预充(precharge)命令将 DRAM 转回空闲态,然后再发送激 活命令。这些命令不是在任意时刻都可以发送的,需要满足协议规定的时序要求。 4
分享到:
收藏