| FORUM

FEDEVEL
Platform forum

picosecond to Mil conversion.

Paul van Avesaath , 09-19-2017, 01:15 AM
Hi Guys,

I am working on an awsome project with a XCVUP13P and 16 DDR4 memories over 4 controllers.
but I am struggling with one part of it.

I get a min and max delay in picosecond from vivado, and I need to figure out how to compensate that into my layout with altium. but since I can give internal wirebond delay into altium but only in mil I have to re calaculate that.

I know the Tpd that I am working with ( in my case 0.163 ps/mil megtron 6G) so calculating the delay should be easy right..
Maybe I am over thinking this but here is what I am doing.

Vivado gives a pin file with all the delays in a min/max configuration.
So I take the average of those numbers. And convert them to mil. and then need to do some correction due to "." to "," conversion.

but to what is it referenced?
Since I am working with a 4x16 bits DDR4 controller I am referencing it per byte group of 16 bits.
Basically saying I am matching within 16 bits and the respective Data masks and strobe pairs..
Pin NumberSiteSite TypeMin Trace Delay (ps)Max Trace Delay (ps)AVG Trace Delay (ps)Correction value (ps)Trace Delay (Diff per bank) (ps)Trace length compensation (Mil)Trace length compensation (mm)Signal NameSignal ID
AJ27IOB_X0Y156IO_L1P_T0L_N0_DBC_63107.354108.433107893,50107,8958,89361,269,18ddr4_a_dm_n[7]DATA
AH34IOB_X0Y169IO_L7P_T1L_N0_QBC_AD13P_63165.952167.620166786,00166,790,000,000,00ddr4_a_dm_n[6]DATA
AH28IOB_X0Y162IO_L4P_T0U_N6_DBC_AD7P_63110.451111.561111006,00111,0155,78342,178,69ddr4_a_dqs_t[7]DATA
AH29IOB_X0Y163IO_L4N_T0U_N7_DBC_AD7N_63110.499111.610111054,50111,0555,73341,878,68ddr4_a_dqs_c[7]DATA
AH31IOB_X0Y175IO_L10P_T1U_N6_QBC_AD4P_63139.173140.571139872,00139,8726,91165,104,19ddr4_a_dqs_t[6]DATA
AH32IOB_X0Y176IO_L10N_T1U_N7_QBC_AD4N_63139.343140.743140043,00140,0426,74164,054,17ddr4_a_dqs_c[6]DATA
AK31IOB_X0Y167IO_L6N_T0U_N11_AD6N_63133.437134.778134107,50134,1132,68200,465,09ddr4_a_dq[63]DATA
AJ31IOB_X0Y166IO_L6P_T0U_N10_AD6P_63130.151131.459130805,00130,8135,98220,725,61ddr4_a_dq[62]DATA
AG30IOB_X0Y165IO_L5N_T0U_N9_AD14N_63127.892129.177128534,50128,5338,25234,645,96ddr4_a_dq[61]DATA
AG29IOB_X0Y164IO_L5P_T0U_N8_AD14P_63126.953128.229127591,00127,5939,20240,436,11ddr4_a_dq[60]DATA
AJ30IOB_X0Y161IO_L3N_T0L_N5_AD15N_63120.500121.711121105,50121,1145,68280,217,12ddr4_a_dq[59]DATA
AJ29IOB_X0Y160IO_L3P_T0L_N4_AD15P_63119.778120.982120380,00120,3846,41284,667,23ddr4_a_dq[58]DATA
AK28IOB_X0Y159IO_L2N_T0L_N3_63106.290107.359106824,50106,8259,96367,829,34ddr4_a_dq[57]DATA
AJ28IOB_X0Y158IO_L2P_T0L_N2_63105.926106.991106458,50106,4660,33370,069,40ddr4_a_dq[56]DATA
AF33IOB_X0Y180IO_L12N_T1U_N11_GC_63143.001144.438143719,50143,7223,07141,493,59ddr4_a_dq[55]DATA
AF32IOB_X0Y179IO_L12P_T1U_N10_GC_63142.763144.198143480,50143,4823,31142,963,63ddr4_a_dq[54]DATA
AG32IOB_X0Y178IO_L11N_T1U_N9_GC_63141.359142.780142069,50142,0724,72151,623,85ddr4_a_dq[53]DATA
AG31IOB_X0Y177IO_L11P_T1U_N8_GC_63141.364142.785142074,50142,0724,71151,593,85ddr4_a_dq[52]DATA
AG34IOB_X0Y174IO_L9N_T1L_N5_AD12N_63159.278160.879160078,50160,086,7141,151,05ddr4_a_dq[51]DATA
AF34IOB_X0Y173IO_L9P_T1L_N4_AD12P_63163.226164.867164046,50164,052,7416,800,43ddr4_a_dq[50]DATA
AJ33IOB_X0Y172IO_L8N_T1L_N3_AD5N_63143.138144.577143857,50143,8622,93140,653,57ddr4_a_dq[49]DATA
AH33IOB_X0Y171IO_L8P_T1L_N2_AD5P_63144.555146.007145281,00145,2821,51131,923,35ddr4_a_dq[48]DATA
I am basing the calculation on the longest line within that group. And calculating the lengths needed to compensate to that length. hence getting the max values and subtracting the value of the delay. so in the end 1 line does not have to be matched and all others will be matched according to that group.



Does this makes sense?

The numbers of compensation length feel so big to me, that’s why I also have put in the mm to get a feeling of length and it seems ok, but still very long almost 10mm and I have no reference to see if this correct..
Anyway the next step would be to put these numbers into the Altium and figure out if Xsignals can help me with machting

let me know if I am approaching this in the correct manner.

Many Thanks
Paul
robertferanec , 09-19-2017, 05:20 PM
What is "XCVUP13P", I can not find any info about it? If it's an FPGA, you should be able to run a calibration or something and you may be able to adjust the delay in your chip (firmware).
Paul van Avesaath , 09-20-2017, 12:05 AM
Hi Robert, sorry, there was a typo. Its the xilinx ultrascale plus xcvu13p..

Wat i am trying to do is to get a better understanding if the calculation is correct and if it is normal to compensate thise large numbers. 10mm looks very long to me..

Best regards
Paul
robertferanec , 09-20-2017, 05:59 PM
Double check how other do it.

I was working on a project based on Altera chip with 4 memory slots and we have done the length matching the standard way. I am not 100% sure, but I believe, they then had some calibration firmware which they run on the physical board, and get values which they used to adjust their own firmware.

It may be something similar with XILINX, this is what I found as an example (https://www.xilinx.com/support/docum...cale-mis.pdf):

"Physical Layer – The physical layer provides a high-speed interface to the SDRAM. This layer includes the hard blocks inside the FPGA and the soft blocks calibration logic necessary to ensure optimal timing of the hard blocks interfacing to the SDRAM. "

.. and then it continues ...
"Calibration – The calibration modules provide a complete method to set all delays in the hard blocks and soft IP to work with the memory interface. Each bit is individually trained and then combined in order to ensure optimal interface performance. Results of the calibration process will be available through the Xilinx debug tools. After completion of calibration, the PHY layer presents raw interface to the SDRAM."


Paul van Avesaath , 09-20-2017, 11:56 PM
Hi Robert,

,,Double check how other do it. ''

thats what I am trying to do here


the thing is, I tried to look at the defkits, and finaly managed to get some orcad files into altium. then the confusion started. it did not make sense!
i recalculated the matching they did on the VCU190 and it did not match. not in a good way. that lead me to contact xilinx themselves, and the answer was that you should not trust the matching on the defkits, since they are not likely to be 100% correct.

But running ddr4 at 2400 Mhz, makes me a bit nervous. especially with this many in a 64 bits config (and that 4 times) . and it has to run at max speed for this project.
(It is kind of funny thinking about it..running transceivers @ 25 Gbps don't scare me at all)

this protoype will cost a lot of pennies, so i would prefer not waisting a pretty expensive FPGA and PCB.

yes there will be a compensation inside of the chips / tooling to get optimum preformance but still all documentation says you have to take internal wirebonds into account. so here I am doing that and there is no real guide of how to do it. it is going to be simulated, but does the simulation (post layout) take the timing of the internal wirebonds? or is it just pin to pin.? I am having a meeting about this today so hope to have a answer soon...

now i get the option in the schematic symbol to add the lengths of internal wirebond to the pins, and that is great. but the fun doesn't stop there.. how to match this..
I have broken down the 16 bits config to 2x8 to ease routing, so I can match the 16 bits on 2 layers making it possible. doing 16 bits and dqs / dm on one layer isn't even possible.
grouping signals in a control/ byte groups. and then i should match this over 64 bits.. thats sounds like impossible right?

I am at pre layout stage here, just figuring out on what layers to use... and still have a lot to do (see screenshot)

so any advice or experience is welcome.

in the end I will figure it out.. I always do, but having some help along the way is always nice!

anyway... Thanks for helping so far!


Best regards,
Paul..
robertferanec , 09-22-2017, 01:05 PM
that lead me to contact xilinx themselves, and the answer was that you should not trust the matching on the defkits, since they are not likely to be 100% correct.
- I love this kind of feedback. Some of my clients have same experience with other manufacturers too

you have to take internal wirebonds into account.
- I would expect this internal wirebonds to be able to be compensated also in the delay registers, but that is only my thinking. Why I am thinking this? After you compile the FPGA design, I would be very surprised if all the signals are "delay matched" ... so it doesn't really matter if delay is due FPGA implementation or if it is in wirebonds.

But as I said, that is only what I would expect .. I have never tried that and I may be wrong.

I am curious what you will find out, please let me know.
Paul van Avesaath , 09-25-2017, 02:37 AM
Hi Robert,

I understand your reasoning, but when running the DDR4 @ 2400 MHz (or 1200 clk) the margins are within the 5 ps. this means (in my opninion) that getting the PCB layout as close to perfect will help a lot giving you a larger margin for the FPGA to work with. anyway, I am working through this one interface first and having it simulated. I will have awnsers soon I hope they will be positive!.

now to get the Xsignals working ont his design and start routing..

keep you posted!
Paul van Avesaath , 09-26-2017, 01:15 AM
update number one!

after introducing Xsignals to the settings, things became much more clear. I do not have to group the signals like i did in the excel file. altium does this for you, so just calculating the the picoseconds to mill is good enough and putting them into the schematic symbol. which kind of makes sense, because otherwise changing the pin file in vivado would mess up all calaculations.

we are learning every day!

xsignals it self is pretty handy but still a lot of headaches.

keep you posted!
robertferanec , 09-26-2017, 09:44 AM
If you are using xSignals, maybe this will help you: https://www.fedevel.com/welldoneblog...useful-things/
Paul van Avesaath , 09-26-2017, 09:49 AM
Whatching it over and over again
Paul van Avesaath , 09-28-2017, 02:29 AM
Hi Robert,

since you are the expert in Xsignals. I have the following issue. I have swapped a few bits in one byte cluster, but by doing this my xsignals have gone crazy.. it looks like xsignals does not recognize the new definition. but I cant find how to fix it.

now it says Broken and when you look at the primitives attached you can see the swap I made (manually by moving the netnames in the schematic) but it does not update the link..

I am hesitant to re run the xsignals since I already have routed the flyby of the controller. and do not want to screw things up.

any suggestions?

Paul van Avesaath , 09-28-2017, 11:38 PM
well figured it out again, just manually re add the xsignals will fix the broken link.. I dont know if pinswapping is allowed within xsignals, but that still a manual thing for me..
but hey it works... i am a Happy panda again!
robertferanec , 09-29-2017, 06:41 PM
yes, if you swap pins, you may really need to adjust the xSignal definitions.
Paul van Avesaath , 10-02-2017, 03:24 AM
Hi Guys,

ok added the new " updated" signals and got it to work.. no more broken links.
it is going for simulation this week..

just one question.. I red that the red signals in the xsignal panel, just mean that they are the longest signals. not that there is anywthing wrong with the,, e.g. a maximum length rule that is telling me that they are too long right?

robertferanec , 10-06-2017, 03:56 PM
Honestly, I do not know what the red means But I know they all should be white when everything is ok
Paul van Avesaath , 10-06-2017, 04:05 PM
Yes indeed. In the end it was just a rule setting. First bank is now in si check so will post hopefully some good news next week!
Paul van Avesaath , 10-20-2017, 02:17 AM
finaly update on this thread. all was very well no errors.. a first time right design.

to conclude you do not need to make it more complicated then it is.
just calaculate the de the picoseconds to mills (depending on your material) and implement the lenghts.
Xsignals will take care of the rest!

just finishing up on the other 4 banks so the final SI / Timing analasys will be done after that!

just one more thing.. if you are using Xsignals. i find it easier to create xsignals my self instead of the wizard, it seems not to implement it all that well and it saves a lot of headaches to find the corerct way of naming it.. if you do it yourself you will have full control.
robertferanec , 10-20-2017, 01:46 PM
Thank you very much Paul for updates
Use our interactive Discord forum to reply or ask new questions.
Discord invite
Discord forum link (after invitation)

Didn't find what you were looking for?