11-03-2020 11:20 AM
Hi, I'm trying to debug my DDR4 on a custom board. The common error I found on the forums that was similar to mine was the psu_init.tcl script hanging with no UART output. I was able to get the PMU and FSBL loaded successfully and have been probing the DDR PHY status registers but I need help knowing what the next step should be.
My DDR PHY (0xfd080030) returns (80C000FF <Hex Integer>).
I'm not sure what the difference between hex integer and hex is supposed to mean but I assumed it is supposed to be 0x80C000FF which would mean that my DDR is getting a DQS Gate Training Error and a Write Leveling Error.
Using SDK 2018.3, zcu2eg, custom board with ddr4 (MT40A512M16LY-062E IT:E) and I attached my ddr settings from vivado.
Any suggestions? Thanks!
11-09-2020 02:22 PM
Hi @patmcn
As you know, DRAM controller for DDR3/DDR4 has write leveling and read leveling function to adjust flight time (time distance).
"Write leveling" adjusts skew (phase) between CK and DQS.
However, dram controller has a capability (limitation) of this skew. It depends on length between CK and DQS, clock frequency and capability of controller.
So, I mentioned before as question.
Hope it helps.
Best regards,
11-03-2020 03:04 PM
Hi @patmcn
Did you make sure your DDR4 pattern on PCB ? Especially, relationship between CK and DQS ?
Also, did you read PCB guideline for DDR4, too ?
If no, would you try them first ?
Best regards,
11-04-2020 05:09 AM
I will double check those but yeah, I made sure to follow the ddr routing guidelines.
11-04-2020 12:01 PM
This post seems to be closest to my issue:
https://forums.xilinx.com/t5/Memory-Interfaces-and-NoC/DDR4-write-leveling-error/m-p/1169978#M18294
11-04-2020 12:13 PM
This was also helpful to find to slow down the ddr. Posting link for future refernce. Checking if it might help my design now.
11-05-2020 09:50 AM
This link was very useful in breaking down all of the DDR parameters I wish was clearer with Xilinx documentation:
11-05-2020 10:06 AM
11-09-2020 06:57 AM - edited 11-09-2020 06:58 AM
I've been able to get my 0xFD080030 register to read out 0x80000FFF. That would indicate that the DDR4 has initialized correctly, right?
I was able to adjust multiple ddr settings between using the ddr-1600 and ddr-2400 by taking the default clock (800MHz and 1200MHz, respectively) and reducing the clock speed 200 MHz for each. Now I can at least see that the FSBL is not hanging and I'm getting info out of the UART.
Since I was able to see it configure by reducing both configurations clock speed, that would seem to indicate to me that I have a CK length issue. Anyone have any thoughts? @watari maybe this is what you were getting at?
11-09-2020 02:22 PM
Hi @patmcn
As you know, DRAM controller for DDR3/DDR4 has write leveling and read leveling function to adjust flight time (time distance).
"Write leveling" adjusts skew (phase) between CK and DQS.
However, dram controller has a capability (limitation) of this skew. It depends on length between CK and DQS, clock frequency and capability of controller.
So, I mentioned before as question.
Hope it helps.
Best regards,