背景:在学习高速接口协议中,xilinx的GTH中有关于发射器的结构,以及一些模块的说明和控制。
资料:UltraScale Architecture GTH Transceivers UG576 (v1.7.1) August 18, 2021
本文为UG576的学习记录。以下内容全部在官方文档中有介绍。
发送器
发送器的各个功能模块。每个收发器transceiver均包含一个独立的发射器,该发射器由物理编码层pcs和物理层PMA组成。下图展示了发射器的功能模块。并行数据从器件逻辑流入 TX 接口,经过 PCS 和 PMA 后,以高速串行数据的形式从 TX 驱动器(TX driver)输出。
PCS(Physical Coding Sublayer):物理编码子层,属于发射器数字部分核心模块,主要负责并行数据的编码、协议处理(如 8b/10b 编码)等,为后续高速传输做准备。
PMA(Physical Medium Attachment):物理介质附加子层,多为模拟电路模块,核心功能是将 PCS 输出的并行信号转换为高速串行信号,并完成信号的幅度调整、相位校准等模拟处理。
GTH发射器TX中的关键元素是。
TX Interface
TX 8B/10B Encoder
TX Synchonous Gearbox
TX Buffer/Buffer Bypass
TX Pattern Generator
TX Polarity Control
TX Fabric Clock Output Control
TX Phase Interpolator PPM Control
TX Configurable Driver
TX Receiver Detect Support for PCI Express Designs
TX Out-of-Band Signaling
TX Interface发送器接口
GTH数据路径入口,应该在TXUSERCLK2的上升沿向TXDATA端口写入数据,实现GTH收发器传输数据。
从TX Interface进入的数据可以通过8B/10B编码器,也可以不通过编码器。输入数据位宽与TX_DATA_WIDTH属性相关。
当使用8B10B编码时:TX_DATA_WIDTH必须配置为20、40、80位。用户输入数据位宽是16、32、64(2、4、8byte)
当不使用8B10B编码时:原始数据不经过编码,直接通过接口传入。因此用户输入的原始数据位宽就是TX_DATA_WIDTH的值,即16、20、32、40、64、80位。如果配置为16、40、80位时,需要在输入数据并上控制位(TXCTRL1/TXCTRL0)。
8B10B编码后数据:
16 位原始数据(2×8)→ 编码后 20 位(2×10);
32 位原始数据(4×8)→ 编码后 40 位(4×10);
64 位原始数据(8×8)→ 编码后 80 位(8×10)。
TXUSRCLK 和 TXUSRCLK2 时钟的生成
TX接口包含两个时钟,TXUSERCLK是GTH中PCS逻辑内部时钟。其速率取决于GTHE3/4_CHANNEL 原语的内部数据路径宽度以及 GTH 发射器的 TX 线路速率。当不使用TX asynchronous gearbox时时钟计算方式如下。例如,当配置为JESD204B模式时,线速率是12.5Gbps时,TXUSERCLK Rate=312.5MHZ。
当TX asynchronous gearbox使用时TXSUERCLK所需速率
TXUSERCLK2是所有进入TX测信号的同步时钟,大多数进入的信号在TXUSERCLK2上升沿被采样。TXUSRCLK2 与 TXUSRCLK 的速率存在固定关系,该关系由 TX_DATA_WIDTH 和 TX_INT_DATAWIDTH 的设置决定。
接口位宽 |
TX_DATA_WIDTH |
TX_INT_DATAWIDTH |
TXUSERCLK2 Frequency |
2 byte |
16,20 |
0 |
FTXUSRCLK2 = FTXUSRCLK |
4 byte |
32,40 |
0 |
FTXUSRCLK2 = FTXUSRCLK/2 |
4 byte |
32,40 |
1 |
FTXUSRCLK2 = FTXUSRCLK |
8 byte |
64,80 |
1 |
FTXUSRCLK2 = FTXUSRCLK/2 |
TXSUERCLK和TXUSERCLK2必须上升沿对齐,必须是发射器参考时钟的分频或者倍频结果。
使用 TXOUTCLK 驱动 TX 接口
根据TXUSERCLK和TXUSERCLK2频率,可采用不同方式利用Ultrascale架构的时钟资源来驱动TX接口。TXOUTCLK来自于物理层PMA。
TXOUTCLK 在 2 字节或 4 字节模式下驱动 GTH 收发器的 TX 端
单通道模式下TXOUTCLK通过bufg后被用于驱动TXUSERCLK和TXUSERCLK2以及用户逻辑。这种情况下TXUSERCLK和TXUSERCLK2必须相等。
类似的多通道模式下,也可以使用这种连接方式。多通道连接时最好使用中间通道GTH收发器的TXOUTCLK最为源。
TXOUTCLK 在 4 字节或 8 字节模式下驱动 GTH 收发器的 TX 端
TXOUTCLK通过BUFG分别驱动TXUSERCLK和TXUSERCLK2,这时TXUSERCLK是TXUSERCLK2的2倍频。
类似的多通道模式下,也可以使用这种连接方式。多通道连接时最好使用中间通道GTH收发器的TXOUTCLK最为源。
TX 8B/10B 编码器
许多协议会对输出数据采用8B/10B编码。其核心是每1字节数据额外增加2bit开销。以实现DC-balance 和 bounded disparity。GTH支持对8B10B编码器旁路。
8B/10B 的位与字节顺序
8B/10B编码规则要求从最低为a0开始传输。而GTH收发器的硬件特点是从右侧位优先传输。为了匹配编码规则,GTH会自动反转位顺序。
旁路8B/10B编码器时10位字符传输规则
当编码器被旁路时,TX_DATA_WIDTH 设置为 10 的倍数(如 20、40、80 位)时,10 位字符会按以下格式传输至 TX 数据接口。
TXCTRL1:对应10位字符中的第九位。
TXCTRL0:对应10位字符中的第八位。
TXDATA八位:对应10位字符中[7:0]位。
K码
用于传输过程中的控制功能。链路同步,帧起始,结束标识。使用TXCTRL某一位来确定数据是否为K码。
可以看我的另外一篇文章关于8B/10编码介绍。
高速传输的关键:8B/10B编码学习记录_verilog 8b转10b-CSDN博客
TX同步齿轮箱
部分高速数据速率协议采用 64B/66B 编码,以在保留编码方案优势(如时钟恢复、直流平衡等)的同时,降低 8B/10B 编码的开销。TX sync gearbox具备以下特点:
支持2、4、8byte接口。
数字加扰在gearbox外部搞定。
除了常规模式外,还支持CAUI接口模式。
如上图所示分别是sync gearbox和Async gearbox模式。当你的TXUSRCLK和TXOUTCLK同源同步,使用sync gearbox。不同源则使用Async gearbox。
TX 同步齿轮箱的位与字节顺序
为了解决输入PCS的数据和PMA内部数据接口之间的差异。需要使用这个变速箱来控制输入数据和输出到PMA的数据。
在常规模式下(GEARBOX_MODE [2] = 1'b0)。采用 4 字节逻辑接口(TX_DATA_WIDTH = 32(4 字节)、TX_INT_DATAWIDTH = 1(4 字节))时,64B/66B 编码的数据流经过 TX 齿轮箱的前四个周期。
当输入数据为2位头和32位数据组成,个周期处理规则如下。
第一个周期:输入32bit数据和2个头,gearbox输出2个头于data[31:2]。
第二个周期:输入32bit数据,gearbox输出前一个周期剩余的2bit数据和本周期输入的data[31:2]。
第三个周期:输入32bit数据和2个头,gearbox输出第一个66B模块中剩余的两位数据,和第二个66B模块中两个头和data[31:4]。
第四个周期:输入32bit数据,gearbox输出前一个周期剩余的4bit数据,和本次输入的data[31:4]。
按照这个模式推下去的话,第一个66B数据剩余2bit,第二个66B数据剩余4bit,那么第三个66B剩余6bit…第16个66B剩余32bit数据。这时候如果继续输入数据那必定会造成数据的堆积。这只能使用输入和gearbox时钟有明显的倍数关系才行。
继续向后看。
使用TX sync gearbox
要使用这个功能,必须在外部添加一个序列计数器功能。TX gearbox支持2、4、8byte输入,在常规模式下,外部计数器通过使用TXSEQUENCE [6:0]、TXDATA [63:0] 和 TXHEADER [2:0] 输入信号;外部计数器的值需要发送到TXSEQUENCE [6:0]端口,以便告知gearbox目前组合到哪一步了。
对于 64B/66B 编码,计数器从 0 递增到 32,然后从 0 重新开始循环;
对于 64B/67B 编码,计数器从 0 递增到 66,然后从 0 重新开始循环。
规则,当用户数据接口宽度和内部数据接口宽度设置相同时,外部计数器必须每2个TXUSERCLK2递增一次。因为内部需要多个时钟周期来处理一个完整的数据块。
由于 64B/66B 和 64B/67B 编码方案及 TX 同步齿轮箱的特性,用户数据会在序列计数器的特定值期间被保持(暂停):
当 TX_DATA_WIDTH 与 TX_INT_DATAWIDTH 相等时,数据会暂停两个 TXUSRCLK2 周期;
当 TX_DATA_WIDTH 是 TX_INT_DATAWIDTH 的两倍时,数据会暂停一个 TXUSRCLK2 周期。
有效数据传输会在下一个 TXUSRCLK2 周期恢复。
数据输入需要暂停的位置和数据位宽的关系如下表。
下图展示了8字节数据通路,4字节内部通路,64B/66B模式下,计数器暂停。
下图展示了常规模式下,使用64/67B编码时外部计数器模式中,当使用2byte外部数据和2byte内部数据通路时,计数器值为44时发送暂停。
使用TX Async gearbox
用户侧TXUSERCLK2和内部TXOUTCLK频率和相位不同步。使用异步gearbox。
与同步gearbox差异:
同步gearbox需要在特定计数阶段暂停数据传输;而异步gearbox允许数据每个TXUSERCLK2连续输入。无需暂停。
异步gearbox用于连接频率,相位不同的时钟。原文中也并未做过多解释。
TX Buffer
PMA并行时钟域XCLK和PCS并行时钟域TXUSRCLK。要让这两个区域数据正常传输,需要满足XCLK和TXUSERCLK频率相等。两个时钟之间的相位差必须被解决。GTH发送器包含一个 TX 缓冲器和一个 TX 相位对齐电路(phase alignment),用于解决XCLK与TXUSRCLK时钟域之间的相位差。直接通过FIFO来解决两个时钟之间的差异。
TX buffer bypass
如果不使用FIFO来解决这两个时钟之间的差异,该怎么办呢?
还可以使PMA这边的XCLK和PCS这边TXUSERCLK两个时钟完全同步。使用硬件上的电路来不断的微调TXUSERCLK让它和XCLK之间的相位差越来越小。这时候就可以缩小一个FIFO的固定延迟,适用于对于延迟要求非常高应用。(xilinx注释:如果TXUSERCLK时钟频率大于325MHZ联系他们的FAE)
使用TX phase Alignment最小化通道间时钟偏斜。
对齐前,所有XCLK之间存在任意相位差。
对齐后,仅存在公共时钟源的偏斜。只要数据路径延迟保持一致。所有通道就能同步传输数据。
TX随机数生成器
PRBS伪随机序列,用于测试高速信号完整性。
XILINX支持的伪随机序列如下表。
可以选择不同的测试序列输入,每种序列对应一种测试功能。还支持错误插入功能。
TX 极性控制
如果在硬件上TXN和RXN接反了,GTH可以在数据进入串并转换前将数据反转过来。
TX结构时钟输出控制
TX 时钟分频器控制模块包含两个主要组件:串行时钟分频器控制,以及并行时钟分频器与选择器控制。
注意:图中TXOUTCLKPCS和TXOUTCLKFABRIC为冗余设计。新设计中请使用TXOUTCLK。
串行时钟分频器
每个PMA模块都有一个串行分频器。对来自PLL的时钟进行分频。以便支持更低速率。
并行时钟分频与选择
TX时钟分频器控制模块的并行时钟输出可根据线路速率要求,用作互连逻辑时钟。
TX可编程分频
所示的TX可编程分频器会使用锁相环(PLL)的输出时钟之一,生成并行输出时钟。
TX相位插值器PPM控制器
有些应用需要对PMA中数据进行微调。就会用到这个接口。位置放在PCS中,通过外部逻辑对控制器操作,进而控制PMA。
TX可配置驱动器
TX可配置驱动器专门负责把处理好的电信号高效、稳定地发送出去。用户可以控制:
差分电压控制
前光标和后光标发送预加重
校准终端电阻