基于xilinx vivado的GTX ip核设置与例程代码使用详解

时间:2024-04-04 15:56:24

1 概述

本文是用于总结GTX例程的学习成果。主要是从IP的设置,IP核的例程代码构成与引用两方面介绍GTX的使用情况。

2 参考文档

《pg168-gtwizard》

《ug476_7Series_Transceivers》

3 GTX的IP设置

3.1 本例程使用环境

编译环境:vivado 2017.4

选用FPGA:XC7K325T-2FFG900I

3.2 GTX IP界面的设置情况

本例程使用GTX主要是实现光纤传输,而不是PCIE,SATA等特殊协议。采用的编码形式为8B/10B,对齐字符为K码。

本例程的IP设置情况如下所示:

3.2.1 GTX IP设置第1页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

第1页设置主要是GT的类型,这个一般根据器件会确定默认选择,高端器件可能有两种根据自己需要的速率设置即可。

3.2.2 GTX IP设置第2页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

第2页设置比较重要,是设置想要的line rate以及GTX上的参考输入时钟。

3.2.3 GTX IP设置第3页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

第3页设置也比较重要,涉及到外部其他模块与IP对接的数据位宽、编码方式、内部数据位宽,系统时钟等信息。

此外还有一些可选端口,其功能如下所示:

表 1 可选端口功能列表

Option I/O Description
TXPCSRESET Input Active-High reset signal for the transmitter physical coding sublayer (PCS) logic.
TXBUFSTATUS Output 2-bit signal monitors the status of the TX elastic buffer. This option is not available when the TX buffer is bypassed.
TXRATE Input Transmit rate change port.
RXPCSRESET Input Active-High reset signal for the receiver PCS logic.
RXBUFSTATUS Output Indicates condition of the RX elastic buffer. Option is not available when the RX buffer is bypassed.
RXBUFRESET Input Active-High reset signal for the RX elastic buffer logic. This option is not available when the RX buffer is bypassed.
RXRATE Input Receive rate change port.
QPLLPD Input Visible only when GTX or GTH transceiver is selected. Powerdown port for QPLL.
CPLLPD Input Visible only when GTX or GTH transceiver is selected. Powerdown port for channel PLL (CPLL).
PLL0PD Input Visible only when GTP transceiver is selected. Powerdown port for PLL0.
PLL1PD Input Visible only when GTP transceiver is selected. Powerdown port for PLL1.

3.2.4 GTX IP设置第4页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

IP第4页是需要关心的,主要涉及到接收时编码对齐方式,接收均衡模式的选择。

编码值一般选择K28.5,且对齐选择双字节对齐。对齐方式的定义如下所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

基于xilinx vivado的GTX ip核设置与例程代码使用详解

均衡模式的选择即是DFE模式与LPM的选择,一般速率小于10G,8B/10B编码的都选DFE模式。其依据如下所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

3.2.5 GTX IP设置第5页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

第5页设置主要是针对PCIE,SATA,PRBS等特殊运用,若不需要则不用关心,本例程没有使用,若需要使用的请看参考文档。

3.2.6 GTX IP设置第6页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

第6页的设置一般情况下可以不用关心,默认即可。

这里说下clock correction 时钟校准的设置:

表 2 clock correction设置

Option Description
Use Clock Correction Enables receiver clock correction logic using unique character sequences. When recognized, these sequences allow for adding or deleting characters in the receive buffer to prevent buffer underflow/overflow due to small differences in the transmit/ receive clock frequencies.
Sequence Length Select from the drop-down list the number of characters (subsequences) in the unique clock correction sequence. The XAUI example uses 1.
PPM Offset Indicates the PPM offset between the transmit and receive clocks.
Periodicity of the CC Sequence Indicates the interval at which CC sequences are inserted in the data stream.
Use Two Clock Correction Sequences Activates the optional second clock correction sequence. Detection of either sequence triggers clock correction.

Channel Bonding and Clock Correction Sequences如下所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

3.2.7 GTX IP设置第7页

基于xilinx vivado的GTX ip核设置与例程代码使用详解

​ 第7页主要是本次设计的信息汇总,这里需要注意TXUSRCLK2与RXUSRCLK2,这两个时钟分别是接口上最终与用户数据对接时的时钟。

4 GTX IP例程代码情况

GTX IP的例程对于使用来说主要是分为3大块,gtwizard_0_support、gtwizard_0_GT_FRAME_GEN与gtwizard_0_GT_FRAME_CHECK。如下图所示代码结构:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

4.1 gtwizard_0_exdes模块

本模块是例程的顶层,用于整合其他模块的,也是与FPGA管脚上的GTX,参考时钟对接的地方。

在实际使用中,可直接在这个模块中修改,去掉FRAME_GEN模块与FRAME_CHECK模块的对接信号。再把gtwizard_0_support的输入输出数据相关的信号引到端口上即可使用。需要引到端口上的信号如下所示:

表 3 gtx最终使用信号

序号 信号名 I/O 说明
1 Q0_CLK0_GTREFCLK_PAD_N_IN I GTX的参考时钟,来源于GTX bank 的时钟管脚
2 Q0_CLK0_GTREFCLK_PAD_P_IN I
3 drpclk_in_i I 内部全局时钟,可由PLL产生
4 RXN_IN I GTX输入高速信号
5 RXP_IN I
6 TXN_OUT O GTX输出高速信号
7 TXP_OUT O
8 gt0_tx_system_reset_c O TX系统复位信号,高有效
9 gt0_rx_system_reset_c O RX系统复位信号,高有效
10 gt0_txusrclk2_i O TX的数据时钟
11 gt0_rxusrclk2_i O RX的数据时钟
12 gt0_rxdata_i O Rx的数据
13 gt0_rxcharisk_i O Rx的K码
14 gt0_txdata_i I TX的数据
15 gt0_txcharisk_i I TX的K码

​ 此外需要修改一个常数:EXAMPLE_SIM_GTRESET_SPEEDUP的值由TRUE修改为FALSE,因为实际使用时不是拿来仿真。如下图所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

4.2 gtwizard_0_support模块

本模块是GTX的核心模块,即实际使用时也需要用的,不用修改,直接照用就行。其中包含了对GTX的时钟管理、复位管理,通用处理等对GTX IP的驱动处理。

4.3 gtwizard_0_GT_FRAME_GEN模块

本模块是测试数据产生的模块,是按一定时序输出”gt_rom_init_tx.dat”中存储的数据。

在实际使用时不需要这个模块,需要用自己的数据源(gt0_txdata_i)替换。

4.4 gtwizard_0_GT_FRAME_CHECK模块

本模块是数据检测模块,按一定的时序解析出收到的有效数据,然后与"gt_rom_init_rx.dat"中存储的数据进行对比,看是否接收到的数据是否和预期一致。

在实际使用时不需要这个模块,把数据(gt0_rxdata_i)引出去自己另外解析。

5 编码方式与line rate 的选择参考

Line rate与编码方式的选择,一般是根据想要通信的协议相关。其具体规范可参考《ug476_7Series_Transceivers》,一般将GTX分为CPLL低速使用,QPLL高速使用。

CPLL的驱动设置与编码格式如下所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解

基于xilinx vivado的GTX ip核设置与例程代码使用详解

基于xilinx vivado的GTX ip核设置与例程代码使用详解
​ QPLL的驱动设置与编码格式如下所示:

基于xilinx vivado的GTX ip核设置与例程代码使用详解