Max10 Soft LVDS bit slip shouldn't be needed for odd serialization factors. How to shift bits with external pll mode using nothing but compile time phase adjustments?
Serialized bit phase alignment is deterministic for odd LVDS serialization factors as used by Channel Link interfaces.. In gate level simulation using Modelsim, I get properly phase aligned bits out of my LVDS receiver with external PLLs such that, for example, bit 20 into the testbench's LVDS transmitter, comes out on bit 20 of the simulated receiver. However, on hardware, a distinctive sync signal which should come out on bit 20 is actually shifted down to bit 18. In a debug attempt I re-instantiated the Soft LVDS Receiver with the bit slip (data_align) input active and routed it to some debug switches. I find that I can successfully shift bit 18 back to bit 20 by pulsing data_align enough times. However, my system does not support sending a training pattern and automatically pulsing data_align the correct number of times as a closed loop solution. Because of the asymmetric nature of the received LVDS clock I shouldn't have to do this. FPD / channel link ICs do this all the time so I was hoping to manually adjust serialized phase alignment at compile time by properly adjusting the external PLL's three clocks which drive the LVDS IP. However, I cannot find any decent documentation how to compute those phase adjustments using the DDIO based Soft LVDS IP which is substantially different than the older altlvds megafunction still used in older devices. All the Max10 LVDS users guide says on the subject is to instantiate the Soft LVDS Receiver with internal PLL, then look at the timing settings after a compile to determine the correct settings for the external PLL clock outputs. Nothing I have tried seems to work. Help needed.