基于xilinx vivado的GTX ip核设置与例程代码使用详解
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页
第1页设置主要是GT的类型,这个一般根据器件会确定默认选择,高端器件可能有两种根据自己需要的速率设置即可。
3.2.2 GTX IP设置第2页
第2页设置比较重要,是设置想要的line rate以及GTX上的参考输入时钟。
3.2.3 GTX IP设置第3页
第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页
IP第4页是需要关心的,主要涉及到接收时编码对齐方式,接收均衡模式的选择。
编码值一般选择K28.5,且对齐选择双字节对齐。对齐方式的定义如下所示:
均衡模式的选择即是DFE模式与LPM的选择,一般速率小于10G,8B/10B编码的都选DFE模式。其依据如下所示:
3.2.5 GTX IP设置第5页
第5页设置主要是针对PCIE,SATA,PRBS等特殊运用,若不需要则不用关心,本例程没有使用,若需要使用的请看参考文档。
3.2.6 GTX IP设置第6页
第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如下所示:
3.2.7 GTX IP设置第7页
第7页主要是本次设计的信息汇总,这里需要注意TXUSRCLK2与RXUSRCLK2,这两个时钟分别是接口上最终与用户数据对接时的时钟。
4 GTX IP例程代码情况
GTX IP的例程对于使用来说主要是分为3大块,gtwizard_0_support、gtwizard_0_GT_FRAME_GEN与gtwizard_0_GT_FRAME_CHECK。如下图所示代码结构:
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,因为实际使用时不是拿来仿真。如下图所示:
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的驱动设置与编码格式如下所示:
QPLL的驱动设置与编码格式如下所示: