尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

FPGA SERDES 通用基础(三)Xilinx 7 系列 GTX 并行接口与数据位宽详解

FPGA SERDES 通用基础(三)Xilinx 7 系列 GTX 并行接口与数据位宽详解 GTX 在高速串行线路与 FPGA Fabric 之间完成数据的串并转换。进入并行侧后同一组配置中会同时出现 DATA_WIDTH、INT_DATAWIDTH、FPGA Interface Width 和 Internal Data Width。这些名称都与宽度有关但分别表示配置属性、FPGA 接口宽度和 PCS 内部通路宽度。若直接把属性值当作 TXDATA/RXDATA 的有效位数USRCLK 和 USRCLK2 的计算也会随之出错。本文依据 UG476 的 TX/RX 并行接口配置表和用户时钟关系说明 DATA_WIDTH 与 INT_DATAWIDTH 分别控制什么8B10BEN 如何改变 20/40/80 bit 配置的实际含义以及线路速率、Internal Data Width、USRCLK 和 USRCLK2 之间的对应关系。文中同时给出启用 8B/10B 和旁路编解码器的配置算例用于核对数据位宽、端口组成与时钟频率。编码状态与宽度属性 → 查表确定两类实际宽度 → 计算两级用户时钟 → 核对 DATA 与辅助端口1. 从串行线路到 FPGA 并行接口TX 与 RX 的数据方向相反但位宽转换关系基本对称。TXTXDATA → TX PCS → TX PMAPISO→ TXP/TXNRXRXP/RXN → RX PMASIPO→ RX PCS → RXDATA发送数据通路从 FPGA TX Interface 开始。FPGA 用户逻辑按照 TXUSRCLK2 向 TXDATA 提交并行数据TX PCS 再按 TXUSRCLK 处理这些数据。启用 8B/10B Encoder 时每个 8 bit 数据字节被编码为一个 10 bit 线路字符。编码后的并行数据通常经过图中的 Phase Adjust FIFO完成 TXUSRCLK 与 XCLK 时钟域之间的相位衔接在 TX Buffer Bypass 模式下则由 TX Phase Alignment 完成相位对齐。数据随后进入 TX PMA由并串转换器 PISO 转换为串行比特流并从 TXP/TXN 输出。图中的 Serial Clock、XCLK、TXUSRCLK 和 TXUSRCLK2 用于标明各段电路所在的时钟域并不表示四个时钟按固定顺序逐级分频。接收数据通路从 RXP/RXN 开始。串行比特流先进入 RX PMA由时钟数据恢复电路 CDR 提取时钟再由串并转换器 SIPO 形成内部并行数据。RX PCS 前段工作在 XCLK 域启用 RX Elastic Buffer 时Buffer 连接 XCLK 与 RXUSRCLK 两个内部并行时钟域。后级完成字符对齐启用 8B/10B Decoder 时再完成字符解码最终由 FPGA RX Interface 按 RXUSRCLK2 输出 RXDATA。TX 与 RX 都包含串行数据、PCS 内部并行数据和 FPGA 接口数据三种形态位宽配置描述的正是这些数据形态之间的对应关系。2. TX 并行接口配置TX 配置包含一个模式端口和两个位宽属性。TX8B10BEN 选择 8B/10B Encoder 的工作状态TX_DATA_WIDTH 选择 FPGA TX Interface 的数据组织TX_INT_DATAWIDTH 选择 TX PCS 内部通路宽度。配置完成后FPGA Interface Width 与 Internal Data Width 随之确定。FPGA TX Interface 是 FPGA Fabric 与 GTXE2_CHANNEL 之间的片内接口。GTXE2_CHANNEL 原语固定声明 TXDATA[63:0]实际参与传输的 TXDATA 位及辅助端口用途由 TX8B10BEN 和两个宽度属性共同确定。项目类型或层级含义TX8B10BENGTXE2_CHANNEL 输入端口选择启用或旁路 8B/10B EncoderTX_DATA_WIDTHGTXE2_CHANNEL 属性选择 FPGA TX Interface 的数据组织模式TX_INT_DATAWIDTHGTXE2_CHANNEL 属性选择 TX PCS 内部采用 2-Byte 或 4-Byte 数据通路FPGA Interface Width属性组合的结果当前模式下每个 TXUSRCLK2 周期传输的逻辑数据宽度Internal Data Width属性组合的结果TX PCS 每个 TXUSRCLK 周期处理的内部并行数据位数TX_DATA_WIDTH决定 FPGA TX Interface 的数据组织。启用 8B/10B Encoder 时属性值 20、40、80 分别形成 16、32、64 bit FPGA Interface。TX_INT_DATAWIDTH决定 TX PCS 内部通路宽度。设置为 0 选择 2-Byte 通路设置为 1 选择 4-Byte 通路启用 8B/10B 时对应的 Internal Data Width 分别为 20 bit 和 40 bit。配置结果需要同时依据 TX8B10BEN、TX_DATA_WIDTH 和 TX_INT_DATAWIDTH 查表确定。例如TX8B10BEN 1、TX_DATA_WIDTH 40、TX_INT_DATAWIDTH 0 时表中对应 32 bit FPGA Interface Width 和 20 bit Internal Data Width仅将 TX_INT_DATAWIDTH 改为 1查表结果变为 32 bit FPGA Interface Width 和 40 bit Internal Data Width。3. RX 并行接口配置RX 配置与 TX 对称。RX8B10BEN 选择 8B/10B Decoder 的工作状态RX_DATA_WIDTH 选择 FPGA RX Interface 的数据组织RX_INT_DATAWIDTH 选择 RX PCS 内部通路宽度。配置完成后FPGA Interface Width 与 Internal Data Width 随之确定。FPGA RX Interface 同样位于 FPGA Fabric 与 GTXE2_CHANNEL 之间。GTXE2_CHANNEL 原语固定声明 RXDATA[63:0]实际参与传输的 RXDATA 位及辅助端口用途由 RX8B10BEN 和两个宽度属性共同确定。项目类型或层级含义RX8B10BENGTXE2_CHANNEL 输入端口选择启用或旁路 8B/10B DecoderRX_DATA_WIDTHGTXE2_CHANNEL 属性选择 FPGA RX Interface 的数据组织模式RX_INT_DATAWIDTHGTXE2_CHANNEL 属性选择 RX PCS 内部采用 2-Byte 或 4-Byte 数据通路FPGA Interface Width属性组合的结果当前模式下每个 RXUSRCLK2 周期传输的逻辑数据宽度Internal Data Width属性组合的结果RX PCS 每个 RXUSRCLK 周期处理的内部并行数据位数RX_DATA_WIDTH决定 FPGA RX Interface 的数据组织。启用 8B/10B Decoder 时属性值 20、40、80 分别形成 16、32、64 bit FPGA Interface。RX_INT_DATAWIDTH决定 RX PCS 内部通路宽度。设置为 0 选择 2-Byte 通路设置为 1 选择 4-Byte 通路启用 8B/10B 时对应的 Internal Data Width 分别为 20 bit 和 40 bit。RX 侧同样由三个配置条件共同查表。例如RX8B10BEN 1、RX_DATA_WIDTH 40、RX_INT_DATAWIDTH 0 时表中对应 32 bit FPGA Interface Width 和 20 bit Internal Data Width仅将 RX_INT_DATAWIDTH 改为 1查表结果变为 32 bit FPGA Interface Width 和 40 bit Internal Data Width。4. USRCLK 与 USRCLK2GTX 的 TX、RX 通路各包含两级用户时钟。TXUSRCLK/RXUSRCLK 驱动 PCS 用户侧的内部并行通路TXUSRCLK2/RXUSRCLK2 驱动 FPGA Interface靠近 PMA 的 PCS 前段仍可能工作在 XCLK 域。两级用户时钟的频率关系取决于 FPGA Interface 和 PCS 内部通路每周期能够并行处理多少个字符位置。Table 3-3 和 Table 4-53 是时钟关系表并未单独列出 Internal Data Width。表中的内部并行度由 TX_INT_DATAWIDTH 或 RX_INT_DATAWIDTH 隐含给出属性为 0 时选择 2-Byte Internal Datapath每个 USRCLK 周期处理两个字符位置属性为 1 时选择 4-Byte Internal Datapath每个 USRCLK 周期处理四个字符位置。对应的实际位数需要回到 Table 3-1 或 Table 4-51 查取。配置来源并行度每个时钟周期处理的数据DATA_WIDTH 16/202-Byte FPGA Interface每个 USRCLK2 周期传输 2 个字符位置DATA_WIDTH 32/404-Byte FPGA Interface每个 USRCLK2 周期传输 4 个字符位置DATA_WIDTH 64/808-Byte FPGA Interface每个 USRCLK2 周期传输 8 个字符位置INT_DATAWIDTH 02-Byte Internal Datapath每个 USRCLK 周期处理 2 个字符位置INT_DATAWIDTH 14-Byte Internal Datapath每个 USRCLK 周期处理 4 个字符位置这里的 Byte 表示通路包含的并行字符位置数不应直接理解为编码后的物理位数。启用 8B/10B 时每个内部字符位置为 10 bit因此 2-Byte 和 4-Byte Internal Datapath 分别对应 20 bit 和 40 bit旁路 8B/10B 时实际 Internal Data Width 仍应依据配置表确定。USRCLK 等于线路速率除以查表得到的 Internal Data Width。8B10BEN 已经反映在配置表的宽度结果中计算时不再额外乘除编码效率。明确两侧的并行字符数后Table 3-3 和 Table 4-53 中的一倍、二倍关系可以展开为FPGA Interface 每个 USRCLK2 周期PCS 内部每个 USRCLK 周期完成一次接口传输所需的内部周期时钟关系2 个字符2 个字符1USRCLK2 USRCLK4 个字符2 个字符2USRCLK2 USRCLK/24 个字符4 个字符1USRCLK2 USRCLK8 个字符4 个字符2USRCLK2 USRCLK/2上表中“PCS 内部每个 USRCLK 周期”的字符数是由 TX_INT_DATAWIDTH 或 RX_INT_DATAWIDTH 的 2-Byte、4-Byte 定义展开得到。两侧并行度相同时一个内部周期即可完成一次接口传输两级时钟同频接口侧并行度是内部通路的两倍时PCS 需要运行两个内部周期因此 USRCLK 2 × USRCLK2。5. 8B10BEN 与 20/40/80 bit 接口GTXE2_CHANNEL 原语固定声明 TXDATA[63:0] 和 RXDATA[63:0]DATA_WIDTH 属性不会将这两个端口扩展到 80 bit。UG476 表中的 20、40、80 描述的是完整逻辑接口的组织方式其含义取决于 Encoder/Decoder 是否旁路。8B10BEN 状态DATA_WIDTHTXDATA/RXDATA 有效位数辅助端口的作用完整接口宽度启用20/40/8016/32/64 bit保持字符控制或状态语义16/32/64 bit 用户数据旁路16/32/6416/32/64 bit不参与数据位宽扩展16/32/64 bit 原始数据旁路20/40/8016/32/64 bit承载每个原始字符的 bit[8]、bit[9]20/40/80 bit 原始数据启用 8B/10BEncoder/Decoder 启用时FPGA Interface 只通过 TXDATA/RXDATA 传递 8 bit 用户字符。DATA_WIDTH 20、40、80 分别对应 16、32、64 bit 用户数据也就是每个接口周期传输两个、四个或八个字符。字符在 PCS 中完成 8B/10B 编解码20/40/80 不代表原语上存在同宽度的 DATA 端口。此时 TXCHARISK 用于标识发送数据字符或 K 字符RXCHARISK、RXDISPERR 和 RXNOTINTABLE 用于报告解码后的字符类型和错误状态。这些辅助端口保持控制或状态语义不参与扩展 TXDATA/RXDATA。旁路 8B/10BEncoder/Decoder 旁路后GTX 不再解释 10 bit 码组。对于 DATA_WIDTH 20、40、80 的配置每个原始 10 bit 字符中的低 8 bit 仍由 TXDATA/RXDATA 承载高 2 bit 则复用原有的辅助端口。因而 20/40/80 bit 表示由多个原语端口共同组成的 Raw Interface Width而不是 TXDATA/RXDATA 单一端口的宽度。TX 侧第 n 个原始 10 bit 字符按以下方式组成TXDATA[8n7:8n] 承载 bit[7:0]TXCHARDISPVAL[n] 承载 bit[8]TXCHARDISPMODE[n] 承载 bit[9]。DATA_WIDTH 80 时64 bit TXDATA 与两组 8 bit 辅助输入共同提供 8 个原始 10 bit 字符。Table 4-52 给出了 RX 侧的对应关系。第 n 个原始 10 bit 字符由 RXDATA[8n7:8n]、RXCHARISK[n] 和 RXDISPERR[n] 共同组成RawCharn[9:0]{RXDISPERR[n], RXCHARISK[n], RXDATA[8n7:8n]} \boldsymbol{RawChar_n[9:0]\{RXDISPERR[n],\ RXCHARISK[n],\ RXDATA[8n7:8n]\}}RawCharn​[9:0]{RXDISPERR[n],RXCHARISK[n],RXDATA[8n7:8n]}DATA_WIDTH 80 时RXDATA[63:0] 提供 8 个字符的低 8 bit共 64 bitRXCHARISK[7:0] 和 RXDISPERR[7:0] 分别提供每个字符的 bit[8] 和 bit[9]三组端口合计承载 80 bit 原始数据。Decoder 状态RXCHARISKRXDISPERR启用K 字符指示运行差异错误指示旁路原始字符的 bit[8]原始字符的 bit[9]Decoder 旁路后RXCHARISK 和 RXDISPERR 只是保留了原端口名称不能再按 K 字符和运行差异错误解释。用户逻辑需要先按 Table 4-52 重组 10 bit 原始字符再自行完成后续解码。旁路接口的工程价值这类配置的核心价值不是提高串行带宽而是将 10 bit 码组的解释权从 GTX 内置 Encoder/Decoder 移到 FPGA Fabric。用户逻辑可以直接取得完整的原始码组自行实现编解码、特殊字符定义、运行差异管理或其他 PCS 处理。旁路 Decoder 也提供了一个原始码组观察点。接收端可以先记录 RXDATA、RXCHARISK 和 RXDISPERR 重组后的 10 bit 数据再检查码组合法性、字符边界和运行差异从而区分接收码组本身的问题与后级解码处理问题。UG476 对 RX8B10BEN 的说明还明确指出旁路 8B/10B Decoder 可以降低 RX 数据通路延迟TX8B10BEN 的端口说明也给出了相同结论。这里减少的是内置编解码级带来的路径延迟具体减少的周期数和时间仍取决于完整的收发器配置不能按固定一个 USRCLK 周期估算。20/40/80 bit Raw Interface 提供了不同的并行度选择。在相同线路速率下80 bit 接口每个 USRCLK2 周期传输 8 个 10 bit 字符所需的 USRCLK2 频率只有 40 bit 接口的一半有利于降低 FPGA Interface 一侧的时序压力。DATA_WIDTH 80、INT_DATAWIDTH 1 时内部 40 bit 通路运行两个 USRCLK 周期完成一个 80 bit 接口周期的数据传输。更低的接口时钟频率也会带来额外代价。80 bit Raw Interface 会增加 FPGA Interface 的并行信号数量和布线规模如果用户逻辑需要在一个接口周期内处理八个 10 bit 字符通常还要增加并行解码单元或采用更深的流水线。这是一种以逻辑资源和并行度换取较低接口时钟频率的实现权衡。旁路模式通常不作为标准 8B/10B 链路的默认配置因为码组重组、编解码、K 字符识别、运行差异管理和错误检测都需要由 FPGA 逻辑承担。常规链路直接使用 GTX 内置功能即可获得更简单的接口和更低的 Fabric 资源开销需要访问原始码组、实现自定义 PCS、降低接口时钟频率或缩短编解码路径时再考虑旁路模式更为合适。6. 两个完整配置算例下面分别给出一个启用 8B/10B Encoder 的 TX 配置和一个旁路 8B/10B Decoder 的 RX 配置。两个算例沿用相同的配置顺序但接口数据的含义不同。算例一5 Gb/s TX启用 8B/10B Encoder配置目标为 5 Gb/s 线路速率和 32 bit 用户数据接口。设置 TX8B10BEN 1、TX_DATA_WIDTH 40、TX_INT_DATAWIDTH 1依据 TX 配置表可得到 32 bit FPGA Interface Width 和 40 bit Internal Data Width。配置项取值TX8B10BEN1TX_DATA_WIDTH40TX_INT_DATAWIDTH1FPGA Interface Width32 bitInternal Data Width40 bitTX PCS 每个 TXUSRCLK 周期处理四个 10 bit 编码字符因此fTXUSRCLK5 Gb/s40 bit125 MHz \boldsymbol{f_{TXUSRCLK}\frac{5\ \mathrm{Gb/s}}{40\ \mathrm{bit}}125\ \mathrm{MHz}}fTXUSRCLK​40bit5Gb/s​125MHz4-Byte FPGA Interface 与 4-Byte Internal Datapath 的并行度相同依据 TX 用户时钟关系表TXUSRCLK2 与 TXUSRCLK 同频均为 125 MHz。用户数据吞吐量为32 bit×125 MHz4 Gb/s5 Gb/s×810 \boldsymbol{32\ \mathrm{bit}\times125\ \mathrm{MHz}4\ \mathrm{Gb/s}5\ \mathrm{Gb/s}\times\frac{8}{10}}32bit×125MHz4Gb/s5Gb/s×108​TX_DATA_WIDTH 40 表示接口组织模式并不表示 TXDATA 端口传输 40 bit 用户数据。该配置下用户逻辑每个 TXUSRCLK2 周期提交 32 bit 数据GTX 内部 Encoder 将四个 8 bit 字符编码为四个 10 bit 字符再送入 40 bit 内部通路。算例二6.25 Gb/s RX旁路 8B/10B Decoder配置目标为接收 6.25 Gb/s 原始串行数据并以 80 bit Raw Interface 送入 FPGA Fabric。设置 RX8B10BEN 0、RX_DATA_WIDTH 80、RX_INT_DATAWIDTH 1依据 RX 配置表可得到 80 bit FPGA Interface Width 和 40 bit Internal Data Width。配置项取值RX8B10BEN0RX_DATA_WIDTH80RX_INT_DATAWIDTH1FPGA Interface Width80 bit Raw InterfaceInternal Data Width40 bitRX PCS 每个 RXUSRCLK 周期处理四个原始 10 bit 字符因此fRXUSRCLK6.25 Gb/s40 bit156.25 MHz \boldsymbol{f_{RXUSRCLK}\frac{6.25\ \mathrm{Gb/s}}{40\ \mathrm{bit}}156.25\ \mathrm{MHz}}fRXUSRCLK​40bit6.25Gb/s​156.25MHz80 bit Raw Interface 每个 RXUSRCLK2 周期输出八个原始 10 bit 字符而 40 bit 内部通路每个 RXUSRCLK 周期处理四个字符。接口并行度是内部通路的两倍因此fRXUSRCLK2fRXUSRCLK278.125 MHz \boldsymbol{f_{RXUSRCLK2}\frac{f_{RXUSRCLK}}{2}78.125\ \mathrm{MHz}}fRXUSRCLK2​2fRXUSRCLK​​78.125MHzGTXE2_CHANNEL 的 RXDATA 端口仍为 64 bit。旁路 Decoder 后每个原始 10 bit 字符由 RXDATA 提供低 8 bitRXCHARISK 和 RXDISPERR 分别复用为第 8 bit 和第 9 bit八组字符共同构成逻辑上的 80 bit Raw Interface。吞吐量校验为80 bit×78.125 MHz6.25 Gb/s \boldsymbol{80\ \mathrm{bit}\times78.125\ \mathrm{MHz}6.25\ \mathrm{Gb/s}}80bit×78.125MHz6.25Gb/s该算例在吞吐量校验时不再乘以 8/10 编码效率因为 FPGA Fabric 接收的是完整的原始 10 bit 字符而不是 Decoder 输出的 8 bit 用户字符。它同时说明80 bit 是 DATA 与辅助端口共同形成的逻辑接口宽度并非 RXDATA 端口本身扩展到了 80 bit。7. 总结GTX 并行接口包含两类配置属性和两类实际宽度。DATA_WIDTH 是接口组织属性INT_DATAWIDTH 用于选择 PCS 内部的 2-Byte 或 4-Byte Datapath二者组合后由 UG476 配置表确定 FPGA Interface Width 和 Internal Data Width。属性值、FPGA 接口宽度与 PCS 内部通路宽度不能直接等同。8B10BEN 决定并行数据的语义。启用内置 8B/10B Encoder/Decoder 时DATA_WIDTH 20、40、80 分别对应 16、32、64 bit 用户数据GTX 在 PCS 内部完成 8 bit 字符与 10 bit 码组之间的转换。旁路 Encoder/Decoder 且 DATA_WIDTH 20、40、80 时这些属性值表示 Raw Interface Width其中 80 bit 模式需要由 64 bit DATA 端口与两组 8 bit 辅助端口共同承载并不表示 GTXE2_CHANNEL 存在独立的 80 bit TXDATA 或 RXDATA 端口。两级用户时钟分别对应 PCS 用户侧内部通路和 FPGA 接口。USRCLK 的频率由线路速率除以 Internal Data Width 得到USRCLK2 的频率由接口侧与内部通路的并行度关系确定。两侧每周期处理的字符数相同时USRCLK2 与 USRCLK 同频FPGA Interface 的并行度为内部通路的两倍时USRCLK2 为 USRCLK 的二分频。因此一组完整的 GTX 并行接口配置应同时明确编码状态、DATA_WIDTH、INT_DATAWIDTH、查表得到的两种实际宽度以及 USRCLK/USRCLK2 的频率关系。只有这些参数在数据位宽、字符数量和吞吐量上相互一致串行线路、PCS 内部通路与 FPGA Fabric 之间的数据传输关系才是闭合的。
返回列表