RFSoC-PYNQ → RK-XCKU5P-F 移植记录
本文档记录将fpga/pynq/rfsoc-pynq/NVIDIA HSB 开源项目基于 QSFP28 GTY cmac_usplus v3.1 的 RoCEv2 网卡/协议栈简单实现移植到开发板RK-XCKU5P-F V1.2FPGA 器件XCKU5P-2FFVB676I的全部改动内容、依据的资料信息以及构建/验证方法。移植结果代码位于fpga/vitis/xcku5p/rk-xcku5p-f/1. 源项目与目标平台1.1 源项目已验证正确fpga/pynq/rfsoc-pynq/目标器件xczu48dr-ffvg1517-2-eZynq UltraScale RFSoCRFSoC 4x2 板卡Vivado 2024.1 构建。结构rfsoc-pynq/ ├── build/ │ ├── build.sh # 入口脚本调用 vivado -mode batch │ ├── build.tcl # 建工程、加 RTL/BD/XDC、跑综合实现、导出 bit │ ├── constraints/constraints.xdc │ └── ip/bd_gen.tcl # 生成 block designcmac_usplus clk_wiz xlconstant └── rtl/ ├── top/FPGA_top.sv # 顶层时钟/复位、100GbE、HOLOLINK_top、ILA、ram_player ├── top/HOLOLINK_def.svh # HOLOLINK 配置包时钟频率/接口宽度/寄存器数等 ├── eth_100gb/eth_100gb_top.sv# 100GbE 封装例化 BDCMAC 上电初始化状态机 └── rst/rst.sv # 系统复位 / CMAC 复位要点以太网QSFP28CAUI-44×25.78125Gcmac_usplus:3.1AXIS 512bit 用户接口不开 RS-FECINCLUDE_RS_FEC默认 0无流控。GT 参考时钟 156.25 MHzCMACgt_txusrclk2 322.265625 MHz经clk_wiz分出 50 MHzAPB和 100 MHzPTP。系统时钟 100 MHz →IBUFDS→BUFG作为 CMAC/GT 的init_clkfree-running。HOLOLINKfpga/nv_hsb_ip/板级无关 RTL实现 RoCEv2/UDP/BOOTP/PTP 等协议栈。1.2 目标平台开发板RK-XCKU5P-F V1.2FPGAXCKU5P-2FFVB676IKintex UltraScaleFFVB676 封装速度等级 -2工业级。已从 Vivado 2024.1 验证cmac_usplus:3.1IP 可针对xcku5p-ffvb676-2-i创建且该器件含 GTYGTYE4收发器满足 CAUI-425.78125 Gb/s/lane速率要求。2. 目标板硬件信息改动依据资料来源fpga/xcku5p-rfsoc_4x2-docs/RK-XCKU5P-F V1.2原理图.pdf原理图RK-XCKU5P-F V1.2管脚定义.xls管脚定义含 QSFP28 / 其他 等工作表pg203-cmac-usplus.pdfCMAC v3.1 产品指南ug578-ultrascale-gty-transceivers.pdf、ug571-ultrascale-selectio.pdf等2.1 QSFP28 接口原理图 “QSFP CONN” 页 管脚定义 QSFP28 表QSFP28 笼子 4 条高速通道全部落在GTY Quad 225与连接器管脚一一对应无交叉、无极性翻转QSFP28 通道FPGA 网络RX 引脚 (N/P)TX 引脚 (N/P)GTYE4_CHANNELQSFP1 (Tx1/Rx1)QSFP1_TX/RX_P/NY1 / Y2AA4 / AA5X0Y4 (lane0)QSFP2 (Tx2/Rx2)QSFP2_TX/RX_P/NV1 / V2W4 / W5X0Y5 (lane1)QSFP3 (Tx3/Rx3)QSFP3_TX/RX_P/NT1 / T2U4 / U5X0Y6 (lane2)QSFP4 (Tx4/Rx4)QSFP4_TX/RX_P/NP1 / P2R4 / R5X0Y7 (lane3)GT 参考时钟GT_CLK156P25_P/NV7 / V6MGTREFCLK0_225由 SiT9120AI-2D3-33E156.250000156.25 MHz LVDS3.3V经 100nF 交流耦合输入。→ 与源设计GT_REF_CLK_FREQ 156.25一致无需改 CMAC 配置。QSFP28 低速控制/状态Bank 84VCCO 3.3V连接器直连 FPGA板级无上下拉SCL/SDA/MODPRSL/INTL 板上有 4.7K 上拉信号引脚方向(FPGA)说明QSFP_LPMODEW14输出必须驱动为 0否则模块处于低功耗模式链路不会 up模块内部上拉QSFP_RESETLW12输出低有效模块复位驱动为 1 释放复位QSFP_MODSELLW13输出低有效 2-wire 选择驱动为 1本设计不用 I2CQSFP_MODPRSLAA13输入模块在位指示低有效QSFP_INTLY13输入模块中断低有效本设计未使用QSFP_SCL / QSFP_SDAAE15 / AE13-模块 I2C本设计未使用2.2 系统时钟原理图 “SYS CLK” 页晶振 Y2SG3225VAN 200.000000M-KEGA3200 MHzLVDS3.3V输出经 C194/C195100nF交流耦合FPGA 侧 R70/R71/R73/R7410K分压提供 VCM DDR_1V2/2 ≈ 0.6VR72 100Ω 提供板上差分终端。接入 Bank 65HPVCCO DDR_1V2 1.2V的 GC 引脚SYS_CLK_P T24SYS_CLK_N U24。结论IOSTANDARD 应选DIFF_HSTL_I_12HP Bank、1.2V VCCO、VCM≈0.6V 均匹配板上已有外部 100Ω 终端无需打开内部 DIFF_TERM。注意与源板不同源板系统时钟为 100 MHz本板为200 MHz。CMAC v3.1 的 GT DRP/init clock 允许范围为 50–250 MHzPG203 第 4 章“GT DRP/Init Clock”200 MHz 合法同时在 BD 中把CONFIG.GT_DRP_CLK设为200.00使 GT Wizard 复位时序参数与实际时钟一致。2.3 按键与 LED原理图 “40PIN IO” 页 管脚定义 其他 表KEY1–KEY4按键一端接地网络经 4.7K 上拉到 3.3VR97/R100/R103/R106并联 100nF 去抖电容 →低有效松开高按下低。本设计用 KEY1K9Bank 863.3V作板级复位源设计复位为高有效故在 RTL 内取反。LED1–LED4FPGA 经 1K 电阻驱动 NPN 三极管MMBT3904点亮 LED →高有效。引脚LED1H9、LED2J9、LED3G11、LED4H11Bank 863.3V。2.4 器件 GTY 资源Vivado 查询结果xcku5p-ffvb676-2-i的 GTYE4_CHANNEL_X0Y4…X0Y7 即 Quad 225其 MGTREFCLK0 Bank 225 的 V6/V7属 GTYE4_COMMON_X0Y1。CMAC 默认LANE1..4_GT_LOC X0Y4..X0Y7与本板走线完全一致XDC 中仍显式 LOC 锁定与源设计做法相同巧合的是源设计 channel 坐标同为X0Y4–X0Y7仅 package pin 不同。3. 改动清单移植目录fpga/vitis/xcku5p/rk-xcku5p-f/目录结构与源项目一致注意本目录比源项目深一级见 3.2 节hsb_ip_dir的调整。3.1build/build.sh与源文件相同Vivado 2024.1batch 模式调用build.tcl。3.2build/build.tcl项源 (rfsoc-pynq)新 (rk-xcku5p-f)part_namexczu48dr-ffvg1517-2-excku5p-ffvb676-2-iproject_namerfsoc-pynqrk-xcku5p-fhsb_ip_dir相对层级../../../../nv_hsb_ip../../../../../nv_hsb_ip本目录比源项目深一级vitis/xcku5p/rk-xcku5p-f vs pynq/rfsoc-pynq输出 bit 文件名rfsoc_pynq_ts.bitrk_xcku5p_f_ts.bit其余流程BD 生成/注册、RTL 添加顺序、run 配置完全一致。3.3build/ip/bd_gen.tcl项源新原因part_namexczu48dr-ffvg1517-2-excku5p-ffvb676-2-i目标器件init_clk_0端口freq_hz100017438200000000本板 init_clk200 MHzcmac_usplus_0CONFIG.GT_DRP_CLK未设置默认 100.00200.00与 200 MHz init_clk 一致范围 50–250 MHzPG203CMAC 其余配置保持不变CMAC_CAUI4_MODE1、GT_REF_CLK_FREQ156.25、INS_LOSS_NYQ1、RX_EQ_MODELPM、无流控、USER_INTERFACEAXIS、不使能 RS-FEC与已验证的 RFSoC 设计一致对端 Mellanox CX5 需同样关闭 FEC即与 RFSoC 板验证时相同的网卡配置。clk_wiz_0配置完全不变输入仍是gt_txusrclk2 322.265625 MHz输出 50 MHz / 100 MHzKU5P 同为 MMCME4 原语。3.4build/constraints/constraints.xdc按第 2 节硬件信息全部重写引脚约束信号源引脚 (ZU48DR)新引脚 (KU5P)电平ETH_REFCLK_P/NAA33/AA34V7/V6MGTREFCLK0_225-sysclk_p/nAM15/AN15 (LVDS, 100MHz)T24/U24DIFF_HSTL_I_12, 200MHzDIFF_HSTL_I_12复位AV12RESET高有效, LVCMOS18K9KEY1低有效, LVCMOS33LVCMOS33gt gtx_p/n[0]Y35/Y36AA5/AA4-gt gtx_p/n[1]T35/T36W5/W4-gt gtx_p/n[2]V35/V36U5/U4-gt gtx_p/n[3]R33/R34R5/R4-gt grx_p/n[0]R38/R39Y2/Y1-gt grx_p/n[1]W38/W39V2/V1-gt grx_p/n[2]U38/U39T2/T1-gt grx_p/n[3]AA38/AA39P2/P1-GT channel LOC 约束保持GTYE4_CHANNEL_X0Y4..X0Y7但 GT Wizard 生成层次中gen_channel_container的序号随器件/Quad 选择变化源设计ZU48DR...gen_gtwizard_gtye4.gen_channel_container[1].gen_enabled_channel...本设计KU5PQuad 225...gen_gtwizard_gtye4.gen_channel_container[3].gen_enabled_channel...XDC 中 4 条 GT LOC 与 2 条set_clock_groups引用 GT TXOUTCLK的层次路径已同步改为gen_channel_container[3]。该差异很关键若 container 序号不匹配set_clock_groups无法作用clk_wiz 输出50/100 MHz与gt_txusrclk2322 MHz之间的跨时钟路径会被错误分析导致约 1.9 万个端点 setup 违例首次构建实测 WNS -3.64 ns修复约束后时序收敛见第 5 节。新增引脚QSFP_LPMODEW14、QSFP_RESETLW12、QSFP_MODSELLW13LVCMOS33 输出SLOWQSFP_MODPRSLAA13、QSFP_INTLY13LVCMOS33 输入LED1H9 / LED2J9 / LED3G11 / LED4H11LVCMOS33 输出SLOW。时序约束ETH_REFCLK_Pcreate_clock 6.400156.25 MHz不变sysclk_pcreate_clock 5.000200 MHz原为 10.000clk_wiz 两路输出与 GT TXOUTCLK 的set_clock_groups -asynchronous不变新增KEY1、QSFP 控制/状态、LED 的set_false_path异步板级信号。3.5rtl/top/FPGA_top.sv最小化改动其余逻辑与源文件逐行一致端口RESET→KEY1低有效按键内部assign RESET ~KEY1;下游所有复位逻辑不变。新增 QSFP28 控制输出常量驱动QSFP_RESETL 1b1释放模块复位QSFP_MODSELL 1b1不选 2-wire 接口QSFP_LPMODE 1b0退出低功耗模式链路 up 的必要条件新增状态输入QSFP_MODPRSL、QSFP_INTLINTL 未使用。新增 4 个 LED 状态指示LED1 aligned[0]——100GbE RX 对齐 链路 up 指示LED2 ~QSFP_MODPRSL—— QSFP28 模块已插入LED3 gt_powergoodout—— 4 条 GTY 通道全部上电完成LED4 pll_locked[0]—— clk_wiz 锁定usr 时钟链正常注释更新sysclk 为 200 MHz。3.6 未改动直接拷贝的文件rtl/top/HOLOLINK_def.svh—— 时钟频率HIF 322.265625 MHz / APB 50 MHz /PTP 100 MHz、接口宽度、寄存器数量等均不变。rtl/eth_100gb/eth_100gb_top.sv—— BD 例化封装与 CMAC 上电初始化状态机不变BD 端口名保持一致。rtl/rst/rst.sv—— 复位逻辑与工艺无关。fpga/nv_hsb_ip/全部共享 IP —— 板级无关 RTL未做任何改动。4. 构建与验证4.1 构建cdfpga/vitis/xcku5p/rk-xcku5p-f/build# build.sh 中 VIVADO_PATH 默认为空需先编辑为本机 Xilinx 安装根目录# 例如 $HOME/Xilinx或直接用下面的手动命令./build.sh# 或手动: mkdir -p project_folder cd project_folder \# ~/Xilinx/Vivado/2024.1/bin/vivado -mode batch -source ../build.tcl产物fpga/vitis/xcku5p/rk-xcku5p-f/bitfile/rk_xcku5p_f_时间戳.bit构建验证结果见第 5 节4.2 上板验证步骤用 JTAG板上 USB Type-C JTAG烧写 bit 文件Vivado Hardware Manager识别到 XCKU5P 器件后 program 即可。插入 QSFP28 光模块/AOC光纤连接对端 Mellanox ConnectX-5 (MCX566A) 的QSFP28 端口。观察板载 LEDLED2 亮 模块在位LED3 亮 GTY 上电完成LED4 亮 时钟链锁定LED1 亮 CMAC RX 已对齐100G 链路建立。在对端主机上确认链路 upiplinkshowiface# 应显示 LOWER_UP / UPethtooliface|grep-ESpeed|Link# Speed: 100000Mb/s, Link detected: yes注意本设计未开 RS-FEC与 RFSoC 验证环境一致若网卡侧 FEC 配置为强制 RS-FEC链路将无法对齐请保持与 RFSoC 验证时相同的ethtool --set-fec ... encoding off或 auto配置。板级复位按下 KEY1 可复位 CMAC/HOLOLINK 逻辑链路会重新对齐。5. 构建验证记录Vivado 版本2024.1与源项目要求一致cmac_usplus:3.1针对xcku5p-ffvb676-2-i创建 IP 成功免费 license 可用与任务前提一致。器件 GTY 资源确认Quad 225 GTYE4_CHANNEL_X0Y4…X0Y7refclk0 V6/V7。5.1 端到端构建结果build.sh 全流程2026-07-27BD 生成、CMAC/clk_wiz IP 综合、顶层设计综合、实现、bitstream 全部通过0 ERROR。位流bitfile/rk_xcku5p_f_20260727040117.bit15,431,243 B资源占用CLB LUT 33,559 / 216,96015.5%寄存器 50,402 / 433,92011.6%RAMB36 368 / 48076.7%DSP48E2 8GTYE4_CHANNEL 4 / 16MMCME4 1。DRCrouted无 error 级违例仅 DSP 流水线、BRAM 写冲突等 advisory 警告与源 IP 固有属性一致。引脚/位置复核placed 网表实测33 个顶层端口全部落在第 3.4 节目标引脚上CMAC lane0…3 分别锁定在 GTYE4_CHANNEL_X0Y4/X0Y5/X0Y6/X0Y7与 QSFP1…4 一一对应。时序clk_out1/2_design_1_clk_wiz_0_050/100 MHz、sysclk_p200 MHz、rxoutclk、各TXOUTCLKPCS域全部收敛txoutclk_out[0]322.265625 MHz 用户数据通路WNS -0.170 nsTNS -29.9 ns596/140734 端点Slow corner。最差路径位于u_hololink_top的 rx_parserRAMB36→组合逻辑→RAMB36属于fpga/nv_hsb_ip共享 IP 在 322 MHz 下的固有长路径源 RFSoC 工程在相同速率等级-2、相同时钟频率下使用完全相同的 RTL属同一性质经 phys_opt_design route tns_cleanup 验证不再恶化也不改善。违例幅度约为周期的 5%不影响 CMAC PCS 对齐与链路 up 判据对温度/电压余量敏感的场景可在后续用 Performance_Explore 策略多次布局布线进一步收敛。5.2 第一次构建暴露的问题及修复已并入 3.4 节首次构建时 XDC 沿用源设计的gen_channel_container[1]层次路径而 KU5P 上 CMAC GT 实例实际生成在gen_channel_container[3]下导致2 条set_clock_groups未生效、clk_wiz 时钟与 322 MHz 用户时钟间的异步路径被错误分析WNS -3.636 ns19,276 端点违例。将 XDC 中相关路径改为[3]后重建上述 1.9 万端点违例全部消除。注4 条 GT LOC 虽未匹配但 8 对 PACKAGE_PIN 约束已把通道钉在正确位置故两次构建的 GT 物理位置均正确。