资讯动态

PCIe、以太网、SATA、SAS与通用SerDes:五种协议链路设计与调试避坑指南

发布时间:2026/9/21 15:06:37 来源:尧图企业网站定制
1. 五种SerDes协议到底在解决什么问题1.1 从并行总线到串行链路的必然转向早年间做硬件的人都有一个共同记忆一块板子上密密麻麻的走线32位、64位并行数据线加上地址线、控制线PCB层数压不下来时序还特别难收敛。那个时代芯片之间通信靠的是并行总线时钟频率一上去各条线之间的偏斜skew就成了噩梦。线越多、跑得越快同步就越难做PCB面积和成本也跟着水涨船高。SerDesSerializer/Deserializer串行器/解串器的出现本质上是把多车道并行换成了单车道高速串行。发送端把并行数据串成一路高速比特流发出去接收端再从比特流里恢复出时钟和数据。线少了偏斜问题自然消失但代价是单条链路的速率必须做得非常高于是就有了均衡、时钟恢复、编码这些技术。我经常用高速公路来类比并行总线像是一条几十车道的普通公路车多但每辆车速度有限路口调度极其复杂SerDes则像一条设计精良的高铁专线只有一条轨道但列车速度极快靠精密的信号系统保证不撞车。PCIe、以太网、SATA、SAS这些协议本质上都是跑在这条高铁专线上的不同调度规则。1.2 五种协议的分层定位与适用边界把PCIe、以太网、SATA、SAS、以及广义的通用SerDes放在一起看它们其实处在不同的抽象层级上解决的问题也各不相同。PCIe是典型的芯片间/板内互连协议主机CPU和显卡、NVMe SSD、网卡之间的通信基本都靠它。它的特点是低延迟、高带宽、点对点拓扑结构相对简单主要靠PCIe Switch做扩展。以太网则是系统间/设备间组网协议从板内两个芯片的背板连接到跨机房的长距离传输都能覆盖。它的分层最完整MAC层、PHY层分工明确速率从10M一路做到800G甚至更高。SATA是存储专用的串行协议面向单盘连接成本低、兼容性好机械硬盘时代是绝对主力。SAS可以理解为SATA的企业级加强版支持双端口、更高的可靠性和更复杂的拓扑通过Expander扩展在企业级存储阵列里长期占据主导。而通用SerDes更多是指FPGA、ASIC里那些可配置的高速收发器它们本身不绑定具体协议可以被配置成PCIe、以太网、SATA、JESD204B等各种模式。这也是为什么做FPGA的人总说SerDes是万能的物理层。理解这五种协议的定位差异是后面拆解设计细节的前提。选错了协议后面再怎么优化都是白费力气。1.3 为什么值得深挖SerDes的设计细节很多人做项目时对SerDes是黑盒心态链路通了就行参数不去深究。但实际踩坑的时候问题往往就出在这些细节上。比如PCIe链路训练卡在某个LTSSM状态出不来比如以太网在特定线缆长度下误码率飙升比如SATA盘在高温环境下掉盘——这些都不是换个驱动能解决的必须回到物理层和协议层去找原因。我个人的经验是把SerDes的均衡机制、时钟恢复原理、编码方式这三块吃透能解决八成以上的链路问题。剩下的两成靠的是对具体协议状态机的熟悉程度。这篇内容就是把这五种协议放在一起横向对比把每个协议里最容易被忽略但又最关键的设计点挑出来讲清楚。2. PCIe从枚举到LTSSM的完整链路建立2.1 PCIe枚举过程与配置空间PCIe设备上电后第一件事不是传数据而是被发现。这个过程叫枚举Enumeration由主机侧的RCRoot Complex主导。RC会从Bus 0开始扫描逐个读取每个设备配置空间的Vendor ID和Device ID确认设备存在后给它分配Bus号、Device号、Function号再分配BARBase Address Register空间。配置空间是PCIe设备的身份证前64字节是标准头后面是能力结构Capability Structure。做驱动开发的人对这块应该很熟读配置空间基本靠lspci -vvv或者直接操作ECAM。我见过不少新手卡在设备识别不到的问题上最后发现是BAR空间没分配对或者RC的枚举范围配置有问题。提示调试PCIe枚举问题时先确认物理链路是否已经建立Link Up再看配置空间能否正常读取。链路没起来枚举一定失败这时候去查配置空间是浪费时间。2.2 LTSSM状态机链路训练的核心LTSSMLink Training and Status State Machine是PCIe物理层最核心的状态机链路能不能起来全看它。整个状态机有十几个状态但实际调试中最常打交道的是这几个Detect检测对端是否存在靠接收器检测电气空闲Electrical Idle来判断。Polling交换TS1/TS2有序集协商链路宽度和速率。Configuration确定Link Number和Lane Number完成 lane 到 lane 的映射。Recovery速率切换或错误恢复时进入重新做均衡。L0正常工作状态数据开始传输。Configuration阶段又细分为多个子阶段每个子阶段都有特定的报文流转。比如Configuration.Linkwidth.Start阶段会发送TS1有序集里面带着Link Number和Lane Number信息双方通过比对确认哪些lane可以组成链路。这个过程如果出错链路宽度就会降级比如x16的卡只跑成x4。我实测过一个案例一块PCIe x8的采集卡插在x16插槽上系统只识别成x4。查下来是其中几条lane的AC耦合电容焊接不良导致Configuration阶段部分lane协商失败链路自动降级。这种问题用软件工具很难直接定位得靠示波器抓有序集才能看出来。2.3 PCIe供电与信号建链的常见误区热词里有个问题很典型PCIe为何还需要单独供电。很多人以为插在x16插槽上75W的插槽供电就够了但实际上高性能显卡动辄250W以上必须靠外接的6pin/8pin供电。插槽供电和辅助供电是两套独立的供电通路插槽那75W是PCIe规范给的上限不是设备实际需要的功率。信号建链方面PCIe用的是AC耦合发送端有耦合电容接收端有终端电阻。链路速率越高对通道损耗越敏感。PCIe 3.0开始引入发送端FFEFeed Forward Equalization和接收端CTLE/DFE到PCIe 5.0、6.0均衡的复杂度直线上升。做PCIe 5.0以上设计时通道的插入损耗Insertion Loss必须严格控制一般要求16dB以内否则均衡也救不回来。2.4 PCIe Switch与拓扑扩展单机系统里PCIe拓扑通常很简单但到了服务器或者存储阵列就需要PCIe Switch来扩展。Switch内部其实是一个小型的交换网络每个下行端口都是一个独立的PCIe链路。Switch的配置空间里有一堆跟路由相关的寄存器做虚拟化或者SR-IOV的时候会经常打交道。调试PCIe Switch时最容易踩的坑是枚举顺序和资源分配。Switch下面的设备多了BAR空间可能不够分需要提前规划好MMIO窗口大小。另外Switch的固件版本也很关键老固件可能不支持新的速率或者有已知的兼容性问题。3. 以太网从MAC到PHY的完整链路3.1 以太网帧结构与帧间隔的工作原理以太网最基础的东西是帧结构但很多人对帧间隔IFGInter-Frame Gap的理解是模糊的。IFG是帧与帧之间必须保留的最小空闲时间标准规定是12个字节时间96个比特时间。这个间隔的作用是给接收端留出处理时间让PHY层有时间完成时钟恢复和帧边界识别。为什么是12字节这跟早期的共享介质网络有关。在CSMA/CD机制下IFG保证了发送方在检测到介质空闲后其他站点也有机会竞争发送。虽然现在全双工交换式以太网已经不用CSMA/CD了但IFG作为兼容性设计保留了下来。实测中IFG出问题的情况不多但在做TSN时间敏感网络或者工业以太网时IFG的精确控制会影响确定性延迟。有些交换芯片支持调整IFG用来优化特定场景下的吞吐量。3.2 以太网PHY接口从MII到RGMII、RMIIMAC和PHY之间的接口有好几种选型时容易搞混。常见的有接口类型数据位宽时钟频率典型速率引脚数MII4位25MHz100M16RMII2位50MHz100M7GMII8位125MHz1000M24RGMII4位125MHz1000M12SGMII串行-1000M2RMII是引脚最省的方案STM32F407这类MCU常用。但RMII有个坑50MHz的参考时钟必须由外部提供而且对时钟质量要求很高。我见过不少人用STM32的RMII接LAN8720结果链路时通时断最后发现是参考时钟的抖动太大换了个晶振就好了。RGMII在千兆场景下很常见但它有DDR双沿采样的特性时序约束比较紧。PCB走线时数据线和时钟线的长度匹配要控制在很小范围内否则采样会出错。一般建议RGMII的走线长度差控制在5mil以内。3.3 ESP32连接LAN8720的常见问题与排查热词里提到的ESP32连接LAN8720以太网模块常遇到的3个问题我实际也踩过。总结下来主要是这三类第一类时钟问题。LAN8720需要50MHz的参考时钟可以由外部晶振提供也可以由ESP32的GPIO输出。如果用ESP32输出需要配置LEDC或者MCPWM产生50MHz方波但ESP32的GPIO翻转速率有限输出的时钟抖动可能不满足要求。稳妥的做法是用LAN8720自带的晶振或者外挂一个有源晶振。第二类PHY地址配置。LAN8720的PHY地址由PHYAD0引脚决定上电时被锁存。如果这个引脚悬空或者接错MDIO就找不到PHY。我一般建议把这个引脚明确上拉或下拉不要悬空。第三类电源和复位时序。LAN8720对电源纹波比较敏感尤其是1.2V内核电压。复位信号需要保持足够长的时间一般建议至少100us。有些模块的复位电路设计得比较随意导致上电后PHY没正常初始化。接线方面RMII接口需要连接TXD0、TXD1、TXEN、RXD0、RXD1、CRS_DV、REF_CLK、MDIO、MDC这几根线加上电源和地。具体接线图网上很多但要注意不同模块的引脚定义可能不一样接线前一定要对照模块的规格书。3.4 车载以太网与TSN的特殊要求车载以太网跟普通以太网最大的区别在于物理层。普通以太网用4对双绞线车载以太网100BASE-T1、1000BASE-T1只用一对而且要求满足车规级的EMC和温度要求。100BASE-T1的速率是100M1000BASE-T1是1G都是全双工。TSNTime-Sensitive Networking是在以太网基础上加了一组标准用来保证确定性延迟。核心机制包括时间同步802.1AS、流量调度802.1Qbv、帧抢占802.1Qbu等。做车载以太网测试时TC8测试规范是绕不开的它定义了物理层、协议层、应用层的测试用例。我个人的体会是车载以太网的调试比普通以太网麻烦得多。普通以太网出问题换个网线、换个交换机基本能定位车载以太网出问题往往要上示波器看眼图还要考虑线束的阻抗匹配和EMC。测试用例的设计也要更严谨因为车载环境的干扰源比办公室复杂得多。4. SATA与SAS存储SerDes的设计取舍4.1 SATA的物理层与协议层设计SATA的物理层用的是差分信号速率从1.5GbpsSATA 1.0到6GbpsSATA 3.0。它的编码方式是8b/10b跟PCIe 1.0/2.0一样。8b/10b的好处是直流平衡和足够的跳变密度方便接收端恢复时钟代价是20%的编码开销。SATA的协议层相对简单主要是FISFrame Information Structure的封装和解析。FIS有几种类型比如Register FIS用来传命令Data FIS用来传数据DMA Setup FIS用来配置DMA传输。做SATA控制器开发时FIS的解析是核心工作。SATA的链路建立过程比PCIe简单没有LTSSM那么复杂的状态机。上电后双方通过OOBOut of Band信号握手然后协商速率进入正常通信。OOB信号是几组特定频率的突发信号用来在链路未建立时传递信息。4.2 SAS的双端口与Expander拓扑SAS相比SATA最大的优势是双端口和可扩展拓扑。双端口意味着一个SAS盘可以同时连接到两个控制器实现冗余路径。这在企业级存储里非常重要一个控制器挂了另一个可以接管。SAS的拓扑通过Expander扩展一个Expander可以连接多个盘和多个上游端口。Expander内部有路由表负责把上游的请求转发到正确的下游设备。SAS的地址是64位的WWNWorld Wide Name跟以太网的MAC地址类似全球唯一。调试SAS拓扑时最常见的问题是路由表配置错误和速率协商失败。Expander的固件里有一堆跟路由相关的配置配错了会导致部分盘识别不到。速率协商失败通常是线缆或者背板的问题SAS对信号完整性的要求比SATA更高。4.3 SATA与SAS的兼容性与选型建议SAS控制器可以接SATA盘但SATA控制器不能接SAS盘。这是因为SAS的协议是SATA的超集SAS控制器能识别SATA盘的OOB信号并切换到SATA模式。反过来SATA控制器不认识SAS的协议所以接不了。选型时的建议是单盘、成本敏感的场景用SATA多盘、需要冗余和高可靠性的场景用SAS。NVMe SSD现在在性能上全面碾压SATA/SAS但SAS在容量和成本上仍有优势尤其是大容量机械盘和近线存储。我个人的经验是做存储阵列时SAS的背板和线缆要选质量好的。劣质背板的阻抗不匹配会导致误码率上升表现为随机掉盘或者读写错误。这种问题很难定位因为盘本身是好的换到别的槽位可能就正常了。5. 通用SerDes与FPGA高速收发器5.1 GT SerDes的物理层架构FPGA里的GTGigabit Transceiver是通用SerDes的典型代表。以Xilinx的GTY/GTM为例物理层包含发送端PMA、接收端PMA和PCS。发送端有并串转换、预加重、FFE接收端有CTLE、DFE、CDR时钟数据恢复。CDR是接收端的核心它从数据流里恢复出时钟。CDR的原理是用一个相位检测器比较数据跳变和本地时钟的相位然后调整本地时钟的频率和相位使其与数据对齐。CDR的带宽和抖动容限是两个关键参数带宽太窄跟踪不上频偏太宽又会引入过多抖动。GT的配置参数很多参考时钟频率、线速率、编码方式、均衡设置等等。Xilinx的Transceiver Wizard可以生成初始配置但实际调试时往往需要手动调整。我一般先用Wizard生成一个能工作的配置然后用IBERT做眼图扫描根据眼图结果微调均衡参数。5.2 FPGA驱动SATA/SAS/PCIe的实践用FPGA驱动SATA、SAS、PCIe是常见需求但实现难度差别很大。PCIe有现成的IP核Xilinx的XDMA、Intel的PCIe Hard IP都能直接用配置好BAR和DMA就能跑。SATA的IP核相对少一些而且SATA协议的状态机需要自己实现或者买第三方IP。SAS的IP核更少基本只有几家专业做存储的公司在用。我做过一个FPGA驱动SATA的项目用的是Xilinx的SATA IP。踩的坑主要是OOB信号的处理和速率协商。SATA的OOB信号是几组特定频率的突发FPGA的GT需要正确检测和响应。速率协商阶段如果双方对速率支持不一致链路就起不来。调试时用ChipScope抓OOB信号的时序对照SATA规范逐条核对最后定位到是OOB的检测阈值设置得太严。5.3 SerDes接口的调试工具与方法调试SerDes接口光靠软件工具是不够的必须上硬件仪器。常用的工具包括示波器看眼图、测抖动、抓有序集。高带宽示波器13GHz以上才能看PCIe 4.0/5.0的信号。误码仪BERT测误码率评估链路余量。协议分析仪抓协议层的报文分析状态机流转。IBERTXilinx FPGA自带的误码率测试工具可以扫描眼图。我个人的调试流程是先用IBERT确认物理层能通眼图张开度够再用协议分析仪看链路训练过程确认状态机流转正常最后跑压力测试看长时间运行的误码率。这个流程能覆盖大部分问题。注意SerDes调试时参考时钟的质量非常关键。参考时钟的抖动会直接传递到发送信号上导致眼图闭合。选参考时钟时相位噪声指标比频率精度更重要。6. 五种协议的横向对比与选型逻辑6.1 速率、延迟、拓扑的全方位对比维度PCIe以太网SATASAS通用SerDes典型速率2.5-32GT/s10M-800G1.5-6Gbps3-24Gbps可配置延迟极低中等低低取决于协议拓扑点对点/树形任意点对点点对点/交换灵活编码8b/10b,128b/130b多种8b/10b8b/10b可配置典型应用芯片互连组网单盘存储企业存储FPGA互连从表里能看出来PCIe和通用SerDes的延迟最低适合芯片间互连以太网的拓扑最灵活适合组网SATA和SAS专注存储在可靠性和成本上做了针对性优化。6.2 选型时的关键决策点选型时我一般问自己几个问题距离多远延迟要求多高需要多少设备互连成本预算多少距离在板内、延迟要求极低选PCIe。距离在几米到几十米、需要多设备组网选以太网。单盘存储、成本敏感选SATA。多盘存储、需要冗余选SAS。需要灵活配置、支持多种协议选通用SerDes。实际项目中经常是混合使用。比如一台服务器CPU和GPU之间用PCIe服务器对外用以太网本地存储用SATA或SAS。理解每种协议的边界才能做出合理的架构设计。6.3 协议演进趋势与未来方向PCIe已经走到6.0速率到64GT/sPAM4编码开始引入。以太网在往800G、1.6T走单通道速率到200G。SATA基本停在6GbpsSAS到24Gbps后也放缓了因为NVMe的冲击太大。通用SerDes的方向是更高速率、更低功耗、更灵活的配置。FPGA的GT速率已经到112Gbps下一步是224Gbps。PAM4编码在高速SerDes里越来越普遍因为它能在相同带宽下把速率翻倍代价是信噪比要求更高均衡更复杂。我个人的判断是未来几年PCIe和以太网会继续快速演进SATA会逐渐退出主流SAS在特定领域保留通用SerDes则成为FPGA和ASIC的标配。做硬件设计的人把SerDes的基础打牢不管协议怎么变底层的东西是相通的。7. 实操避坑与调试心得7.1 链路训练失败的排查思路链路训练失败是最常见的问题排查时按这个顺序来确认参考时钟频率对不对抖动大不大用示波器测一下。确认电源电压对不对纹波大不大SerDes对电源噪声很敏感。确认复位复位时序对不对复位时间够不够确认信号完整性走线阻抗对不对损耗大不大用TDR测一下。看状态机用协议分析仪或者FPGA的调试工具看LTSSM卡在哪个状态。这个顺序是从最基础的开始逐步深入。我见过太多人一上来就怀疑协议配置结果查了半天发现是参考时钟没接对。7.2 误码率高的常见原因误码率高通常跟信号完整性有关常见原因包括通道损耗太大走线太长、过孔太多、连接器质量差。串扰相邻信号线耦合尤其是高速差分对之间。阻抗不匹配走线阻抗偏离目标值导致反射。参考时钟抖动时钟的相位噪声传递到数据上。均衡参数不当FFE、CTLE、DFE的参数没调好。解决误码率问题先用眼图看信号质量再逐项排查。均衡参数可以先用默认值然后根据眼图结果微调。7.3 协议分析仪与示波器的配合使用协议分析仪和示波器是互补的。示波器看物理层协议分析仪看协议层。链路起不来时先用示波器确认物理层有没有信号再用协议分析仪看状态机流转。我一般会同时用这两个工具。示波器抓有序集的波形协议分析仪解码有序集的内容两边对照着看能快速定位问题。比如LTSSM卡在Polling状态示波器能看到TS1有序集的波形协议分析仪能解出TS1里的Link Number和Lane Number对比双方是否一致。7.4 个人经验总结做了这么多年SerDes相关的项目最大的体会是基础比技巧重要。参考时钟、电源、复位、信号完整性这四样做好了大部分问题都不会出现。剩下的问题靠对协议状态机的熟悉程度和调试工具的熟练使用来解决。另外不要迷信默认配置。IP核的默认配置往往是为了兼容性不是最优的。实际项目中要根据通道特性、速率要求、功耗预算来调整参数。调参的过程可能很枯燥但调好之后链路的余量会大很多长期运行的稳定性也更好。最后分享一个小技巧调试SerDes时准备一个已知良好的参考设计或者开发板遇到问题时对比测试。如果参考设计能通说明你的硬件或者配置有问题如果参考设计也不通说明可能是环境或者仪器的问题。这个方法能快速缩小排查范围省下大量时间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价