UltraScale+ GTH ip核使用

参考:pg182 - UltraScale FPGAs Transceivers Wizard v1.7
参考:UG576 - UltraScale Architecture GTH Transceivers

此工程使用 xilinx ZU9eg,下图为gth的channel选择。

复位模块

gtwiz_reset_clk_freerun_in: 复位控制器辅助块的自由运行时钟,要启用此模块,必须提供此时钟
gtwiz_reset_all_in:复位TX和RX的PLL和Datapath。复位状态机是由其下降沿初始化的。
gtwiz_reset_tx_pll_and_datapath_in:复位TX的PLL和Datapath.
gtwiz_reset_tx_datapath_in:复位TX的Datapath.
gtwiz_reset_rx_pll_and_datapath_in:复位RX的PLL和Datapath.
gtwiz_reset_rx_datapath_in:复位RX的Datapath.
gtwiz_reset_tx_done_out:在完成TX的复位后拉高,与主通道TXUSERCLK2同步。
gtwiz_reset_rx_done_out:在完成RX的复位后拉高,与主通道RXUSERCLK2同步。
gtwiz_reset_rx_cdr_stable_out:标明RX原语的时钟和数据恢复(CDR)电路是稳定的。保留;不使用

注意: 如果 TX和 RX的datapaths 由QPLL0提供时钟,gtwiz_reset_tx_pll_and_datapath_in 和 gtwiz_reset_rx_pll_and_datapath_in这两个输入中的任何一个都将重置共享的QPLL0,从而导致在另一个数据方向上潜在的意外链路丢失。谨慎使用。
在这里插入图片描述

时钟模块

1、reference clock

reference clock 在 GTH 中支持输入和输出两种模式。
在参考时钟输入模式下,在专用参考时钟I/O引脚上提供一个时钟,用于驱动QPLL或者CPLL。使用IBUFDS_GTE4 。在example design中有用法示例,可以直接借鉴。
在这里插入图片描述
参考时钟输出模式,是从同一QUAD中的四个通道出来的恢复时钟RXRECCLKOUT,可以路由到专用的参考时钟I/O引脚。这个输出时钟可以用作不同位置的参考时钟输入。在运行期间无法更改操作模式。可以通过两个软件原语之一来访问: OBUFDS_GTE3/4和OBUFDS_GTE3/4_ADV。两个原语的选择取决于:

  1. 当RXRECCLKOUT始终来自同一通道时,使用OBUFDS_GTE3/4。
  2. 如果提供RXRECCLKOUT的通道在运行期间发生更改,使用OBUFDS_GTE3/4_ADV。

当使用OBUFDS_GTE3/4_ADV原语时,还必须实例化GTHE3/4_COMMON原语。在使用OBUFDS_GTE3/4原语时,不需要实例化GTHE3/4_COMMON。详见图2-3.一般克直接使用example design中的示例。

在这里插入图片描述

下图是在此工程里面的REF时钟选择。未使用输出模式。
在这里插入图片描述

2、时钟辅助模块

gtwiz_userclk_tx_active_in / gtwiz_userclk_rx_active_in:
标明TX/RX用户时钟网络辅助块产生的时钟处于活动。默认情况下,TX/RX 用户时钟网络辅助器块驱动此端口。

gtwiz_userclk_tx_srcclk_in / gtwiz_userclk_rx_srcclk_in:
输入的源时钟,直接由TXOUTCLK/ RXOUTCLK 驱动。

TXUSRCLK and TXUSRCLK2 / RXUSRCLK and RXUSRCLK2
由gtwiz_userclk_tx_srcclk_in/ gtwiz_userclk_rx_srcclk_in驱动一个/两个BUFG_GT primitive得到。当USRCLK=USRCLK2时,驱动一个primitive,如果USRCLK是USRCLK2的两倍时,驱动两个primitive。USRCLK2给TXDATA/RXDATA提供时钟,USRCLK给内部的PCS logical提供时钟。两个时钟必须positive-edge对齐。 详情见发送机模块。

gtwiz_userclk_tx_reset_in/gtwiz_userclk_rx_reset_in:复位BUFG_GT primitive,高有效。

在这里插入图片描述根据helper block的位置(core/example design),以上字体未加粗的信号的连接和primitive的布线会在core里或者需要启用example design中的时钟模块。
在这里插入图片描述

发送机

1、TX接口

每个收发器包括一个独立的发射器,它由一个PCS和一个PMA组成。并行数据从设备逻辑流入TX接口(注意必须与TXUSRCLK2正边缘对齐),通过PCS和PMA后以高速串行数据输出TX驱动程序。详情见图3-1.
在这里插入图片描述端口的宽度可以配置为2、4或8个字节宽。端口的实际宽度取决于 TX_DATA_WIDTH 和 TX_INT_DATAWIDTH 属性以及 TX8B10BEN 端口设置。端口宽度可以是16、20、32、40、64和80位。表3-1显示了如何选择TX数据路径的接口宽度。

在这里插入图片描述

AttributeDescription
TX_DATA_WIDTH设置 TXDATA 端口的位宽(interface width)。有效值为16、20、32、40、64和80。
当启用8B/10B编码时,TX_DATA_WIDTH 必须设置为20、40或80。
TX_INT_DATAWIDTH控制内部数据路径的宽度(internal data width)。
0:2字节的内部数据路径
1:4字节的内部数据路径。
如果行速率大于8.1875 Gb/s,则设置为1。

2、TX 8B/10B编码

GTH收发器有一个内置的 8B/10B TX路径,可以编码TX数据,而不消耗设备资源。启用8B/10B编码器会通过TX路径增加延迟。如果不需要,可以禁用或绕过8B/10B编码器,以最小化延迟。

在这里插入图片描述

TX 8B/10B 编码端口

PortClock DomainDescription
tx8b10bbypass_in[7:0]TXUSRCLK2高有效,一个bit位控制一个字节,允许字节交错的绕过8B/10B。tx8b10ben_in 为高才能使用此模式。
tx8b10ben_inTXUSRCLK2高有效
txctrl1_in [15:0]TXUSRCLK2当8B/10B编码旁路时,给TXDATA填充bit。
txctrl0_in [15:0]TXUSRCLK2当8B/10B编码旁路时,给TXDATA填充bit。
txctrl2_in[7:0]TXUSRCLK2表示TXDATA上对应的数据字节是有效的K字符。一个bit对应一个byte,
例如:TXCTRL2[0] corresponds to TXDATA[7:0]

接收机

1、RX 字节和字对齐

接收到的串行数据必须与符号边界对齐,然后才能用作并行数据。运行机制:发射机发送一个可识别的序列,通常称为逗号。接收方在传入数据中查找逗号。当它找到逗号时,它将逗号移动到字节边界,以便接收到的平行字与传输的平行字匹配。下表为常用 K28.5 。

Special Code NameBits
HGF EDCBA
Current RD-
abcdei fghj
Current RD +
abcdei fghj
K28.5101 11100001111 1010110000 0101


图4-23显示一个10-bit 逗号的对齐方式。右侧为接收未对齐位的bits。中间虚线框显示为带有逗号的串行数据。左侧为字节对齐的RX并行数据。

在这里插入图片描述

图4-24显示左侧TX并行数据,右侧逗号对齐后接收可识别的并行数据。

在这里插入图片描述

1、启用 Comma 对齐

PortClock DomainDescription
rxcommadeten_inTXUSRCLK2高有效,表示启用comma对齐模块。
启用会加大RX数据路径延迟

2、配置comma图形

AttributeTypeDescription
ALIGN_COMMA_ENABLE10-bit Binary设置MCOMMA/PCOMMA中哪些位必须与传入的数据相匹配,哪些位可以忽略。
此属性是一个10位掩码,默认值为11111111111。
ALIGN_MCOMMA_VALUE10-bit Binary定义 mius comma ,接待顺序是从右到左的(首先收到ALIGN_MCOMMA_VALUE[0])。
默认值为10‘b1010000011(K28.5 与附录相反)。此定义不影响8B/10B的编解码。
ALIGN_PCOMMA_VALUE10-bit Binary定义plus comma,接待顺序是从右到左的(首先收到ALIGN_PCOMMA_VALUE[0])。
默认值为10’b0101111100 (K28.5 与附录相反)。此定义不影响8B/10B的编解码。
ALIGN_COMMA_DOUBLEBoolean为高时表明同时启用PCOMMA和MCOMMA。

上表为需要的信号。下图为在 IP核中配置的位置:

在这里插入图片描述


ALIGN_COMMA_ENABLE 与 COMMA 的匹配实现如下图 4-25。

在这里插入图片描述


当 ALIGN_COMMA_DOUBLE 为 1 时,PCOMMA 和 MCOMMA 的组合顺序为下图 4-26。
在这里插入图片描述

3、启动 COMMA 对齐

PortClock DomainDescription
rxmcommaalignen_inTXUSRCLK2当要对齐MCOMMA时,拉高
rxpcommaalignen_inTXUSRCLK2当要对齐PCOMMA时,拉高

4、对齐状态信号(了解)

PortClock DomainDescription
rxbyteisaligened_outTXUSRCLK2为高标志着根据COMMA检测,并行数据流在字节边界正确对齐
rxbytealign_outTXUSRCLK2为高表示包含串行数据流的字节对齐由于COMMA检测已经发生变化
rxcommadet_outTXUSRCLK2当检测到COMMA时拉高。在RX接口COMMA可用之前,断言会进行几个时钟周期

5、对齐边界

允许的对齐边界由ALIGN_COMMA_WORD和RX_INT_DATAWIDTH定义。

AttributeTypeDescription
ALIGN_COMMA_WORDInteger此属性控制在多字节数据路径检测到的commas的对齐方式。
1: 可以实现TXDATA输出的奇数字节或偶数字节comma对齐。
      2字节接口,对齐全部2字节
      4字节接口,对齐全部4字节;
       8字节接口,对齐全部8字节
2: 仅对奇数字节对齐comma。
      2字节接口,对齐RXDATA[9:0];
      4字节接口,对齐RXDATA[9:0]/ RXDATA[29:20];
      8字节接口,RXDATA[9:0]/ RXDATA[29:20]/RX[49:40]/RX[69:60];;
4: 在4字节边界进行对齐,在RX_INT_DATAWIDTH = 0时禁用。
      4字节接口,对齐RXDATA[9:0]=8字节接口,对齐RXDATA[9:0]/ RX[49:40]

在这里插入图片描述

2. 8B/10B 解码器

1、8B/10B位和字节排序

B/10B解码要求首先接收位a0,但GTH收发器总是首先接收最右边的位。因此,8B/10B解码器在解码之前自动反转接收到的数据的位序。解码后,将这些数据提供给RXDATA端口。
在这里插入图片描述

2、解码错误检测

解码器提供差异检查和表外错误检测。
差异检查:当RXDATA的数据字节到达有错误,RXCTRL1拉高。具体实现如图4-32.
在这里插入图片描述
表外错误检测:当RXCTRL3启用,但接收到的10位字符无法映射到有效8B/10B字符时,驱动RXCTRL3为高。发生这种情况时,未解码的10位字符通过以下格式的RX数据接口从解码器输出:
•对应的RXCTRL1表示第9位
•对应的RXCTRL0表示第8位
•相应的RXDATA字节表示[7:0]位
•相应的RXCTRL3表示发生了无效的8B/10B字符错误
在这里插入图片描述

3、特殊字符

8B/10B解码包括常用于控制功能的特殊字符(K码)。当RXDATA为K字符时,解码器驱动RXCTRL0 High。

如果DEC_PCOMMA_DETECT设置为TRUE,当RXDATA是 plus comma,解码器就会驱动相应的RXCTRL2为高。
如果DEC_MCOMMA_DETECT设置为TRUE,当RXDATA为minus comma,解码器驱动相应的RXCTRL2为高。
RXCTRL2的bit位与RXDATA的byte一一对应。
RXCTRL2[7]对应RXDATA[63:56]
RXCTRL2[6]对应RXDATA[55:48]
RXCTRL2[5]对应RXDATA[47:40]
RXCTRL2[4]对应RXDATA[39:32]
RXCTRL2[3]对应RXDATA[31:24]
RXCTRL2[2]对应RXDATA[23:16]
RXCTRL2[1]对应RXDATA[15:8]
RXCTRL2[0]对应RXDATA[7:0]

4、启用和禁用8B/10B解码

rx8b10ben_in控制启动8B/10B解码器的启用与否。

5、端口及属性

PortClock DomainDescription
rx8b10ben_inTXUSRCLK2高表示启动8B/10B解码器。
低表示接收到的10-bit数据显示为 { RXCTRL1, RXCTRL0, RXDATA[7:0] }。
RXCTRL2[7:0]TXUSRCLK2为高表示在RXDATA上显示的相应字节是一个COMMA。
RXCTRL0[15:0]TXUSRCLK2RXCTRL0[15:8]未使用。
1.解码器被绕过或RXCTRL3为高,为非解码数据的第8位。请参见表4-47。
2.启用解码器,高表示RXDATA的对应字节为K码。例:RXCTRL0[0] 对应RXDATA[7:0]
RXCTRL1[15:0]TXUSRCLK2RXCTRL1[15:8]未使用。
1.解码器被绕过或RXCTRL3为高,为非解码数据的第9位。请参见表4-47。
2.启用解码器,高表示RXDATA的对应字节有差异错误。例:RXCTRL1[0] 对应RXDATA[7:0]
RXCTRL3[7:0]TXUSRCLK2高表示在RXDATA上显示的相应字节不是8B/10B表中的有效字符。例:RXCTRL3[0] 对应RXDATA[7:0]

仿真图如下,RXCTRL2 = a,有人能解释一 下吗?
在这里插入图片描述

在这里插入图片描述

自环

PortClock DomainDescription
LOOPBACK[2:0]Async000: Normal operation
001: Near-end PCS Loopback
010: Near-end PMA Loopback
100: Far-end PMA Loopback
110: Far-end PCS Loopback

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

持续补充ing

### GTYPES Transceivers in FPGA Design Tools and Resources In the context of designing with GTypes transceivers, these components are integral to high-speed serial communication interfaces within FPGAs. The design process typically involves leveraging specific intellectual property (IP) cores that facilitate complex operations such as data serialization/deserialization at very high speeds. For instance, when working on communication protocols or custom link layers requiring precise timing control, one might utilize a combination of FIFOs for buffering incoming/outgoing data streams[^2]. Additionally, specialized modules like those mentioned in documentation covering PTP clocks can be crucial for applications needing accurate timestamping over network connections[^3]. Designers often rely heavily upon vendor-provided development environments which offer comprehensive support through integrated libraries and wizards specifically tailored towards configuring GTypes transceiver parameters efficiently without delving too deeply into low-level details unless necessary. For Xilinx devices particularly, there exists robust toolsets including Vivado HLS alongside detailed guides explaining how best practices should be applied during implementation phases involving IO handling via primitives such as `IOBUF` elements where applicable[^4]. #### Example Code Snippet Demonstrating Basic Configuration Below is an illustrative example demonstrating basic configuration settings using Verilog syntax targeted toward initializing certain aspects related to setting up a GTX/GTH transceiver channel: ```verilog module gtypes_transceiver_config ( input wire refclk, output reg tx_resetdone, // ... other ports ... ); // Internal signals declaration here... initial begin // Initialization code... end always @(posedge user_clk) begin if (!txreset_done_i) begin // Reset logic... end else begin // Normal operation... end end // Instantiate core component(s), e.g., GTXE2_CHANNEL etc. GTXE2_CHANNEL #( .SIM_DEVICE("VIRTEX7"), // Device type parameterization // Additional configurable attributes go here... ) inst_gtxe2_channel ( .GTREFCLK0(refclk), .TXRESETDONE(tx_resetdone), // Map remaining port connections accordingly... ); endmodule ``` This snippet provides insight into what initialization steps may look like but would need adaptation based on actual project requirements along with adherence to guidelines provided by manufacturers regarding optimal setup procedures for respective families of chips being utilized.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值