Xilinx IP核配置,一步一步验证Xilinx Serdes GTX最高8.0Gbps

之前用serdes一直都是跑的比较低速的应用,3.125gbps,按照官方文档一步一步来都没出过什么问题,这次想验证一下k7系列gtx最高线速8gbps,看看xilinx的fpga是不是如官方文档所说。
gtx速度到底可以跑到多少 关于器件速度的问题首先找到 ds182->kintex-7 fpgas data sheet:dc and ac switching characteristics,可以自己对应的器件去找,不过这个在设计电路板器件选型的时候就应该考虑到,除非是买的开发部学习用。这里面包括所有的fpga各个器件能跑到的最高频率和器件延时,建立时间,保持时间等,对高速设计有很大的参考价值。
找到gtx transceiver switching characteristics
可以看到,虽然k7系列gtx最高可以跑到12.5gbps,但这跟速度等级和封装都有关系,是在-3的速度等级,ff封装下才有的最高速度12.5gbps。而现在手头的芯片型号是k7480tffg901-1,所以最高支持8.0gbps。其实这在配置ip核的时候就会发现了,线速范围是(0.5-8.0)。所以ip核都是严格和工程的器件相关联的,这点vivado越做越好了。
一步一步配置ip核 下面一步步配置ip核,可以作为初学者参考。(第一次用的话,会被生成的一大堆文件和巨多的io口吓到的。)包括怎么查找手册和原理图,走一遍流程,发现其实xilinx的ip核都是一个套路。
1. 首先在ip核搜索gt,选择7 series fpgas transceiverswizard,
没得选的,取个名字。顺便提一下,下面的shared logic选项,最好选include shared logic in example design。在有些特殊资源需要共享时,曾经遇到过这里的问题。当然不是gtx模块,是以太网的rgmii的模块,其中的idelay要用到iodelay_ctrl,一个iob就一个,同一个iob其它地方要用到的时候必须选下面一个选项。所以最好都选下面一个,没毛病。
2. 接下来就比较重要了
首先是协议,最简单的strat from cratch,就是没有协议。然后是线速,可以看到范围是(0.5-8.0)。参考时钟,这个可以根据需要选个合适的。软件都根据你的线速把参考时钟的可选项计算好了。接收端同样设置,当然可以不一样的。这是全双工,收发链路没有什么关系,也可以关掉其中一个tx off 或rx off。然后是pll选择,到底选哪个呢?我们回到刚开始提到的ds182,同样一个表格下部分
其实线速决定了没得选,已经变成灰色了。
然后是比较重要的,选择用哪个收发器,这当然不是拍脑袋决定的,跟设计有关,可以查找原理图。
比如说这样的,然后去查手册ug476-> 7 series fpgasgtx/gth transceivers 找到 placement information by package如下
这样就知道用的是x0y8,输入时钟在上面的原理图可以找到,是同一组的clk0。
最后,把vivado lab tools勾上,这样才可以生产example工程可以参考。
3. 继续
之前一直用的是8b10b,这次尝试一下64b66b,后者本来就是高带宽下的一个编码协议,效率更高。为什么要用8b10b,64b66b包括后面的扰码一句话概括就是增加频率分量有利于cdr(时钟数据恢复)和减少直流,两个是不同的原因。具体的可以百度。最下面的可选端口为了简单,全部去掉。
4.
由于没有选择8b10b,这一页也没什么可选的,依然把下面的可选端口全部去掉。
5.
好了,pcie留着下次研究,太复杂了。可选端口其实有的挺有用的,增加了可控性,比如说环回控制,loopback。顺便说一下内部环回有四种,
1.“000”:正常模式不环回
2.“001”:近端pcs环回
3.“010”:近端pma环回
4.“100”:远端pma环回
5.“110”:远端pcs环回)
6.接下来是通道绑定和时钟校正
通道绑定的作用是把多个物理通道对齐,绑定成一个的逻辑通道。其实就是用fifo消除通道间的延时不确定性。由于只有一个通道,没有绑定可言。
7. 最后看一下确定对不对,注意收发时钟是250m。可以算一下,8000m/32=250m。
到这里完成一大半了。
利用ip核生成example工程
接下来生成example工程
把刚刚配置的ip右键,如图选择。
生成好后稍微改一下约束文件xdc,把drc时钟的输入时钟约束一下。其他的不用管。
## loc constrain for drp_clk_p/n
set_property loc g27 [get_ports drp_clk_in_p]
set_property loc f27 [get_ports drp_clk_in_n]
set_property iostandard lvds_25 [get_ports drp_clk_in_p]
set_property iostandard lvds_25 [get_ports drp_clk_in_n]
可以发现直接在这儿可以改具体使用的哪个收发器。注意:在这里改的效果和上面第2步里面设置的效果一样。
set_property loc gtxe2_channel_x0y4 [get_cells gtx_8g_support_i/gtx_8g_init_i/inst/gtx_8g_i/gt0_gtx_8g_i/gtxe2_i]
要改的话,当然同时gtx的时钟也得改
set_property loc ad5 [get_ports q1_clk0_gtrefclk_pad_n_in ]
set_property loc ad6 [get_ports q1_clk0_gtrefclk_pad_p_in ]
再修改一个地方,原来的ila核抓的是解扰码前的数据,替换成解扰码后的数据可以更清楚的看到接收到的数据。
上板调试验证
好了,生成bit下进去,可以用连接线接上连个serdes的一收一发换回,或者设置内部环回,或者在两片fpga上做实验。
可以看到error_count一直是0,说明收发正确,很稳定。
收到的数据依次是00000fb,3020100,7060504…依次递增,打开发送文件如下,和发送的一样。
00000000000000fb0100
00000000030201000000
00000000070605040000
000000000b0a09080000
实验成功证明了gtx可以跑到最高8.0gbps。
生成的example工程可以好好研究学习一下,里面有加扰码和解扰码的过程,自己修改一下把解扰码后的数据抓出来对比一下,可以很清楚的看到收到了什么数据。包括校验模块是怎么校验的,还是值得一学的。

2018人工智能标准化白皮书里面,对人工智能关键技术的定义
中航锂电推出D221高能量密度高安全590模组
自动控制系统基本知识
oracle的数据类型有哪些
5G工业路由器赋能ATM终端设备提供无线网络方案
Xilinx IP核配置,一步一步验证Xilinx Serdes GTX最高8.0Gbps
vivo的两款新手机拥有多个安全功能和安全能力
充电桩市场迎来新一轮抢滩战?
华为计划将使用麒麟处理器来应对高速5G环境下的散热需求
如何让嵌入式设备枚举成WinUSB设备
在Shopify App Store上正式推出其自助式销售与支持聊天应用程序
电阻点焊技术的焊接原理及优势介绍
电荷放大器的原理简析
更美的生活总来源这些隐秘的功能 三星Galaxy Note20系列大揭秘
射频放功率放大器基本概念
巴西对待华为或成拉美市场风向标
采用VC++语言实现基于通用接口总线GPIB的远程测量系统的设计
亚信推出低功耗AX88772E免驱动USB 2.0转百兆以太网芯片
如何使用PC并口与2-Wire设备通信
ESP8266芯片WIFI模块接入云平台的方法教程