本帖最后由 agdhun 于 2019-10-3 19:17 编辑
测试软件平台:Vivado/SDK2019.1 硬件平台:MYD-CZU3EG 打开Vivado,建立如下的BD工程:
PL部分设计主要分为几块:AXIDMA、Bram Ctrl、Bram生成器和复位同步和很常见的AXI Interconnect IP,PL在设计时要引入PS的大黑盒子:
这就是PS的配置IP,使用它配置PS,最终会生成一个适用于PS运行的C/Tcl文件,用于初始化PS,这就是这个IP的作用之一,另一个作用就是提供显式接口来控制PL端的综合、实现。 PS IP支持预置TCL脚本配置,也可以手动选择控制,支持配置完将当前配置保存为tcl,以便于下一次快捷配置;这个工程里配置l使用一组AXI HPM FPD(High speed Master Full-Power Domain DMA)总线和AXI HPC(High Speed Control) FPD和DDR一组,QSPI。 配置完成后可以Generate Outputs,如果不需要对PL端编程,可以直接到出HDF文件到SDK。 下一步,转移到SDK,可以通过Vivado内的Launch SDK启动,也可以手动在点击SDK程序;在SDK内新建一个工程,工程模板选择Zynq MP DRAM Test 这是xilinx的一份专门用于ZynqMP上PS端DDR测试的代码,它包括速度测试、眼图测试等, 第一步本程序会读取DDR的配置信息,然后初始化相应的变量, XMt_ GetDdrConfigParams
读取DDR总线宽度、DDR的Rank信息(Rank的详细介绍请百度,我并不是很懂这个)、DDR的ECC功能是否启用、DDR的输入时钟源选择和DDR输入分频比(根据这个可以计算出当前DDR的工作频率);
第二步就是选择测试项,在测试之前需要根据ECC来确定是否启用D-Cache,如果启用了EC则需要禁用D-Cache。测试项: 一、内存测试 内存测试提供了16M到8GB的定容量测试和自定义容量测试,测试步骤是相同的, 第一步接受需要测试的大小; 第二步生成测试数据 第三步填入测试数据到DDR 第四步设置D-Cache使用的区域范围(如果D-cache使用) 第五步读取DDR数据并与测试数据对比,确定有没有出现内存错误、Lane错误 第六步打印测试结果并通过串口发出
测试代码共提供了15种测试模式,各种测试模式生成不同类别随机数进行测试;同时它也提供了计算总耗时功能,此记时与ARM主频有很大的关系,时间仅可以粗略估算,具体测试DDR速度还需要用DMA进行测试。粗略估算为(16*2^index/time*2)
16MB容量测试
4GB容量测试 二、眼图测试 眼图测试主要提供了读写眼图测试和2-D读写眼图测试及一些眼图参数控制,例如Rank和测试起始地址, 第一步备份当前Sync_int和Serror异常的设置 第二步修改当前Sync_int和Serror异常调用的函数以适应于眼图测量的处理 第三步清除眼图相关寄存器、禁用DF(一维眼图读眼图没有进行这个操作)I、VT compensation;备份眼图中心值 第四步测量眼图左边沿右边沿(实质是修改时序参数,对DDR重新进行读写比对测试,获取错误结果)(二维的对Vref也进行扫描) 1-D模式有一个Position为基准,线性控制Qsd、Qnsd(读)和Wdq、Wdqsl,然后进行特定范围的DDR读写测试,检查出DDR读写没问题胡Position区间;而2-D模式再加上一个Vref胡控制,2-D模式提供胡打印信息不多,可以稍微修改程序实现Ibert眼图的图形。 第五步恢复眼图中心值、启用DFI、恢复Sync_int和Serror异常的设置; 一位眼图是基于位置列出每个lane存在错误数据个数;
1-D读测试结果 二维眼图是基于Vref找出每个lane存在读写问题区间
三、控制选项 这个提供了切换DDR测试使用的总线位宽(间接控制DDR的Lane数,只支持物理总线位宽为64)、D-Cache的启用与禁用和调试信息开关(Verbose)。
|