fpga板卡,年初买的深圳某知名厂家,主要考虑用FMC接口连接自制的AD9653子卡,采集数据先存入ddr,然后通过网络将数据传到pc。实际开发时,结果发现板卡这块有2个问题,1是fmc管脚bank定义厂家没给,需要自己对照核心板和底板标注同bank网络,使用起来很不方便。2是FMC接口连接的bank10/11,只支持lvds25,但厂家给的电源是1.8v/3.3v,查看原理图后自行将3.3v电源改成2.5V,符合lvds电平定义。虽然ad9653是lvds18输出,不过fpga用lvds25接收还是可以的。感觉厂家做这个fmc高速这块不太专业,但除此之外其他还好,包括ddr,网络等,后面没碰上其他问题。
spi模块调试就不写了,那个比较简单,和普通spi不一样的是多2bit字节位,可以调整每次读写字节的个数。我只写了连续读写1~4字节功能,大于4字节没写。时序图如下:
spi写

spi读

ad9653时序图如下

设计原理基本上按下图实现,有小改不影响大局。此图为参考其他资料截图所得,这里借用一下。参考时钟用200MHz。

实际原理图部分截图如下

IDELAYE2 和 ISERDESE2模块连接

位时钟和帧时钟

FCO帧数据

IDELAYCTRL原语

调试过程:
1 先用vio拉出信号如下图

W_allign_word为位码,其意义是延时后的dco采集原始dco,为aa或55说明位码正确。关键的帧数据fco_data,很多人写的帧数据为F0则说明正确,但我这里实际测发现如果用f0作为标准,在测试模式时读出数据就始终不对。并且R_bit_slip参数会不停触发(小提示R_bit_slip需要至少间隔一个clk之后才能触发下次,否则无效)。观察后发现当帧数据为f8时,数据和测试模式给出的完全一致。分析是不是和我采用的芯片帧时钟有关,有大神知道的可以讲解一下啊(这块已经破案了,是芯片的时钟电路有问题,已解决,现在正常用F0,前面写的也给大家做个参考,就不删除了)。W_delay_cnt为延时参数,可配置为0~31之间的数,每bit为78ps。我这里测试发现中位数为14时,帧数据正确,测试完成直接锁死。
实际波形如下
测试模式

两通道外接正玄波

最后总结一下,fpga这块,很早接触过,由于总总原因后来没有深入研究。去年开始重新接触这块,在zynq7020平台里开发了2个adc项目,里面包括fpga以及linux研发,linux这边之前一直在用,轻松拿下。fpga这块,还有vivado软件,从不熟悉到目前基本能用,发现在设计思想上和传统的编程差别很大,今年用7035fpga部分搞这个高速adc,感觉对硬件整体理解又深刻了点。后面还有很多是需要学习研究的地方,包括如何合理利用原语,分析时序约束的影响等等。这里记录一下,也希望与大家一起学习,共勉~
1万+

被折叠的 条评论
为什么被折叠?



