FPGA Notes

Port MPMC to Custom Board

0
阅读(47971)

[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报错

引用
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

是由于没有设置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS引起的。

- MIG太复杂,通常来讲不推荐自己改代码。因此感觉就算查了MIG PHY的关键信号帮助也不太大。绝望时仔细查查Answer Record,试一试Static PHY。