Dec
11
[Background]
- 几乎所有的嵌入式系统都需要用外部存储器
- 最终的设计不可能用Demo Board,肯定都要重新画PCB
- DDR Memory Controller是一个挺复杂的系统,移植起来比较麻烦
[Question]
怎样移植现有设计的Memroy Controller到定制PCB板上?
[Solution]
- 此文针对EDK 10.1SP3 MPMC 4.03 MIG2.3
- MPMC提供两种PHY - MIG PHY 和 STATIC PHY。 MIG PHY可以达到比较高的 performance,移植也相对困难。STATIC PHY使用DCM PHASE SHIFT功能来调校时序,调校一次后可以把数值固定下来以后就不必调了,缺点是速度只能达到100-125MHz。
- Port的经验主要参考MPMC Datasheet P43 Memory Interface Generator (MIG) Based PHY Interface 和 P47 Converting MIG UCF to MPMCv.4 UCF,另外AR29221虽然AR是针对Spartan3的,但是Virtex系列也很有参考意义。
- 使用MIG PHY需要遵循特定的管脚分配规则。 - 参考UG086 - Section VI. Memory Implementation Guidelines
- 自己调整过的管脚分配需要在MIG中Verify。
- MPMC提供perl语言将MIG的UCF根据MHS中MPMC的引脚名字转换成相应的UCF, Virtex-5 DDR2 PHY需要设置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS
- 调整MPMC的Parameter,比如C_MEM_PARTNO等
- MIG PHY不需要任何软件设置,自动会做Calibration。如果过不了Memory Test或读写不正常,那么首先把MPMC_InitDone引到LED上观察初始化有没有完成。
- 如果MIG PHY初始化不能自动完成,可以参考UG086 Section V. DDR2 Debug Guide的debug flow来查找关键信号,比如calib_start, calib_done等。或者试用STATIC PHY
- STATIC PHY的用法在MPMC datasheet中有详细介绍。主要步骤为:
0. 在UCF中定义好管脚位置。
1. MPMC PARAMETER C_USE_STATIC_PHY = 1
2. 取消MPMC_Clk_200MHz PORT的连接
3. 根据Datasheet中Static PHY Implementation --> DCM Phase Adjust Port的说明修改MHS文件,添加一个DCM,连接 MPMC_DCM_PSINCDEC,MPMC_Clk0, MPMC_Clk_Mem等信号并调整LOCKED信号。
4. 将MPMC_CTRL Bus连接到系统的PLB46总线上。这个总线用于控制Static PHY的控制寄存器。
5. 根据Datasheet中Static PHY Implementation --> Timing Constraints 在UCF中添加时序约束。
6. 添加一个SW Application,内容为\sw\XilinxProcessorIPLib\drivers\mpmc_v2_00_a\examples\mpmc_calibration_example.c,放在BRAM中,所需空间大约为10K。
7. 这个calibration example会自动找到所需设置的phase shift值,记下来并填在DCM的C_PHASE_SHIFT参数中。
- 如果还是有问题,仔细查看ngdbuild/map/par report的warning,从中查找信息。通常static phy都是可以用的。
- 我犯过的一个错误:在UCF编辑管脚的时候,把CAS管脚写成了CS管脚,结果有一个CS管脚的定义被overwrite,怎么都不能完成calibrate,XMD mrd读取同一个地址的的数据永远都不一样。通过检查ngdbuild report发现这个warning,于是通过static phy,也通过了MIG PHY。
- 另一个错误:V5 DDR2 Place报错
是由于没有设置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS引起的。
- MIG太复杂,通常来讲不推荐自己改代码。因此感觉就算查了MIG PHY的关键信号帮助也不太大。绝望时仔细查查Answer Record,试一试Static PHY。
[参考资料]
- MPMC Datasheet
- UG086 - MIG Datasheet
- AR #29221 - 10.1 EDK, MPMC v4.00a - Spartan-3 MIG PHY Usage Guidelines
- 几乎所有的嵌入式系统都需要用外部存储器
- 最终的设计不可能用Demo Board,肯定都要重新画PCB
- DDR Memory Controller是一个挺复杂的系统,移植起来比较麻烦
[Question]
怎样移植现有设计的Memroy Controller到定制PCB板上?
[Solution]
- 此文针对EDK 10.1SP3 MPMC 4.03 MIG2.3
- MPMC提供两种PHY - MIG PHY 和 STATIC PHY。 MIG PHY可以达到比较高的 performance,移植也相对困难。STATIC PHY使用DCM PHASE SHIFT功能来调校时序,调校一次后可以把数值固定下来以后就不必调了,缺点是速度只能达到100-125MHz。
- Port的经验主要参考MPMC Datasheet P43 Memory Interface Generator (MIG) Based PHY Interface 和 P47 Converting MIG UCF to MPMCv.4 UCF,另外AR29221虽然AR是针对Spartan3的,但是Virtex系列也很有参考意义。
- 使用MIG PHY需要遵循特定的管脚分配规则。 - 参考UG086 - Section VI. Memory Implementation Guidelines
- 自己调整过的管脚分配需要在MIG中Verify。
- MPMC提供perl语言将MIG的UCF根据MHS中MPMC的引脚名字转换成相应的UCF, Virtex-5 DDR2 PHY需要设置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS
- 调整MPMC的Parameter,比如C_MEM_PARTNO等
- MIG PHY不需要任何软件设置,自动会做Calibration。如果过不了Memory Test或读写不正常,那么首先把MPMC_InitDone引到LED上观察初始化有没有完成。
- 如果MIG PHY初始化不能自动完成,可以参考UG086 Section V. DDR2 Debug Guide的debug flow来查找关键信号,比如calib_start, calib_done等。或者试用STATIC PHY
- STATIC PHY的用法在MPMC datasheet中有详细介绍。主要步骤为:
0. 在UCF中定义好管脚位置。
1. MPMC PARAMETER C_USE_STATIC_PHY = 1
2. 取消MPMC_Clk_200MHz PORT的连接
3. 根据Datasheet中Static PHY Implementation --> DCM Phase Adjust Port的说明修改MHS文件,添加一个DCM,连接 MPMC_DCM_PSINCDEC,MPMC_Clk0, MPMC_Clk_Mem等信号并调整LOCKED信号。
4. 将MPMC_CTRL Bus连接到系统的PLB46总线上。这个总线用于控制Static PHY的控制寄存器。
5. 根据Datasheet中Static PHY Implementation --> Timing Constraints 在UCF中添加时序约束。
6. 添加一个SW Application,内容为
7. 这个calibration example会自动找到所需设置的phase shift值,记下来并填在DCM的C_PHASE_SHIFT参数中。
- 如果还是有问题,仔细查看ngdbuild/map/par report的warning,从中查找信息。通常static phy都是可以用的。
- 我犯过的一个错误:在UCF编辑管脚的时候,把CAS管脚写成了CS管脚,结果有一个CS管脚的定义被overwrite,怎么都不能完成calibrate,XMD mrd读取同一个地址的的数据永远都不一样。通过检查ngdbuild report发现这个warning,于是通过static phy,也通过了MIG PHY。
- 另一个错误:V5 DDR2 Place报错
引用
Place:292 - The components u_system/mpmc_0/mpmc_0/mpmc_core_0/gen_v5_ddr2_phy.mpmc_phy_if_0/u_phy_i
o_0/gen_dq[28].u_iob_dq/stg3b_out_fall and
u_system/mpmc_0/mpmc_0/mpmc_core_0/gen_v5_ddr2_phy.mpmc_phy_if_0/u_phy_io_0/gen_dq[29].u_iob_dq/stg3b_out_fall seem to be placed / locked to the same site SLICE_X0Y138
o_0/gen_dq[28].u_iob_dq/stg3b_out_fall and
u_system/mpmc_0/mpmc_0/mpmc_core_0/gen_v5_ddr2_phy.mpmc_phy_if_0/u_phy_io_0/gen_dq[29].u_iob_dq/stg3b_out_fall seem to be placed / locked to the same site SLICE_X0Y138
是由于没有设置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS引起的。
- MIG太复杂,通常来讲不推荐自己改代码。因此感觉就算查了MIG PHY的关键信号帮助也不太大。绝望时仔细查查Answer Record,试一试Static PHY。
[参考资料]
- MPMC Datasheet
- UG086 - MIG Datasheet
- AR #29221 - 10.1 EDK, MPMC v4.00a - Spartan-3 MIG PHY Usage Guidelines
[孤陋寡闻]论MathStar和Ambric的倒下
说说Timing这回事儿





希望博主能提供点帮助,多谢啦!
Starting the Calibration Example
ERROR: Could not calibrate.
我想请教博主几个问题行吗?
1、MPMC_CTRL分配多大的地址啊?
2、我用的V4的芯片,然后再软件mpmc_calibration_example.c中有什么需要改的吗?我看程序内有:
#define MPMC_MIN_TAPS -90
#define MPMC_MAX_TAPS 90
#define MPMC_EDGE_TAPS 20
#define MPMC_NUMBER_TAPS MPMC_MAX_TAPS - MPMC_MIN_TAPS
提示需要根据情况改变,请问哪儿可以查到具体用什么数值?这个会对对结果有影响吗?
我在ML507上测试DDR2(因为重装了电脑,用以前跑通的程序来测试下软件)出现这样的错误:
首先,内存测试通不过;
然后,我利用相位校准程序算最佳相位,但是也没通过,终端输出这样的结果
Starting the Calibration Example
ERROR: Could not calibrate.
我想问下,这个错误该怎么解决?
嗯,谢谢啊!
另外,对MPMC中那些参数都不是很懂,我的邮箱zhanxn@gmail.com
QQ:79482298,如果有好的建议和方法,请联系我一下,呵呵,谢谢啊
另外,以后也会经常关注你的主页的,感觉内容蛮丰富的
XUPV2P的板子上的DDR布线好像和MPMC要求的不一样,可能比较难配置。
关于MPMC参数,还是要看datasheet。MPMC 的 Datasheet 很详细。