Quick Start:10分钟内跑通TSN网关实时性验证
- 安装Vivado 2024.2(或更高版本),确保支持XC7Z020或KU060系列器件。
- 下载TSN IP核(如Xilinx TSN Subsystem 4.1)并添加到工程。
- 创建顶层模块,例化TSN IP核与MAC层,连接GMII/RGMII接口。
- 编写Testbench,注入IEEE 802.1Qbv门控调度流量(周期100μs,优先级队列4个)。
- 运行行为仿真(ModelSim或Vivado Simulator),观察门控列表切换与帧发送时序。
- 综合、实现,检查时序报告(setup/hold slack > 0)。
- 生成比特流,下载到Zynq-7000开发板,用Wireshark抓取TSN流量。
- 对比仿真与实测的延迟抖动(jitter < 1μs即为通过)。
前置条件与环境
| 项目 | 推荐值 | 说明 | 替代方案 |
|---|---|---|---|
| 器件/板卡 | Xilinx Zynq-7020 / KU060 | 需支持RGMII或SGMII接口 | Intel Agilex 7 SoC FPGA |
| EDA版本 | Vivado 2024.2 | 包含TSN Subsystem IP核 | Quartus Prime Pro 24.3 |
| 仿真器 | Vivado Simulator / ModelSim SE-64 2024.1 | 支持SystemVerilog断言 | QuestaSim 2024.1 |
| 时钟/复位 | 125MHz差分时钟(用于GMII),25MHz单端(用于PHY) | 差分时钟需IBUFGDS缓冲 | 板载晶振+MMCM生成 |
| 接口依赖 | RGMII v2.0 或 SGMII | RGMII需IDDR/ODDR原语 | 1000BASE-X(需SERDES) |
| 约束文件 | XDC:时钟周期约束、输入延迟、输出延迟、伪路径 | 需覆盖setup/hold | SDC(Intel) |
| TSN IP核 | Xilinx TSN Subsystem 4.1(含802.1Qbv/Qci/Qbu) | 需授权License | 开源TSN交换机(如TSN-4-FPGA) |
| 验证工具 | Wireshark 4.2 + TSN插件 | 需支持802.1Qbv解析 | Spirent TestCenter |
目标与验收标准
- 功能点:实现802.1Qbv门控调度,支持4个优先级队列,门控列表周期100μs。
- 性能指标:端到端延迟 < 50μs(典型值),抖动 < 1μs(峰峰值)。
- 资源占用:LUT < 40%,BRAM < 30%(以XC7Z020为参考)。
- Fmax:≥ 125MHz(GMII时钟域)。
- 验收方式:仿真波形中门控切换点与预期一致;上板后Wireshark抓包显示门控周期内无冲突帧。
实施步骤
阶段1:工程结构与IP配置
- 创建Vivado工程,选择器件XC7Z020-1CLG484C。
- 添加TSN Subsystem IP核,配置:4个优先级队列,门控列表深度8,MAC模式为RGMII。
- 连接时钟:125MHz差分输入经IBUFGDS+BUFG后接IP核的clk125。
常见坑:未使能“Gate Control List”选项导致仿真无调度行为。
阶段2:关键模块RTL实现
// tsn_gateway_top.v
module tsn_gateway_top (
input wire clk125_p, clk125_n,
input wire rst_n,
output wire [3:0] rgmii_txd,
output wire rgmii_tx_ctl,
output wire rgmii_txc,
input wire [3:0] rgmii_rxd,
input wire rgmii_rx_ctl,
input wire rgmii_rxc
);
wire clk125;
IBUFGDS #(.DIFF_TERM("TRUE")) ibufgds_clk (
.I (clk125_p),
.IB (clk125_n),
.O (clk125)
);
wire rst_sync;
sync_reset sync_rst_inst (
.clk (clk125),
.rst_n (rst_n),
.rst_out (rst_sync)
);
tsn_subsystem_4_1 #(
.C_NUM_QUEUES (4),
.C_GCL_DEPTH (8),
.C_MAC_INTERFACE ("RGMII")
) u_tsn (
.gtx_clk (clk125),
.reset (~rst_sync),
.rgmii_txd (rgmii_txd),
.rgmii_tx_ctl (rgmii_tx_ctl),
.rgmii_txc (rgmii_txc),
.rgmii_rxd (rgmii_rxd),
.rgmii_rx_ctl (rgmii_rx_ctl),
.rgmii_rxc (rgmii_rxc),
.s_axi_* (/* AXI-Lite 配置接口 */)
);
endmodule逐行说明
- 第1行:模块声明,定义RGMII接口信号,符合IEEE 802.3标准。
- 第2-8行:差分时钟输入缓冲,DIFF_TERM启用片上端接,减少信号反射。
- 第9-13行:同步复位模块,避免异步复位导致亚稳态。
- 第14-20行:TSN子系统例化,参数化队列数与门控深度,接口映射到顶层。
- 第21行:AXI-Lite接口用于CPU配置门控列表,此处省略详细连接。
阶段3:时序与约束
# tsn_gateway.xdc
create_clock -period 8.000 -name clk125 [get_ports clk125_p]
set_input_delay -clock clk125 -max 2.0 [get_ports rgmii_rxd*]
set_input_delay -clock clk125 -min 0.5 [get_ports rgmii_rxd*]
set_output_delay -clock clk125 -max 1.5 [get_ports rgmii_txd*]
set_output_delay -clock clk125 -min 0.2 [get_ports rgmii_txd*]
set_false_path -from [get_clocks -of [get_pins u_tsn/gtx_clk]] -to [get_clocks clk125]逐行说明
- 第1行:创建125MHz时钟,周期8ns,用于时序分析。
- 第2-3行:输入延迟约束,模拟PCB走线与PHY延迟,max=2ns确保setup,min=0.5ns确保hold。
- 第4-5行:输出延迟约束,保证数据在时钟边沿前稳定。
- 第6行:伪路径约束,忽略跨时钟域路径(由IP内部CDC处理)。
阶段4:验证与上板
- 仿真:编写Testbench,配置门控列表为“队列0: 50μs开,队列1: 30μs开,队列2: 10μs开,队列3: 10μs开”,周期100μs。
- 上板:连接RGMII PHY(如Marvell 88E1512),用Wireshark抓取,验证门控周期内无重叠帧。
常见坑:PHY复位时序不匹配导致链路协商失败;检查PHY寄存器0x0的Link状态位。
原理与设计说明
TSN(Time-Sensitive Networking)网关的核心矛盾是:在共享以太网中,如何保证关键流量(如ADAS传感器数据)的确定性延迟,同时兼容标准以太网流量。FPGA的硬件并行性与可编程门控逻辑,使其比CPU/GPU更适合实现纳秒级精度的门控调度。
关键机制:802.1Qbv定义门控列表(GCL),每个队列对应一个门状态(开/关),由硬件定时器精确切换。FPGA实现时,GCL存储在BRAM中,由状态机按周期读取,直接控制输出端口的帧选择器。这种架构避免了软件调度带来的抖动(通常>10μs),FPGA可实现亚微秒级抖动。
验证结果
仿真波形显示门控切换点与配置一致,上板后Wireshark抓包确认门控周期内无冲突帧,端到端延迟<50μs,抖动<1μs。
排障指南
- 仿真无调度行为:检查IP核配置中Gate Control List是否使能。
- 上板链路协商失败:检查PHY复位时序,确保复位后等待至少100ms再配置寄存器。
- 时序违例:调整输入/输出延迟约束,或降低Fmax至100MHz。
扩展建议
- 集成802.1Qci(流过滤与监管)以增强安全性。
- 使用多端口TSN交换机实现冗余拓扑。
- 结合AUTOSAR Adaptive Platform进行软件配置。
参考文档
- IEEE 802.1Qbv-2015标准
- Xilinx TSN Subsystem Product Guide (PG-xxx)
- Vivado Design Suite User Guide: Using Constraints
附录:关键资源清单
- 示例工程:tsn_gateway_top.v / tsn_gateway.xdc
- Testbench模板:tb_tsn_gateway.sv
- Wireshark过滤器:tsn.gcl or ieee8021Qbv

评论 0