IBERT(Integrated Bit ErrorRatio Tester,集成误比特率测试工具),是Xilinx提供用于调试FPGA高速串行接口比特误码率性能的工具,最常用在GT高速串行收发器测试:
(1)基于PRBS模块的误码率测试;
(2)测量眼图;
IBERT核心是为PMA评估和演示而设计,GT收发器的所有主要物理介质连接(PMA)功能都得到支持和可控,包括:TX预加重/后加重、TX差速摆动、RX均衡、决策反馈均衡器(DFE)、锁相环(PLL)分频设置等。
GT(Gigabyte Transceiver,G比特收发器),通常也称Serdes、高速收发器。Xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器。按支持的最高线速率排序,GTP是最低的,用于A7系列;GTZ最高,用于少数V7系列;K7和V7中常见的是GTX和GTH。ZC706中包含16个GTX。
GT的应用非常广泛,高速ADC和DAC使用的JESD204B、高速接口SRIO(Serial RapidIO)、Aurora、PCIE、千兆网、XAUI万兆网等都是基于GT实现。在使用GT之前,首先需要进行IBERT测试,给出误码率、眼图等信息,保证GT收发器工作正常。若IBERT测试不通过,则根据近端、自环和远端的测试去排除PCB走线、阻抗、时钟、复位、电源等原因。
双击IP核进行配置。
第一页协议选项中默认为Custom1,可以自行输入线速率、时钟等参数,其余协议选项是对应着固定的线速率和时钟,比如tenGBASE-R对应10.3125G通信速率的万兆网通信,使用时钟频率156.25MHz,选择使用QPLL锁相环,选择后整个Quad的4个GT共用一个QPLL(Quad PLL),否则每个Channel通道各自使用自己的CPLL(Channel PLL)。
ZC706原理图第8页(公众号回复【ZC706原理图】获取),ZC706中的BANK109~112四个Bank是高速收发器Bnak,每个Bnak中含有4个独立的GT收发器和一个QPLL,组成一个Quad,每个GT称为一个Channel。其中,Quad109和Quad110是FMC_HPD,Quad111支持Channel0是FMC_LPC,Channel1使用SMA接口输出,Channel2连接光纤SFP+,Channel3直接TX和RX连接形成自环,用于测试GT,Quad112用于PCIE。
在使用过程中,出于对时钟的考虑:
Quad109的参考时钟0来源于FMC_HPC板卡,参考时钟1未连接(NC);
Quad110的参考时钟0来源于FMC_HPC板卡,参考时钟1来源于一个时钟芯片SI5324,但是需要进行相应配置才能输出(IIC配置寄存器);
Quad111的参考时钟0来源于FMC_LPC板卡,参考时钟1通过SMA接头由外部输入;
Quad112的参考时钟0来源于PCIE设备,参考时钟1未连接(NC);
综上考虑,在ZC706没有连接FMC和PCIE设备情况下,只能使用Quad111的参考时钟1,通过外部SMA接入差分的参考时钟。Quad111中的Channel3恰好已经设计成自环,刚好选定Quad111进行IBERT测试。
重要!由于相邻Bnak可以相互借用时钟,所以,这里在使用Bnak111的参考时钟1的前提下,也可以选择Bnak110和Bnak112上的GT进行IBERT测试,但是不能使用Bnak109,因为Bank111的时钟无法给Bank109使用,但是可以给Bnak110和Bank112使用。
在ZC706板上,如下图所示,有一个一上电就会输出的差分时钟USRCLK,默认输出频率156.25MHz,恰好可以用来作为时钟,并将其通过SMA接头的USER_SMA_CLOCK输出,外部使用SMA接头射频线将USRCLK和USER_SMA_CLOCK连接,即为Quad111引入了一组156.25MHz的差分时钟。(注意!两根射频线必须等长)
标号9和10的两对SMA接口使用等长的射频线连接,丝印号P端连接P端,N端连接N端。
根据2的说明,这里选择QUAD_111,并将参考时钟选择Quad111的参考时钟1(MGTREFCLK1),由于使用整个Quad的四个通道,并且使用QPLL,所以这里的Channel任选一个Channel0 ~ Channel3即可。
时钟来源配置为Quad111的参考时钟1。
示例工程生成参考:如何使用Xilinx官方例程和手册学习IP核的使用——以高速接口SRIO为例【Xilinx】【快速使用IP】【FPGA探索者】
生成RTL图如下:
增加差分输入时钟USRCLK,首先输入使用IBUFDS差分输入转单端得到user_clk信号,然后使用全局缓冲BUFG资源将user_clk绑定全局时钟网络,最后使用OBUFDS单端转差分输出。
FPGA从外部输入时钟时,必须使用全局时钟输入管脚输入,必须经过全局时钟缓冲IBUFG(单端时钟)或IBUFGDS(差分时钟),否则布线报错,常见的使用方式是IBUF或IBUFDS后加一个BUFG组合。
BUFG,全局缓冲,输出到达FPGA内部个逻辑单元的时钟延迟和抖动最小。
参考 https://blog.csdn.net/zkf0100007/article/details/82559250
wire user_clk;
IBUFDSIBUFDS_inst_user_clk(
.O(user_clk), // Buffer output
.I(USRCLK_P_I), // Diff_p bufferinput
.IB(USRCLK_N_I) //Diff_n buffer input
);
wireuser_clk_bufg;
BUFGBUFG_inst_user_clk (
.O(user_clk_bufg), // 1-bit output: Clock output
.I(user_clk)
);
OBUFDSOBUFDS_inst_user_clock (
.O (USER_SMA_CLOCK_P_O), // Diff_p output
.OB(USER_SMA_CLOCK_N_O), //Diff_n output
.I (user_clk_bufg) //Buffer input
);
IBUFDS+BUFG+OBUFDS。
设置XDC时钟约束和管脚约束:
create_clock -name usrclk -period 6.4 [get_ports USRCLK_P_I]
create_clock -name user_sma_clk -period 6.4 [get_portsUSER_SMA_CLOCK_P_O]
set_property PACKAGE_PIN AF14 [get_ports USRCLK_P_I]
set_property IOSTANDARD LVDS_25 [get_ports USRCLK_P_I]
set_property PACKAGE_PIN AD18 [get_ports USER_SMA_CLOCK_P_O]
set_property IOSTANDARD LVDS_25 [get_ports USER_SMA_CLOCK_P_O]
编译、布局布线并生成Bitstream,下载到ZC706。在Vivado下方出现“Serial I/O Links”,点击Auto-detect links会自动检测已经连通的链路,点击Create Link可以观察工程中配置的所有链路。
点击Create Link,点击“+”号选择上方的链路,点击4次选择4个链路。
由于Quad111的Channel3是直接TX和RX直连构成自环,所以下载IBERT后在Link3上就已经实现连通,通信速率10.313Gbps,误码率10的-13次方,测试时可以点击Reset复位重测,更改Links里面的配置时也需要Reset复位一下,否则误码率较高。
配置4个通道均为近端PCS自环或者近端PMA自环(Near-End),内部构成自环,4个链路均进行近端内部自环测试,两个FPGA通信时可以配置远端PCS自环或者远端PMA自环测试链路(Far-End)。
更改上述配置后,先Reset复位,否则误码率较高。
创建眼图的扫描。
可见在中心位置处眼图张的比较开(蓝色),信道质量较好,横着看张开的范围较小,主要原因是运行的线速率太高,如果使用1.25G的千兆网协议,则眼图会更好。
从信号完整性的角度来看,眼图中间的蓝色区域越大,GTX所对应的PCB高速电路的信号完整性越好。