摘要:LVDS(Low-Voltage Differential Signaling)低电压差分信号,是一种低功耗、低误码率、低串扰和低辐射的差分信号技术;LVDS会被经常使用到,使用的过程中难免会碰到时序问题,需要借助IDELAY进行简单的时序调整;我在使用4*4lane LVDS传输数据时碰到了很多问题,本篇文章作为记录;
一、LVDS
LVDS对于FPGA侧来说无非就是一对差分线,直接用就行;我使用的场景中,需要用到24对LVDS(外部有4路芯片,每路6对LVDS)
二、IDELAY的使用
2.1 差分转单端
把需要用到的所有差分信号,转单端信号,后面会用到:
2.2 IDELAY CTRL
i_clk_delay目前来看并没有什么特殊要求,这里我给的是主时钟MMCM分出来的300MHz时钟;需要注意这里的IODELAY_GROUP貌似要统一名字;
2.3 IDELAY3
里面连接的i_idelay_clk使用的是芯片2243过来的随路时钟,这个时钟应该是300MHz,2243传送过来的的数据速率是600Mbps;
2.4 IDDRE1
IDELAY3的输出接到IDDRE上面;
i_bitclk是300Mhz时钟;
iddre的输出就可以拿来用了,但是时钟域依旧是i_bitclk;
三、调试
3.1 LVDS时序问题
一般LVDS出现时序问题,会出各种各样的情况,但是总结下来无非就是两点,数据本身和数据量有问题;也就是说,数据要么就是错误的,要么数据量不对,两者很有可能同时出现;
按照经验,在确保物理硬件布线没有问题的情况下,LVDS出现时序问题,很有可能就是布局布线导致的,所以异常的现象并不是固定一致的,应该会随着版本的变化而变化;此时此刻,通过调整idelay是很有希望解决这个问题的。如果物理硬件布线有问题(没遇到过),很难调试;
如图所示,理论上收到的数据应该是1,2,3,4,5,6,7,8,但是现在出现了16,12,0e,0a;理论上收到的数据量是786432个,并且图中784383对应的应该是1,现在对应的是2,证明了数据量也少了(在测试LVDS时序问题的时候,一定要有一套标准证明数据本身不对或者数据量少了);
我的验证标准:
由于雷达2243会传过来bitclk、valid、frameclk、data0、data1、data2、data3;可以选择用valid去计算数据量,理论上valid应该和四路data是严格对齐的;所以可以用多个计数器从不同角度计数valid,可以对比计数器,保证每个计数位置的唯一性,从而验证出数据量是否正确;要验证数据本身正确,一定要让对端发送有规律的数据,才能够比较清晰的判断数据本身有没有发生错误(2243有testpattern模式、testsource模式、真实数据模式);
调节idelay:
调节idelay基本上可以盲试,因为9bit的位宽,一共就512个数,我认为一路data能够对齐的情况下,相邻几路data数据的延时,基本一致;但是芯片和芯片间的LVDS延时或许会有不同;但是即便如此,调delay就是一个尝试的过程,有了标准,多试几次,就能够测出正确的结果;
总结
很久以前做过的东西,写出来加深印象
参考文章:
FPGA内部资源(Xilinx) ---- IDELAY(延时)_idelaye2原语-CSDN博客