開(kāi)發(fā)板PHY硬件設(shè)計(jì):RTL8211F實(shí)戰(zhàn)與調(diào)試)
1. 為什么一塊以太網(wǎng)開(kāi)發(fā)板的成敗八成取決于PHY這一小塊芯片很多人拿到一塊FPGA以太網(wǎng)開(kāi)發(fā)板第一反應(yīng)是看FPGA型號(hào)、邏輯資源、DDR容量覺(jué)得這些才是決定板子性能的關(guān)鍵。但實(shí)際做過(guò)幾個(gè)項(xiàng)目之后你會(huì)發(fā)現(xiàn)FPGA再?gòu)?qiáng)如果PHY這一環(huán)沒(méi)處理好整條鏈路照樣跑不通。我見(jiàn)過(guò)太多板子FPGA邏輯跑得飛起結(jié)果網(wǎng)口連個(gè)link都起不來(lái)或者勉強(qiáng)通了但丟包率居高不下最后查來(lái)查去問(wèn)題全出在PHY周邊的硬件設(shè)計(jì)上。PHY全稱Physical Layer Transceiver物理層收發(fā)器它干的事情說(shuō)白了就是把MAC層過(guò)來(lái)的數(shù)字信號(hào)轉(zhuǎn)換成能在雙絞線上跑的模擬差分信號(hào)反過(guò)來(lái)也一樣。你可以把它理解成一個(gè)翻譯官FPGA說(shuō)的是數(shù)字世界的方言網(wǎng)線上的信號(hào)是模擬世界的語(yǔ)言PHY負(fù)責(zé)兩邊對(duì)譯。這個(gè)翻譯官的水平高低直接決定了通信的質(zhì)量和穩(wěn)定性。RTL8211F是Realtek推出的一款千兆以太網(wǎng)PHY芯片在FPGA開(kāi)發(fā)板里出鏡率非常高。它支持10/100/1000Mbps自適應(yīng)RGMII接口內(nèi)置終端電阻外圍電路相對(duì)簡(jiǎn)潔關(guān)鍵是價(jià)格友好、供貨穩(wěn)定。黑金的很多FPGA板子、市面上大量的Zynq開(kāi)發(fā)板用的都是這顆芯片。但“用得多”不等于“沒(méi)坑”恰恰相反因?yàn)橛玫枚喔鞣N典型問(wèn)題也暴露得最充分。這篇文章面向的是正在做FPGA以太網(wǎng)硬件設(shè)計(jì)或者調(diào)試的工程師不管你是剛?cè)腴T(mén)的FPGA學(xué)習(xí)者還是已經(jīng)做過(guò)幾塊板子的老手我都會(huì)從PHY的選型邏輯、接口時(shí)序、電源設(shè)計(jì)、時(shí)鐘方案、PCB布局這幾個(gè)維度把RTL8211F這顆芯片的硬件設(shè)計(jì)要點(diǎn)掰開(kāi)揉碎講清楚。同時(shí)也會(huì)涉及MDIO管理接口、設(shè)備樹(shù)配置、以及實(shí)際調(diào)試中常見(jiàn)的排查思路。目標(biāo)只有一個(gè)讓你在下一塊板子上少走彎路一次點(diǎn)亮。2. RTL8211F的接口選擇RGMII為什么成了FPGA開(kāi)發(fā)板的默認(rèn)答案2.1 RGMII、GMII、SGMII三種接口的取舍邏輯給FPGA配千兆PHY接口方案主要有三種GMII、RGMII、SGMII。這三種接口不是隨便選的每一種背后都對(duì)應(yīng)著不同的引腳預(yù)算、時(shí)序復(fù)雜度和PCB布線難度。GMII是標(biāo)準(zhǔn)千兆媒體獨(dú)立接口收發(fā)各8位數(shù)據(jù)線加上時(shí)鐘和控制信號(hào)總共需要24根左右的信號(hào)線。它的優(yōu)點(diǎn)是時(shí)序簡(jiǎn)單時(shí)鐘頻率125MHz數(shù)據(jù)在時(shí)鐘邊沿采樣邏輯分析儀一掛就能看。缺點(diǎn)是引腳太多對(duì)于引腳資源緊張的FPGA來(lái)說(shuō)一個(gè)網(wǎng)口吃掉24個(gè)IO如果板子上有兩個(gè)網(wǎng)口那就是48個(gè)IO代價(jià)太大。RGMII是精簡(jiǎn)千兆媒體獨(dú)立接口把8位數(shù)據(jù)線壓縮到4位收發(fā)各4位加上時(shí)鐘和控制總共12根信號(hào)線左右。引腳數(shù)直接砍半代價(jià)是時(shí)序變復(fù)雜了——它采用雙沿采樣DDR在125MHz時(shí)鐘的上升沿和下降沿都傳數(shù)據(jù)等效數(shù)據(jù)率還是1000Mbps。這就對(duì)FPGA側(cè)的時(shí)序約束和PHY側(cè)的延遲補(bǔ)償提出了要求。SGMII是串行千兆媒體獨(dú)立接口用一對(duì)差分線收發(fā)速率1.25Gbps引腳最少但需要FPGA內(nèi)部有高速SerDes支持。對(duì)于低端FPGA或者純邏輯資源有限的場(chǎng)景SGMII不一定可用。RTL8211F支持RGMII和GMII兩種模式通過(guò)硬件配置引腳或者寄存器設(shè)置來(lái)切換。在FPGA開(kāi)發(fā)板這個(gè)場(chǎng)景下RGMII幾乎是默認(rèn)選擇原因很直接引腳省、布線方便、FPGA側(cè)不需要SerDes、成本低。你去看黑金的Artix-7以太網(wǎng)板、Zynq-7020開(kāi)發(fā)板清一色RGMII接法。2.2 RGMII的時(shí)序補(bǔ)償PHY內(nèi)部延遲還是FPGA側(cè)約束RGMII最讓人頭疼的地方在于時(shí)序。因?yàn)樗请p沿采樣時(shí)鐘和數(shù)據(jù)之間的相位關(guān)系非常關(guān)鍵。如果時(shí)鐘邊沿正好對(duì)準(zhǔn)數(shù)據(jù)跳變沿采樣就會(huì)出錯(cuò)。為了解決這個(gè)問(wèn)題RGMII規(guī)范里定義了兩種延遲模式一種是PHY內(nèi)部對(duì)時(shí)鐘或數(shù)據(jù)做延遲補(bǔ)償另一種是FPGA側(cè)通過(guò)IDELAY或者邏輯約束來(lái)調(diào)整。RTL8211F支持內(nèi)部延遲可以通過(guò)寄存器配置RXC和TXC的延遲量。實(shí)際設(shè)計(jì)中我通常建議在PHY側(cè)開(kāi)啟內(nèi)部延遲把TXC延遲約2ns這樣FPGA發(fā)送數(shù)據(jù)時(shí)時(shí)鐘邊沿落在數(shù)據(jù)眼圖中央采樣裕量最大。接收方向同理RXC也需要做相應(yīng)延遲。但這里有個(gè)坑不同批次的PHY芯片內(nèi)部延遲的一致性可能有差異。如果你做的是批量產(chǎn)品最好在FPGA側(cè)也保留可調(diào)延遲的能力比如用IDELAYE2原語(yǔ)或者M(jìn)MCM做相位微調(diào)。我在一個(gè)項(xiàng)目里就遇到過(guò)第一批板子跑得好好的第二批換了個(gè)批次的PHYlink能起來(lái)但丟包嚴(yán)重最后查出來(lái)就是RXC延遲偏差了大約300ps調(diào)整FPGA側(cè)IDELAY之后問(wèn)題消失。注意RGMII的延遲配置不是一勞永逸的批量生產(chǎn)時(shí)一定要留出FPGA側(cè)的可調(diào)空間哪怕默認(rèn)不用調(diào)試階段也能救命。2.3 電壓型和電流型PHY的區(qū)分對(duì)硬件設(shè)計(jì)的影響網(wǎng)上有個(gè)熱搜詞叫“電壓型和電流型PHY”這其實(shí)是PHY芯片MDI側(cè)介質(zhì)相關(guān)接口的兩種驅(qū)動(dòng)方式。RTL8211F屬于電壓型驅(qū)動(dòng)它的MDI接口內(nèi)部已經(jīng)集成了終端電阻和偏置電路外部只需要接一個(gè)中心抽頭電容到地即可。而電流型PHY比如某些老型號(hào)的芯片需要外部提供中心抽頭電壓通常通過(guò)變壓器中心抽頭饋電。這個(gè)區(qū)別在畫(huà)原理圖和PCB布局時(shí)非常關(guān)鍵。如果你把電壓型PHY當(dāng)電流型來(lái)設(shè)計(jì)多加了外部饋電電路輕則信號(hào)質(zhì)量下降重則芯片損壞。反過(guò)來(lái)電流型PHY如果沒(méi)有正確饋電根本連link都起不來(lái)。RTL8211F的MDI接口設(shè)計(jì)相對(duì)簡(jiǎn)單四對(duì)差分線直接連到網(wǎng)絡(luò)變壓器變壓器另一側(cè)接RJ45。變壓器中心抽頭通過(guò)一個(gè)0.1uF電容到地不需要額外供電。這個(gè)電容的作用是提供共?;亓髀窂酵瑫r(shí)濾除高頻噪聲。電容的選型也有講究我一般用X7R材質(zhì)的0402封裝耐壓50V容值0.1uF不要用Y5V溫漂太大。3. 電源與時(shí)鐘PHY穩(wěn)定工作的兩條生命線3.1 RTL8211F的供電軌拆解與去耦策略RTL8211F的供電不像有些PHY那么復(fù)雜但也不簡(jiǎn)單。它主要有三組電源1.05V或1.0V核心電壓、3.3V IO電壓、以及1.8V或2.5V的模擬電壓具體取決于MDI接口的驅(qū)動(dòng)電壓配置。不同版本的datasheet可能略有差異設(shè)計(jì)前一定要拿最新版的手冊(cè)核對(duì)。核心電壓1.05V通常由板上的DC-DC或者LDO提供。這里有個(gè)經(jīng)驗(yàn)PHY的核心電壓對(duì)噪聲非常敏感如果和FPGA核心共用一路DC-DC開(kāi)關(guān)噪聲很容易串過(guò)來(lái)導(dǎo)致link不穩(wěn)定。我建議給PHY的核心電壓?jiǎn)为?dú)用一顆LDO比如TLV1117或者更低壓差的型號(hào)雖然效率低一點(diǎn)但換來(lái)的是穩(wěn)定性。3.3V IO電壓相對(duì)寬容但也要注意去耦。每對(duì)電源引腳旁邊放一個(gè)0.1uF電容每顆芯片再配一個(gè)10uF的鉭電容或者M(jìn)LCC做儲(chǔ)能。去耦電容的布局比選型更重要電容必須盡量靠近引腳回流路徑要短。我見(jiàn)過(guò)一塊板子電容選的都是好料但放在芯片背面兩厘米遠(yuǎn)的地方結(jié)果電源紋波大得離譜。模擬電壓這塊RTL8211F的MDI驅(qū)動(dòng)電壓可以通過(guò)配置引腳選擇1.8V或2.5V。選哪個(gè)取決于你的變壓器和RJ45的共模電壓要求。一般來(lái)說(shuō)1.8V驅(qū)動(dòng)功耗更低2.5V驅(qū)動(dòng)信號(hào)幅度更大、抗干擾能力更強(qiáng)。如果板子空間允許我傾向于選2.5V尤其是在電磁環(huán)境復(fù)雜的場(chǎng)景下。3.2 25MHz晶振還是50MHz時(shí)鐘時(shí)鐘方案的選擇與陷阱RTL8211F需要一個(gè)外部參考時(shí)鐘通常是25MHz。這個(gè)時(shí)鐘可以來(lái)自無(wú)源晶振也可以來(lái)自有源晶振還可以由FPGA的PLL輸出提供。三種方案各有適用場(chǎng)景。無(wú)源晶振成本最低但需要PHY內(nèi)部的反相放大器和外部負(fù)載電容配合。負(fù)載電容的選值要根據(jù)晶振規(guī)格書(shū)來(lái)通常12pF到20pF不等。這里有個(gè)常見(jiàn)錯(cuò)誤很多人直接抄參考設(shè)計(jì)的電容值但換了不同品牌的晶振之后沒(méi)有重新計(jì)算導(dǎo)致頻偏過(guò)大link時(shí)好時(shí)壞。正確的做法是查晶振的負(fù)載電容參數(shù)然后按公式C1C22*(CL-Cstray)來(lái)算Cstray一般取3到5pF。有源晶振輸出質(zhì)量好驅(qū)動(dòng)能力強(qiáng)但成本高一點(diǎn)而且需要額外供電。如果板子上有多個(gè)PHY或者對(duì)時(shí)鐘抖動(dòng)要求高有源晶振是更穩(wěn)妥的選擇。FPGA提供時(shí)鐘的方案最靈活可以省掉一顆晶振但要注意FPGA的時(shí)鐘輸出抖動(dòng)是否滿足PHY的要求。RTL8211F對(duì)參考時(shí)鐘的抖動(dòng)容忍度還算寬一般FPGA的PLL輸出都能滿足。不過(guò)要小心如果FPGA邏輯里用了大量的MMCM或者PLL時(shí)鐘樹(shù)上的串?dāng)_可能會(huì)影響輸出質(zhì)量。我一般會(huì)在FPGA輸出到PHY的時(shí)鐘線上串一個(gè)22歐姆的電阻抑制反射。提示不管用哪種時(shí)鐘方案上電順序很重要。PHY的參考時(shí)鐘最好在電源穩(wěn)定之后再起來(lái)否則可能出現(xiàn)內(nèi)部狀態(tài)機(jī)鎖死的情況。如果時(shí)鐘和電源同時(shí)上電建議在PHY復(fù)位引腳上做延時(shí)確保時(shí)鐘穩(wěn)定后再釋放復(fù)位。3.3 復(fù)位電路的設(shè)計(jì)細(xì)節(jié)低電平有效還是高電平有效RTL8211F的復(fù)位引腳是低電平有效也就是說(shuō)正常工作時(shí)該引腳應(yīng)該拉高。復(fù)位脈沖的寬度datasheet里有明確要求一般至少10ms。這個(gè)時(shí)間不能省我見(jiàn)過(guò)有人用RC電路做復(fù)位電容選得太小復(fù)位脈沖只有1ms結(jié)果PHY偶爾能起來(lái)偶爾起不來(lái)。更穩(wěn)妥的方案是用一顆專用的復(fù)位芯片比如MAX809或者STM809輸出固定寬度的復(fù)位脈沖。如果成本敏感也可以用FPGA的IO來(lái)控制復(fù)位但要注意FPGA上電配置完成之前IO是高阻態(tài)PHY的復(fù)位引腳可能會(huì)浮空。這時(shí)候需要在復(fù)位引腳上加一個(gè)上拉電阻確保FPGA配置期間PHY處于復(fù)位狀態(tài)。復(fù)位引腳的上拉電阻一般取4.7k到10k太小了功耗大太大了抗干擾能力弱。我通常用10k配合0.1uF電容做簡(jiǎn)單的濾波。如果板子上有多個(gè)PHY可以共用復(fù)位信號(hào)但每個(gè)PHY的復(fù)位引腳最好單獨(dú)走線避免相互串?dāng)_。4. MDIO管理接口與設(shè)備樹(shù)配置軟硬件之間的橋梁4.1 MDIO總線的硬件連接與上拉電阻選型MDIO是管理數(shù)據(jù)輸入輸出接口用來(lái)讀寫(xiě)PHY內(nèi)部的寄存器。它由兩根線組成MDC是時(shí)鐘MDIO是雙向數(shù)據(jù)線。FPGA作為MAC側(cè)通常是MDIO總線的主控PHY是從設(shè)備。MDIO總線的硬件設(shè)計(jì)有兩個(gè)關(guān)鍵點(diǎn)上拉電阻和總線電容。MDIO是開(kāi)漏輸出需要上拉電阻才能輸出高電平。上拉電阻的阻值一般在1.5k到10k之間典型值是4.7k。阻值太小功耗大太大上升沿變緩高速通信時(shí)可能出錯(cuò)。MDC頻率一般不超過(guò)2.5MHz所以對(duì)上升沿的要求不算苛刻4.7k是安全的選擇。如果板子上有多個(gè)PHY掛在同一組MDIO總線上每個(gè)PHY的MDIO引腳都要接上拉但整個(gè)總線只需要一個(gè)上拉電阻。這時(shí)候要注意總線電容不能太大否則上升沿太慢。一般建議總線走線不超過(guò)10厘米掛載的PHY不超過(guò)4個(gè)。MDC和MDIO的走線要盡量短遠(yuǎn)離高頻信號(hào)線。如果和RGMII信號(hào)平行走線要保證足夠的間距至少3倍線寬以上。我見(jiàn)過(guò)一塊板子MDIO和RGMII的TXC時(shí)鐘線挨得很近結(jié)果MDIO讀寫(xiě)偶爾出錯(cuò)PHY寄存器配置不成功link自然起不來(lái)。4.2 PHY地址配置硬件引腳還是軟件掃描每個(gè)PHY在MDIO總線上都有一個(gè)地址5位范圍0到31。RTL8211F的地址通過(guò)硬件引腳PHYAD[4:0]來(lái)配置每個(gè)引腳可以拉高、拉低或者懸空。懸空狀態(tài)在有些設(shè)計(jì)里會(huì)被識(shí)別為特定值但為了可靠我建議全部明確拉高或拉低不要懸空。地址配置的原則是同一組MDIO總線上不能有重復(fù)地址。如果板子上只有一個(gè)PHY地址隨便設(shè)但通常用0或者1。如果有多個(gè)PHY比如一個(gè)四口交換板那就要仔細(xì)分配地址確保每個(gè)PHY的地址唯一。軟件側(cè)Linux的PHY驅(qū)動(dòng)會(huì)掃描MDIO總線上的所有地址找到能響應(yīng)的PHY。如果地址配置錯(cuò)了驅(qū)動(dòng)掃描不到網(wǎng)口就不會(huì)出現(xiàn)。調(diào)試的時(shí)候可以用mdio-tools或者直接寫(xiě)FPGA邏輯去讀PHY的ID寄存器RTL8211F的ID是0x001cc916讀到了就說(shuō)明MDIO通路正常。4.3 設(shè)備樹(shù)里PHY節(jié)點(diǎn)的關(guān)鍵字段解析在Zynq或者M(jìn)icroBlaze這類跑Linux的平臺(tái)上PHY的配置是通過(guò)設(shè)備樹(shù)來(lái)描述的。一個(gè)典型的RTL8211F設(shè)備樹(shù)節(jié)點(diǎn)長(zhǎng)這樣gem0 { phy-mode rgmii-id; phy-handle phy0; phy0: ethernet-phy0 { reg 0; reset-gpios gpio0 10 GPIO_ACTIVE_LOW; reset-assert-us 10000; reset-deassert-us 10000; }; };這里有幾個(gè)字段值得展開(kāi)說(shuō)。phy-mode指定接口模式rgmii-id表示PHY內(nèi)部做延遲補(bǔ)償如果是rgmii則表示不做內(nèi)部延遲需要FPGA側(cè)調(diào)整。這個(gè)字段配錯(cuò)了link可能起不來(lái)或者丟包。reg就是PHY地址要和硬件配置一致。reset-gpios指定復(fù)位引腳reset-assert-us和reset-deassert-us分別指定復(fù)位拉低和拉高的持續(xù)時(shí)間單位微秒。RTL8211F要求復(fù)位低電平至少10ms所以這里填10000。還有一個(gè)容易忽略的字段是max-speed可以限制PHY的最高協(xié)商速率。如果你只想跑百兆可以設(shè)成100這樣PHY不會(huì)去嘗試千兆協(xié)商減少調(diào)試變量。5. PCB布局與MDI接口從芯片到網(wǎng)口的最后一公里5.1 RGMII信號(hào)線的等長(zhǎng)與阻抗控制RGMII信號(hào)線雖然速率只有125MHz但因?yàn)殡p沿采樣等效頻率250MHz對(duì)走線還是有一定要求的。四根數(shù)據(jù)線和一根時(shí)鐘線要盡量等長(zhǎng)偏差控制在50mil以內(nèi)。如果偏差太大數(shù)據(jù)到達(dá)PHY的時(shí)間不一致采樣窗口就會(huì)縮小。阻抗方面RGMII信號(hào)線一般按50歐姆單端阻抗設(shè)計(jì)。如果是四層板信號(hào)層到參考平面的距離決定了線寬。用SI9000或者Polar計(jì)算一下常規(guī)的1.6mm四層板信號(hào)層到地平面0.2mm50歐姆阻抗對(duì)應(yīng)的線寬大約是0.15mm到0.2mm之間。走線不要跨分割參考平面要完整。如果RGMII信號(hào)線跨越了電源分割區(qū)回流路徑被切斷信號(hào)完整性會(huì)急劇惡化。我見(jiàn)過(guò)一塊板子RGMII走線從3.3V電源區(qū)跨到1.8V電源區(qū)中間沒(méi)有地平面橋接結(jié)果眼圖幾乎閉合降速到百兆才能勉強(qiáng)工作。5.2 網(wǎng)絡(luò)變壓器與RJ45的選型及布局要點(diǎn)網(wǎng)絡(luò)變壓器的作用是電氣隔離、阻抗匹配和共模抑制。RTL8211F需要外接變壓器不能省。變壓器的選型要看幾個(gè)參數(shù)匝數(shù)比、電感量、共模抑制比、耐壓等級(jí)。千兆應(yīng)用一般選1:1的匝數(shù)比電感量在350uH以上耐壓至少1500Vrms。RJ45接口分帶變壓器和不帶變壓器兩種。帶變壓器的RJ45集成度高省空間但價(jià)格貴而且變壓器質(zhì)量參差不齊。不帶變壓器的RJ45便宜但需要外接變壓器占板面積大。我一般傾向于外接變壓器因?yàn)榭蛇x品牌多質(zhì)量可控。布局上變壓器要盡量靠近PHYMDI差分線走線要短且等長(zhǎng)。差分對(duì)內(nèi)的偏差控制在5mil以內(nèi)差分對(duì)之間的間距保持一致。變壓器下方要挖空不要鋪銅避免寄生電容影響共模抑制。RJ45的金屬外殼要接到機(jī)殼地通過(guò)一個(gè)1nF/2kV的電容和信號(hào)地連接提供靜電泄放路徑。5.3 MDI差分線的共模與差模處理經(jīng)驗(yàn)MDI差分線是模擬信號(hào)對(duì)噪聲非常敏感。走線要遵循差分規(guī)則等長(zhǎng)、等距、緊耦合。差分阻抗一般控制在100歐姆差分對(duì)內(nèi)的兩根線間距要保持恒定不要忽寬忽窄。共模噪聲是MDI接口的大敵。變壓器中心抽頭的電容就是用來(lái)吸收共模噪聲的這個(gè)電容的接地要干凈最好單獨(dú)打過(guò)孔到地平面不要和數(shù)字地混在一起。如果板子上有多個(gè)網(wǎng)口每個(gè)網(wǎng)口的中心抽頭電容要獨(dú)立不要共用。還有一個(gè)細(xì)節(jié)MDI差分線下面不要走任何其他信號(hào)尤其是時(shí)鐘和電源。如果實(shí)在避不開(kāi)要在中間加一層地平面做屏蔽。我做過(guò)一個(gè)項(xiàng)目MDI線下面走了DDR的時(shí)鐘線結(jié)果網(wǎng)口跑千兆時(shí)誤碼率極高后來(lái)把DDR時(shí)鐘線改到其他層問(wèn)題立刻消失。6. 調(diào)試實(shí)錄link起不來(lái)、丟包、降速的排查鏈路6.1 從PHY寄存器讀取開(kāi)始定位問(wèn)題板子回來(lái)上電網(wǎng)口不亮。這時(shí)候不要慌按步驟來(lái)。第一步確認(rèn)PHY的電源和時(shí)鐘。用示波器量1.05V、3.3V、2.5V是否正常紋波是否在允許范圍內(nèi)。量25MHz時(shí)鐘是否有輸出頻率和幅度是否正常。第二步讀PHY寄存器。如果MDIO通路正常讀寄存器0BMCR和寄存器1BMSR看看PHY是否活著。RTL8211F的寄存器1的bit2是link狀態(tài)bit5是自動(dòng)協(xié)商完成。如果讀出來(lái)全是0xFFFF或者0x0000說(shuō)明MDIO通信有問(wèn)題檢查MDC/MDIO的上拉和走線。第三步如果MDIO正常但link不起來(lái)讀寄存器10PHY特定狀態(tài)寄存器看看協(xié)商結(jié)果。如果協(xié)商到了千兆但link不穩(wěn)可能是RGMII時(shí)序問(wèn)題嘗試調(diào)整延遲配置。6.2 丟包問(wèn)題的常見(jiàn)根因與驗(yàn)證方法Link起來(lái)了但ping包丟得厲害。這種情況比完全不通更麻煩因?yàn)閱?wèn)題更隱蔽。我一般按以下順序排查先看RGMII時(shí)序。用示波器同時(shí)抓TXC和數(shù)據(jù)線看時(shí)鐘邊沿是否落在數(shù)據(jù)眼圖中央。如果偏了調(diào)整PHY內(nèi)部延遲或者FPGA側(cè)IDELAY。這個(gè)是最常見(jiàn)的原因占丟包問(wèn)題的六成以上。再看電源紋波。用示波器交流耦合量PHY的1.05V核心電壓紋波峰峰值應(yīng)該在50mV以內(nèi)。如果超過(guò)100mV檢查去耦電容和LDO。我遇到過(guò)一顆LDO自激振蕩紋波高達(dá)200mV換了輸出電容的ESR之后就好了。最后看MDI信號(hào)質(zhì)量。用差分探頭量MDI差分線看眼圖是否張開(kāi)。如果眼圖閉合檢查變壓器和RJ45的選型以及MDI走線是否滿足差分規(guī)則。6.3 降速到百兆才穩(wěn)定是妥協(xié)還是線索有些板子千兆跑不通降到百兆就穩(wěn)如老狗。很多人覺(jué)得百兆夠用就算了但這其實(shí)是一個(gè)重要線索。千兆對(duì)百兆的差異主要在兩個(gè)方面一是RGMII是雙沿采樣百兆是單沿二是MDI是四對(duì)線全雙工百兆只用兩對(duì)。如果百兆穩(wěn)定千兆不穩(wěn)首先懷疑RGMII時(shí)序。百兆時(shí)RGMII時(shí)鐘只有25MHz時(shí)序裕量大得多所以即使延遲配置不太對(duì)也能工作。千兆時(shí)125MHz時(shí)序裕量小問(wèn)題就暴露了。其次懷疑MDI的差分線。百兆只用兩對(duì)線千兆四對(duì)全用。如果某對(duì)差分線走線有問(wèn)題百兆時(shí)恰好沒(méi)用到那對(duì)千兆時(shí)就出問(wèn)題了??梢杂镁W(wǎng)分或者TDR測(cè)一下每對(duì)差分線的阻抗和損耗。6.4 一個(gè)容易被忽略的坑復(fù)位時(shí)序與時(shí)鐘的配合最后分享一個(gè)我踩過(guò)的坑。有一塊板子PHY的復(fù)位信號(hào)和時(shí)鐘是同時(shí)上電的結(jié)果大概有10%的概率link起不來(lái)。查了很久最后發(fā)現(xiàn)是PHY內(nèi)部狀態(tài)機(jī)在時(shí)鐘穩(wěn)定之前就采樣了復(fù)位引腳導(dǎo)致?tīng)顟B(tài)鎖死。解決方案很簡(jiǎn)單在復(fù)位引腳上并一個(gè)RC延時(shí)電路或者用FPGA控制復(fù)位確保時(shí)鐘穩(wěn)定后再釋放復(fù)位。具體做法是FPGA上電配置完成后先等待100ms再拉高PHY復(fù)位。這個(gè)改動(dòng)幾乎零成本但徹底解決了問(wèn)題。注意PHY的復(fù)位釋放時(shí)機(jī)比復(fù)位脈沖寬度更容易被忽略。datasheet通常只寫(xiě)了復(fù)位低電平的最小寬度但沒(méi)有強(qiáng)調(diào)時(shí)鐘必須先于復(fù)位穩(wěn)定。實(shí)際設(shè)計(jì)中時(shí)鐘穩(wěn)定和復(fù)位釋放之間至少留10ms的裕量。7. 從RTL8211F延伸出去PHY選型與設(shè)計(jì)的通用方法論7.1 不同品牌PHY的硬件設(shè)計(jì)差異對(duì)比RTL8211F不是唯一的選擇。市面上常見(jiàn)的千兆PHY還有TI的DP83867、Microchip的KSZ9031、Marvell的88E1512等。每顆芯片的硬件設(shè)計(jì)都有差異不能直接抄參考設(shè)計(jì)。特性RTL8211FDP83867KSZ9031接口RGMII/GMIIRGMIIRGMII核心電壓1.05V1.0V1.2VMDI驅(qū)動(dòng)電壓型電壓型電流型內(nèi)部延遲支持支持支持封裝QFN40QFN48QFN48配置方式引腳寄存器引腳寄存器引腳寄存器從表格可以看出核心電壓和MDI驅(qū)動(dòng)類型是最容易出問(wèn)題的差異點(diǎn)。電流型PHY需要外部饋電電壓型不需要。如果你從RTL8211F換到KSZ9031MDI部分的電路要重新設(shè)計(jì)。7.2 車(chē)載以太網(wǎng)與工業(yè)以太網(wǎng)對(duì)PHY的額外要求如果應(yīng)用場(chǎng)景從消費(fèi)級(jí)擴(kuò)展到車(chē)載或者工業(yè)級(jí)PHY的選型邏輯會(huì)發(fā)生變化。車(chē)載以太網(wǎng)通常要求AEC-Q100認(rèn)證工作溫度范圍-40到105度而且很多車(chē)載方案用的是100BASE-T1或者1000BASE-T1單對(duì)雙絞線和標(biāo)準(zhǔn)的四對(duì)線千兆不一樣。工業(yè)以太網(wǎng)則更關(guān)注EMC性能和隔離耐壓。變壓器要選工業(yè)級(jí)的共模抑制比更高耐壓至少2500Vrms。PCB布局上MDI部分要做更嚴(yán)格的屏蔽和隔離有時(shí)候還需要加TVS管做浪涌保護(hù)。RTL8211F主要面向消費(fèi)級(jí)和商用級(jí)如果你的項(xiàng)目是車(chē)載或者工業(yè)場(chǎng)景選型時(shí)就要考慮更寬溫、更高可靠性的型號(hào)。但RTL8211F的設(shè)計(jì)思路——電源去耦、時(shí)鐘方案、MDI匹配、MDIO管理——這些通用方法論是相通的換一顆PHY把這些要點(diǎn)重新核對(duì)一遍即可。7.3 從原理圖到量產(chǎn)PHY設(shè)計(jì)檢查清單最后我整理了一份PHY硬件設(shè)計(jì)的檢查清單每次投板前過(guò)一遍能避開(kāi)大部分低級(jí)錯(cuò)誤。電源三組電源電壓是否正確去耦電容是否靠近引腳LDO是否穩(wěn)定時(shí)鐘參考時(shí)鐘頻率和電平是否匹配負(fù)載電容是否按晶振規(guī)格計(jì)算上電順序是否滿足要求復(fù)位復(fù)位脈沖寬度是否足夠釋放時(shí)機(jī)是否在時(shí)鐘穩(wěn)定之后上拉電阻是否合適MDIO上拉電阻是否接地址配置是否唯一走線是否遠(yuǎn)離高頻信號(hào)RGMII等長(zhǎng)是否滿足阻抗是否控制延遲配置是否與設(shè)備樹(shù)一致MDI變壓器選型是否正確中心抽頭電容是否接差分線是否等長(zhǎng)等距RJ45外殼接地是否處理PCB參考平面是否完整跨分割是否避免MDI下方是否挖空這份清單看起來(lái)簡(jiǎn)單但每一條背后都是實(shí)際項(xiàng)目里踩過(guò)的坑。我見(jiàn)過(guò)太多板子原理圖看起來(lái)沒(méi)問(wèn)題PCB一投出來(lái)就各種毛病最后查來(lái)查去都是這些細(xì)節(jié)沒(méi)做到位。PHY的硬件設(shè)計(jì)沒(méi)有太多高深的理論關(guān)鍵在于對(duì)細(xì)節(jié)的把握和對(duì)datasheet的尊重。RTL8211F是一顆很成熟的芯片參考設(shè)計(jì)滿天飛但參考設(shè)計(jì)不等于免檢設(shè)計(jì)。每一塊板子的疊層、阻抗、電源方案都可能不同把通用原則和具體場(chǎng)景結(jié)合起來(lái)才能做出穩(wěn)定可靠的以太網(wǎng)接口。