在FPGA调试过程中,除了逻辑代码本身的质量之外,FPGA板子上PCB走线、接插件质量等因素的影响也非常重要。在刚上板调试不顺利的时候,不妨拿示波器看一下信号的质量,比如时钟信号的质量、差分信号的质量、高速串行信号的质量等等,这是上板调试之前首先要做的一步。没有高质量的FPGA外围管脚信号的输入,再好的代码风格和规范都无济于事。所以,调试FPGA之前一定要上示波器看一下关键信号的质量。
LVDS信号线间串扰问题
近日,在300Mbps的LVDS接口的调试过程中,出现了部分接口无法正确接收数据的现象,动用了一系列手段都无法使其老实下来踏踏实实接收数据,实可谓顽固不化。而在实验室老师的建议和要求下,经过一番折腾之后,我们终于见到了经过LVDS驱动芯片解差分后输入到FPGA的单端信号的真容。它是这样的:
![8b9be82a30a7dd425af7698d34e0e1c1.png](https://img-blog.csdnimg.cn/img_convert/8b9be82a30a7dd425af7698d34e0e1c1.png)
(上图只抓了一位数据信号和一位时钟信号,其实是通过两位数据信号并行传输实现300Mbps的)
蓝色的波形是时钟吧,反正在上面数据信号不变化的时候还是时钟,频率也对,150MHz的……但是后面怎么就放飞自我了,这跟我们说好的不一样呀……
在此之前,有必要介绍一下我们这边调试所用硬件的情况,项目要接好多个LVDS接口,多到一个板子根本放不下,但是接口最终都是要连到一块FPGA上的,显然一块FPGA只能放在一块板子上,那这么多接口怎么办呢,不怕,反正还有别的板子,索性就把剩余接口都放在别的板子上吧。那接口需要的LVDS32和31的收发芯片怎么办,也没法都放在FPGA所在的那块板上,那就也都散开吧,LVDS接口收到的信号直接在接口旁边的LVDS32驱动芯片上解差分,单端信号通过各个板子间的接插件传到FPGA板上;发送则相反。所使用的接插件大概就类似于下面这种:
![518bcee81fa7d621d3e9cb7d10aaef8a.png](https://img-blog.csdnimg.cn/img_convert/518bcee81fa7d621d3e9cb7d10aaef8a.png)
当然接插件上相邻信号线间的间隔没有这么大就是了,而且是三排一起。一共用了四块板子(别的板子还有CPU啥的实现其他功能)相互叠在一起,如下图:
![653ff9a7b077fabff0e870b8b822c9e4.png](https://img-blog.csdnimg.cn/img_convert/653ff9a7b077fabff0e870b8b822c9e4.png)