Hello ,
We Have an urgent need for design guidance (see below)
Background…
We are experiencing DDR3 read back issues on our first spin PCB design which has a C6655 DSP and two Micron MT41K128M16JT-125:K 2Gb DDR3 (16 M x 16 x 8) memories operating at 1033MHz. We are have been experiencing single bit errors on some of the boards (the quantity of errors vary from a few thousand to only a few when repeatedly reading back 1MByte of data previously written). The bit location of the error(s) change somewhat but there are certain bits which have a much higher probability of error. Other boards repeatedly have no read back errors issue. There are no indications so far with issues writing to memory reliably. We tried slowing the DDR clock from 1033 to 825 and still had issues although there is some reduction in the number of errors.
Up until yesterday we have been using the “ Partial Automatic Leveling” mode which is the same method used on the EVM for the 6657 and seems to be the most common method discussed on the TI E to E. Yesterday, we changed the leveling method used to “ Full Automatic &Incremental “ and followed the details exactly as described in sprugv8c.pdf example 22. With this change, all of the PCBs are working 100 % of the time ( no readback errors) . There are excerpts from the GEL for the DDR initialization for both leveling cases included in attachment.
I believe we have followed all of the schematic guidelines, all of the registers are set using the two TI excel files DDR3 Register Calc v4.xlsx and DDR3 PHY Calc v10.xls to obtain the proper register (see attached) settings. We have followed the DDR initializing in the same manner as described in sprugv8c.pdf and the EVM GEL.
We believed we were following all of the TI PCB layout guidelines but now see that some aspects of the net class routing rules specified in section 4 of sprabi1a.pdf are being exceeded. Namely the following;
- All address and command net classes shall be skew matched to respective clock lines to within CLK <=20 mils
- Total length from DSP to each SDRAM for all respective DQ and DM signals within a byte lane should be skew matched to the DQS line <=10.00 mils DQS to DQS# skew shall be <= 10.00 mils
Attached in the file Signal Routing Lengths.xls it has routing length of each net as well as the simulated propagation delays.
We are correcting the net class routing to meet the class limits in the production design but want to have confidence that the read back problem we are experiencing will be remedied with the layout changes and there is not some other reason for our issue. Ideally we would like to use the more common “ Partial Automatic Leveling” method.
OK , now for some questions…
1) Is there anything you can see we are doing incorrectly or should be checking into?
2) To the degree we are exceeding the net class routing rule limits, would it likely explain why we have read back errors when using “ Partial Automatic Leveling “ but none with “ Full Automatic &Incremental’ ?
3) Should we being using routing rules for net classes based on absolute length as described above or use propagation time from modeling ? The results are likely to be mutually exclusive.
4) There is very little information given on the Full Automatic &Incremental leveling method and there are several caveats listed in sprugv8c.pdf and the silicon errata.
- Is using Full Automatic &Incremental a viable short-term and /or long –term solution ?
- With the values using in example 22 of sprugv8c.pdf . How often is memory unavailable due to the incremental leveling operations ? Is leveling occurring every 10ms and does the leveling process take 1 ms each time? Any updates to recommended setup of the associated registers? Is there any more documentation on Full Automatic & Incremental leveling ? What is difference between Read eye and read gate leveling ?
- Could we turn-on Full Automatic & Incremental leveling after DDR init and then switch –off ? Will it retain the optimal values for read-eye and read gate timing ? The procedure to turn-off Full Automatic & Incremental leveling is not provided . I tried code snippet shown below and it seemed to work ( no errors in read back when I came back many hours later to reread memory ) but I don’t know if Automatic &Incremental leveling is still active.
DDR_RDWR_LVL_RMP_CTRL = 0x80000000; //enable full leveling
DDR_RDWR_LVL_CTRL = 0x80000000; //Trigger full leveling
Delay_milli_seconds(10ms);
// Turn on Full Automatic & Incremental Leveling per SPRABL2A example 20
DDR_RDWR_LVL_RMP_WIN = 0x00000502;
DDR_RDWR_LVL_RMP_CTRL = 0x80030300;
DDR_RDWR_LVL_CTRL = 0xFF090900;
Delay_milli_seconds(500); // How long to wait before disabling ?
// turn off Full Automatic & Incremental Leveling
//turn off inc. DQS gate and read eye training , don't retrigger.
DDR_RDWR_LVL_CTRL = 0x00000000;
//turn off inc DQS gate and read eye training
DDR_RDWR_LVL_RMP_CTRL = 0x80000000;
DDR_RDWR_LVL_RMP_WIN = 0x00000000;
Thanks so much for your assistance in the urgent matter.
Larry