在FPGA系统设计中,高速串行通信已成为现代数字系统互联的核心技术。不同于传统的并行总线架构,高速串行链路通过差分信号传输和复杂的编码方案,实现了在有限引脚资源下的超高带宽传输。本次项目基于Xilinx Virtex-7 690T与Zynq-7045平台,构建了一套混合速率通信系统,其中高速通道采用Aurora 8B/10B协议,通过GTX收发器实现6.6Gbps的传输速率,而低速控制通道则采用常规LVDS和GPIO接口。
这个设计最关键的突破点在于理解了两种截然不同的数字通信范式:电平检测体系(用于低速信号)和跳变检测体系(用于高速串行链路)。这种认知转变帮助我解决了最初在Aurora IP核配置时遇到的诸多困惑,特别是关于AC耦合电容的必要性、8B/10B编码的深层作用,以及整个物理层信号调理机制。
传统数字电路设计基于一个根本假设:信息通过电压电平的绝对大小来传递。在Virtex-7与Zynq的GPIO互联设计中,这种特性表现得尤为明显:
电平保持特性:当Zynq端的GPIO输出高电平(3.3V)表示"使能"状态时,这个电压必须在整个有效期内保持稳定。接收端的施密特触发器通过比较输入电压与阈值(典型值1.5V)来判定逻辑状态。
时序约束:在50MHz时钟驱动的SPI接口设计中,数据信号必须满足建立时间(Setup Time)2ns和保持时间(Hold Time)1ns的要求。这要求信号在时钟边沿前后保持稳定,跳变速度不能过快。
共地要求:当使用LVDS传输控制信号时,我们发现两端的GND之间若存在超过300mV的压差,就会导致接收端误判。这迫使我们在PCB布局时采用了星型接地拓扑,确保所有低速信号具有相同的参考地。
Aurora协议采用的GTX收发器则展现了完全不同的工作机理:
信息编码方式:在6.6Gbps的链路上,每个比特周期仅150ps。如此短的时间内,电压根本无法稳定到绝对电平。取而代之的是,信息通过差分对(D+和D-)之间的相对跳变来编码。一个+100mV到-100mV的跳变表示"1",而-100mV到+100mV的跳变表示"0"。
时钟恢复机制:GTX接收端包含一个Bang-Bang型时钟数据恢复电路(CDR)。它通过监测数据跳变沿的相位误差,动态调整本地压控振荡器(VCO)的频率。实测显示,当连续传输超过20个相同比特时,CDR就会因缺乏参考边沿而失锁。
模拟前端设计:接收路径包含连续时间线性均衡器(CTLE)和判决反馈均衡器(DFE)。在眼图测试中,未启用均衡时眼高仅38mV,开启CTLE+DFE后提升到82mV,显著改善了信号完整性。
关键认识:电平检测像用尺子测量固定高度,而跳变检测如同用秒表计时跑步节奏——两者测量的物理量本质不同。
在Virtex-7与Zynq的GTX互联设计中,AC耦合电容的选择经历了多次迭代:
容值计算:初始选用100nF电容,计算时间常数τ=100nF×100Ω=10μs。对于6.6Gbps信号(UI=151.5ps),τ相当于66,000个UI,远大于规范要求的200-2000UI范围。后续优化为220nF,平衡了建立时间和抗干扰能力。
电容类型:对比了普通MLCC和高频专用电容。使用普通MLCC时,在5GHz以上频段等效串联电感(ESL)导致阻抗上升,眼图出现振铃。改用Murata GJM系列高频电容后,S21参数改善明显。
布局优化:最初将电容放置在距接收端5mm位置,导致阻抗不连续。根据仿真结果,最终采用对称布局,电容距发送端2mm,差分对严格等长(±50μm)。
通过示波器观察耦合电容两端的电压,验证了理论分析:
上电初期,电容未充电时,接收端差分电压为0。开始传输数据后,电容逐渐充电至工作点(约175mV)。
当连续发送全"1"码型(未编码)时,电容电压持续上升,30μs内达到300mV,导致接收端眼图闭合。
启用8B/10B编码后,电容电压稳定在180±20mV范围内,验证了直流平衡机制的有效性。
在Vivado 2019.1中配置Aurora 64B/66B IP核时,关键参数设置如下:
tcl复制create_ip -name aurora_64b66b -vendor xilinx.com -library ip -version 12.0 \
-module_name aurora_64b66b_0
set_property -dict {
CONFIG.C_AURORA_LANES {4}
CONFIG.C_LINE_RATE {6.6}
CONFIG.C_REFCLK_FREQUENCY {165.0}
CONFIG.C_INIT_CLK {100}
CONFIG.Interface_Mode {Streaming}
CONFIG.C_USE_CHIPSCOPE {1}
} [get_ips aurora_64b66b_0]
特别需要注意:
通过ChipScope抓取的信号显示,8B/10B编码器的运行状态严格遵循以下规则:
游程差异(Running Disparity):维护当前偏差状态(RD-或RD+),初始为RD-。
码字选择:对于输入字节0xBC(控制字符K28.5),当RD-时输出"0011111010",RD+时输出"1100000101"。这两种码字的直流偏差分别为-2和+2。
状态转换:每个码字传输后,根据其偏差更新RD状态。例如,发送偏差为+2的码字后,下一周期强制进入RD-状态。
下表展示了关键控制字符的编码示例:
| 输入字节 | 名称 | RD-状态码字 | RD+状态码字 | 偏差 |
|---|---|---|---|---|
| 0x1C | K28.0 | 0011110100 | 1100001011 | 0 |
| 0x3C | K28.1 | 0011111001 | 1100000110 | +2 |
| 0x5C | K28.2 | 0011110101 | 1100001010 | 0 |
| 0x7C | K28.3 | 0011110011 | 1100001100 | 0 |
| 0x9C | K28.4 | 0011110010 | 1100001101 | 0 |
| 0xBC | K28.5 | 0011111010 | 1100000101 | +2 |
使用Tektronix DPO73304SX示波器进行眼图分析时,需注意:
探头校准:先进行差分探头(TDP1500)的端接补偿,确保在6GHz带宽下阻抗匹配。
触发设置:选择K28.5逗号字符(0011111010)作为触发模式,同步数据流分析。
测量参数:
在调试过程中遇到的典型问题及解决方案:
链路训练失败:
偶发性误码:
高温下性能下降:
基于实际项目经验,总结出以下提升高速串行链路可靠性的方法:
电源完整性优化:
PCB设计规范:
固件辅助增强:
通过本项目的实践,我们不仅成功实现了FPGA间的高速互联,更建立了一套完整的高速串行链路设计方法论。这些经验对于后续的PCIe、SATA等高速接口开发具有重要参考价值。