Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
17188 Discussions

Several problems encountered when we used LVDS interface on Cyclone 10 GX devices

MinzhiWang
Novice
1,650 Views

Hello guys, I have posted one question about LVDS in Programmable Devices group. Here is the link: https://community.intel.com/t5/Programmable-Devices/Why-do-i-get-this-error-when-I-use-lvds/m-p/1619233/emcs_t/S2h8ZW1haWx8dG9waWNfc3Vic2NyaXB0aW9ufExaN1lUQlI2VDRQNk5JfDE2MTkyMzN8U1VCU0NSSVBUSU9OU3xoSw#M97015 

 

We are keeping testing and debugging our hardware with Cyclone 10 GX devices now. So there are several other problems, which need you help.

1. The termination constrain selection:

    In our case, there are three different LVDS input signal types.

    1). ADC output differential pairs;

    2). LVDS interconnection between other FPGAs. On C10GX side is LVDS-RX.

    3). External pulse input pairs.

The above first two items, we know how to add on-chip termination, which is, for example of ADC, input_termination differential constrain as following.

set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D0_A
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D1_A
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D0_B
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D1_B
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D0_C
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D1_C
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D0_D
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_D1_D
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_DCO
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PartA_FCO

We try to add same constrain for above item 3), however, it will work incorrectly with this constrain. But it can work well when we add the following constrain to them:

set_instance_assignment -name XCVR_C10_RX_TERM_SEL R_R1 -to CBA_TRIGGER_3 -entity sep_cs_relay_top
set_instance_assignment -name XCVR_C10_RX_TERM_SEL R_R1 -to CBA_TRIGGER_2 -entity sep_cs_relay_top
#set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to CBA_TRIGGER_3 -entity sep_cs_relay_top
#set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to CBA_TRIGGER_2 -entity sep_cs_relay_top

This external pulse signal is LVDS differential standard, FPGA logic only uses it as simple trigger pulse, intead of high speed serial data transfer. Could anyone explain what's the reason for this?

 

2.  For ADC serial data deserialize, we implemented bit slip function. You knonw, above ADC has total 8 LVDS channels. So we generated 8 pulse signals and assigned them to each bit slip control input.  But the question is that only LSB was assigned succesfully. It means that only the LSB of bit slip control signals was active and it can control for all 8 LVDS channels alignment. Why only the LSB bit slip is required for this function?

slip脉冲赋值.jpg

slip过程.jpg

slip脉冲生成逻辑.jpg

 

  

 

Labels (1)
0 Kudos
12 Replies
MinzhiWang
Novice
1,441 Views

Could anyone can reply this?

0 Kudos
AqidAyman_Intel
Employee
1,329 Views

We sincerely apologize for the inconvenience caused by the delay in addressing your Forum queries. Due to an unexpected back-end issue in our system, your Forum cases, along with others, did not get through as intended. As a result, we have a backlog of cases that we are currently working through one by one.

Please be assured that we are doing everything we can to resolve this issue as quickly as possible. However, this process will take some time, and we kindly ask for your patience and understanding during this period. The cases will be attended by AE shortly.

We appreciate your patience and understanding, and we are committed to providing you with the best support possible.

Thank you for your understanding.


0 Kudos
AqidAyman_Intel
Employee
1,257 Views

Hello,


May I know are you still facing this issue?


Regards,

Aqid


0 Kudos
MinzhiWang
Novice
1,235 Views

Hello Aqid,

 

Yes, I'm still wondering about these two issues.

1. LVDS constrain for pulse signal input;

2. Only LSB bitslip control bit are active.

 

Thanks

0 Kudos
AqidAyman_Intel
Employee
1,189 Views

I’m not following the problem with bitslip.  When using DPA, you need to bitslip each channel independently and have a known pattern on each channel to detect the word boundary.  The DPA behavior can lead to any 2 channels being a bit apart in the word alignment.  When not using DPA, it is common to use the same bit slip pulse for all of the channels since every channel uses the same capture clock.  There must be reasonably low channel to channel skew in the PCB layout for it to work properly, but you should see data in every channel shift a bit when pulsing the bitslip port, assuming the single signal has been wired up to all of the ports correctly. 

 

I don’t know what we are supposed to be looking at in the signal tap capture.  You said there are 8 channels, but the data is grouped in 12 bit chunks and we don’t know the deserialization factor.  You need a description for what each signal represents, and I find it’s helpful when debugging the LVDS IP to have at least one of the groups expanded so you can see what is happening for each channel.  You should see the data shift in the direction of MSB to LSB one bit for each bitslip pulse:1.png

0 Kudos
MinzhiWang
Novice
1,176 Views

Hello Aqid,

 

Yes, the SignalTap doesn't show the detail of my issue of bitslip. Actually, my question is about the signal bus "rx_bitslip_ctrl(7..0)". As I indicated, this bus's every bit is assigned with same value from "bitslip_pulse". However, it only changed from "0000 0000" to "0000 0001", instead of "1111 1111". That's my primary question, why not all rx_bitslip_ctrl bus bits are assigned with bitslip_pulse?

 

Or, as you said, Quartus can automatically force only LSB to accept my assignment, and ignore other bits assignment?

0 Kudos
AqidAyman_Intel
Employee
1,189 Views

Let’s say you have a deserialization factor of 4 and the serial data is 1000. On the parallel side you want to see 1000, but let’s say you see 0100 instead. The first bitslip pulse will move the parallel data to 0010, then another pulse will get you 0001, and finally a 3rd pulse would get you to the desired 1000. 

 

That seems to be what we are seeing on the top row of the signal tap file. For a 12 bit sequence, they show 400, which would be 0100 0000 0000. A single bit slip pulse would move that 1 to the right, so you’d have 0010 0000 0000 which is 200. As you continue to move that 1 to the right, you get 100, 080, 040, 020, etc. I don’t know why these are in 12 bit groups, the max SERDES depth is 10 unless this is SERDES in LEs, not the hard IP. I also don’t know why the sequence goes from 040 to 800, unless they changed the incoming data, or reset the bit slip. Unless you know the incoming data pattern and deserialization factor, signal tap captures don’t help. 


0 Kudos
MinzhiWang
Novice
1,175 Views

Hello Aqid,

 

Thanks for you explanation. Acctually, my bitslip control seems work well. I just have above wondering.

 

My deserialization factor is 6. So 8 channel lvds output parallel bit width is 48bit. Two 6-bits will be grouped to 12-bit. The lvds receiver receive outside ADC serial lvds output. The ADC output resolution is 12-bit. As you said, FPGA lvds maximum factor is 10. So I use two 6 factor to process this 12-bit resolution.

0 Kudos
AqidAyman_Intel
Employee
1,142 Views

Okay, this sounds more like an RTL level issue rather than anything with the bitslip and LVDS IP. Maybe check the RTL viewer to see if synthesis is fanning out the bitslip_pulse signal to each bit of the bitslip control in the LVDS SERDES IP.


0 Kudos
AqidAyman_Intel
Employee
971 Views

Hi,


I wish to follow up. Do you still need help for this issue? or can we close this?


Regards,

Aqid


0 Kudos
MinzhiWang
Novice
924 Views

Hi Aqid,

 

Pls close this thread, maybe, i'll post another thread for bitslip after i check my code carefully.

 

Thanks

Best Regard

0 Kudos
AqidAyman_Intel
Employee
902 Views

Okay, I understand.

I now transition this thread to community support. If you have a new question, Please login to ‘https://supporttickets.intel.com/s/?language=en_US’, view details of the desire request, and post a feed/response within the next 15 days to allow me to continue to support you. After 15 days, this thread will be transitioned to community support. The community users will be able to help you on your follow-up questions.


0 Kudos
Reply