1G/2.5G PCS/PMA IP核配置指南:時(shí)鐘、環(huán)回與避坑實(shí)戰(zhàn))
寫這篇東西的起因是我去年又踩了一遍 1G/2.5G Ethernet PCS/PMA 這個(gè)IP核的坑。做FPGA開發(fā)久了都知道以太網(wǎng)這塊“看起來(lái)簡(jiǎn)單用起來(lái)全是細(xì)節(jié)”尤其到了 Vivado 2023 時(shí)代IP核的配置頁(yè)面雖然做得越來(lái)越友好但該踩的坑一個(gè)都沒(méi)少時(shí)鐘接錯(cuò)、環(huán)回模式選錯(cuò)、共享邏輯沒(méi)處理好、約束不過(guò)、上板后link死活不亮……每個(gè)問(wèn)題都能消耗你大半天時(shí)間。這篇博文就把我實(shí)際配置 1G/2.5G Ethernet PCS/PMA IP核Vivado 2023版的過(guò)程、踩過(guò)的坑、排障的思路完整寫出來(lái)希望能幫正在做FPGA以太網(wǎng)開發(fā)的工程師少走彎路。這個(gè)IP核解決的核心問(wèn)題是FPGA與外部PHY芯片或光模塊之間的物理層對(duì)接。它內(nèi)部集成了PCS物理編碼子層和PMA物理介質(zhì)附接子層對(duì)外是GT高速收發(fā)器或SelectIO引腳對(duì)內(nèi)是GMII接口。簡(jiǎn)單說(shuō)你的MAC層邏輯通過(guò)GMII把數(shù)據(jù)交給這個(gè)IP它負(fù)責(zé)8B/10B編碼、時(shí)鐘恢復(fù)、串并轉(zhuǎn)換最后從GT引腳發(fā)出去。適合的人群很寬做以太網(wǎng)接口板卡、交換設(shè)備、工業(yè)控制、圖像傳輸?shù)腇PGA工程師甚至包括剛?cè)腴T想跑通一個(gè)千兆網(wǎng)口的同學(xué)。內(nèi)容上我盡量做到“可以直接抄作業(yè)”也會(huì)把IP核配置背后的原理講清楚因?yàn)橹欢c(diǎn)按鈕不懂原理?yè)Q塊板子還是會(huì)翻車。1. 為什么這個(gè)IP核看著簡(jiǎn)單用起來(lái)卻容易翻車1.1 以太網(wǎng)鏈路里PCS/PMA到底在干什么先不急著打開Vivado配IP我建議每個(gè)做FPGA以太網(wǎng)的人先把鏈路位置搞清楚。一條完整的以太網(wǎng)物理層鏈路從MAC到網(wǎng)線大致是MAC → PCS → PMA → PMD物理介質(zhì)相關(guān)子層。MAC負(fù)責(zé)組幀、地址過(guò)濾、CRC校驗(yàn)PCS負(fù)責(zé)8B/10B編碼、自動(dòng)協(xié)商、鏈路狀態(tài)管理PMA負(fù)責(zé)并串轉(zhuǎn)換、時(shí)鐘數(shù)據(jù)恢復(fù)CDRPMD就是PHY芯片里的模擬前端或者光模塊里的激光驅(qū)動(dòng)。Xilinx的 1G/2.5G Ethernet PCS/PMA IP核說(shuō)白了就是把PCS和PMA這兩塊打包成一個(gè)可配置的硬核/軟核組合。它的內(nèi)部結(jié)構(gòu)里PMA部分通常直接調(diào)用GT transceiverGTP、GTH這類把FPGA內(nèi)部的并行數(shù)據(jù)變成高速串行差分信號(hào)從引腳出去PCS部分則是可綜合的邏輯負(fù)責(zé)編碼和狀態(tài)管理。內(nèi)核對(duì)外暴露出GMII接口給MAC用對(duì)內(nèi)通過(guò)GT與物理介質(zhì)打交道。理解了這個(gè)分層后面看配置頁(yè)里那些選項(xiàng)就會(huì)很清楚——原來(lái)每個(gè)選項(xiàng)對(duì)應(yīng)的是某一層的某個(gè)功能。1.2 常見的三條實(shí)現(xiàn)路線為什么主流是GT-basedFPGA上實(shí)現(xiàn)以太網(wǎng)物理層大體有三條路。第一條是用獨(dú)立的PHY芯片F(xiàn)PGA這邊用RGMII/GMII接口跟PHY對(duì)接PHY芯片負(fù)責(zé)PCS和PMA這是大多數(shù)板卡的做法因?yàn)?0/100/1000M自適應(yīng)PHY芯片便宜又成熟。第二條是FPGA直接驅(qū)動(dòng)光模塊或變壓器完全不用外部PHY這時(shí)候PCS/PMA必須由FPGA內(nèi)部實(shí)現(xiàn)就是這篇文章的主角。第三條是FPGA里跑軟核、利用SelectIO做低速PMA適合對(duì)速率不敏感、成本敏感的場(chǎng)景。做1G和2.5G絕大多數(shù)工程是GT-based這條路線因?yàn)镚T本身就內(nèi)置了高速串行收發(fā)所需的大部分模擬電路包括CDR、均衡器、時(shí)鐘倍頻性能和穩(wěn)定性都遠(yuǎn)好于用邏輯拼出來(lái)的方案。而且Xilinx官方對(duì)GT-based的PCS/PMA有完整的支持調(diào)試手段也成熟。缺點(diǎn)是GT資源占用和功耗比SelectIO方案高但做以太網(wǎng)本來(lái)也沒(méi)幾個(gè)人在乎這點(diǎn)功耗。1.3 這篇指南適合誰(shuí)能解決什么問(wèn)題說(shuō)句實(shí)在話這個(gè)IP核的官方文檔PG047寫得不算差但文檔是“答案書”不是“避坑書”。文檔不會(huì)告訴你“如果refclk消耗時(shí)鐘不對(duì)仿真能過(guò)但上板link不亮”也不會(huì)告訴你“serial loopback和PCS loopback測(cè)出來(lái)的結(jié)果你該怎么解讀”。這篇文章完全從工程角度出發(fā)我默認(rèn)你已經(jīng)會(huì)用Vivado建工程、會(huì)寫簡(jiǎn)單的約束文件但對(duì)PCS/PMA這個(gè)IP還不太熟。如果你是完全零基礎(chǔ)建議先補(bǔ)一下GT transceiver的基本概念否則看后面時(shí)鐘和環(huán)回部分會(huì)有點(diǎn)費(fèi)勁。2. 配置之前必須想清楚的三件大事2.1 SGMII和1000BASE-X怎么選打開IP核配置頁(yè)第一個(gè)讓人糾結(jié)的就是Physical Interface選SGMII還是1000BASE-X。這倆物理層編碼其實(shí)都是8B/10B線速率也一樣1G時(shí)都是1.25Gbps區(qū)別在應(yīng)用場(chǎng)景和協(xié)商機(jī)制上。SGMIISerial Gigabit Media Independent Interface是MAC與PHY之間的一種串行接口標(biāo)準(zhǔn)設(shè)計(jì)目標(biāo)是替代并行GMII讓MAC和PHY之間用一對(duì)差分線傳數(shù)據(jù)。它支持10/100/1000M速率自動(dòng)協(xié)商速率協(xié)商是MAC和PHY之間通過(guò)SGMII特有的協(xié)商機(jī)制完成的。所以如果你的FPGA外接的是一顆帶SGMII接口的PHY芯片比如常見的88E1512、RTL8211系列你應(yīng)該選SGMII。1000BASE-X是真正的以太網(wǎng)物理層標(biāo)準(zhǔn)定義了通過(guò)光纖或者銅纜1000BASE-T之外的方式傳輸1000M以太網(wǎng)的完整物理層規(guī)范。它也有自動(dòng)協(xié)商但協(xié)商的內(nèi)容是雙工模式和對(duì)端能力不像SGMII那樣協(xié)商速率。FPGA對(duì)接光模塊SFP/SFP或者直連背板SerDes時(shí)通常選1000BASE-X。這里有一個(gè)新手經(jīng)常犯的錯(cuò)誤板子上明明有PHY芯片卻選了1000BASE-X模式結(jié)果發(fā)現(xiàn)跟PHY自協(xié)商永遠(yuǎn)對(duì)不上。記住一個(gè)口訣對(duì)PHY芯片選SGMII對(duì)光模塊選1000BASE-X。這個(gè)選擇決定后面很多行為錯(cuò)了就是白忙一場(chǎng)。2.2 時(shí)鐘架構(gòu)決定生死的不只是refclk以太網(wǎng)IP核的時(shí)鐘比普通邏輯工程的時(shí)鐘要復(fù)雜一些但也更規(guī)律。以1G SGMII模式為例整個(gè)時(shí)鐘體系大致是外部差分參考時(shí)鐘refclk通常125MHz進(jìn)入FPGA后通過(guò)IBUFDS_GTE2原語(yǔ)接到GT的參考時(shí)鐘引腳這是GT工作的基準(zhǔn)。用戶側(cè)時(shí)鐘user_clk數(shù)據(jù)通路時(shí)鐘。1G模式通常是125MHz8位GMII接口2.5G模式通常是312.5MHz不對(duì)2.5G模式下內(nèi)部數(shù)據(jù)位寬和時(shí)鐘要看具體的配置但無(wú)論哪種IP核的例化模板里都會(huì)明確標(biāo)出來(lái)。DCLKDRP時(shí)鐘配置GT寄存器的時(shí)鐘通常給62.5MHz或125MHz。我見過(guò)太多人只關(guān)心refclk把user_clk隨便接個(gè)時(shí)鐘就當(dāng)回事了結(jié)果上板數(shù)據(jù)全亂。實(shí)際上GT經(jīng)過(guò)CDR恢復(fù)出來(lái)的接收時(shí)鐘才是決定Rx方向數(shù)據(jù)能否正確采樣的關(guān)鍵而IP核內(nèi)部會(huì)自動(dòng)處理時(shí)鐘域交叉用戶側(cè)只需要保證user_clk的頻率和相位穩(wěn)定即可。如果user_clk頻率跟配置的線速率不匹配仿真可能看不出來(lái)上板后會(huì)有偶發(fā)錯(cuò)包、丟包非常惡心。2.3 速率模式與自適應(yīng)協(xié)商的底層邏輯這個(gè)IP核最讓人迷惑的是“速率”到底指什么。物理接口的線速率是固定的1G對(duì)應(yīng)1.25Gbps2.5G對(duì)應(yīng)3.125Gbps但“數(shù)據(jù)速率”會(huì)隨協(xié)商結(jié)果變化。SGMII模式下PHY可能協(xié)商出10M/100M/1000M這時(shí)候IP核內(nèi)部會(huì)自動(dòng)切換時(shí)鐘頻率和數(shù)據(jù)位寬。所以配置頁(yè)面里如果看到“Auto Negotiation”相關(guān)選項(xiàng)要知道它背后是有一套狀態(tài)機(jī)在跑的。我強(qiáng)烈建議在項(xiàng)目最初就確定你的系統(tǒng)是否需要支持10/100M低速協(xié)商如果只是千兆直連直接把自動(dòng)協(xié)商關(guān)掉強(qiáng)制1G全雙工能省掉大量調(diào)試時(shí)間。如果必須支持自適應(yīng)那么MDIO接口、狀態(tài)寄存器讀取邏輯、MAC側(cè)的速率切換邏輯都要配套做好工作量會(huì)大不少。2.5G模式就沒(méi)有什么協(xié)商了它就是固定速率物理層也不存在標(biāo)準(zhǔn)的自動(dòng)協(xié)商過(guò)程。3. 照著做的完整配置流程Vivado 2023.x3.1 創(chuàng)建IP核關(guān)鍵頁(yè)面逐頁(yè)過(guò)一遍在Vivado 2023.x里左側(cè)IP Catalog搜索“Ethernet PCS/PMA”會(huì)找到“1G/2.5G Ethernet PCS/PMA or SGMII”。雙擊后進(jìn)入配置界面我按頁(yè)把關(guān)鍵選項(xiàng)過(guò)一遍。Shared Logic那頁(yè)選項(xiàng)是“Include Shared Logic in Core”和“Include Shared Logic in Example Design”。這個(gè)選項(xiàng)的意思是GT_COMMONGT的公共邏輯比如時(shí)鐘管理、復(fù)位管理放在哪里。我的經(jīng)驗(yàn)是單個(gè)IP實(shí)例就選“in Core”讓IP自己把公共邏輯包含進(jìn)去省事。多個(gè)IP實(shí)例共享同一個(gè)GT bank時(shí)選“in Example Design”只在一個(gè)IP里包含GT_COMMON其他IP共享避免重復(fù)例化導(dǎo)致DRC報(bào)錯(cuò)。選錯(cuò)會(huì)編譯報(bào)錯(cuò)或者上板異常這個(gè)值得記一下。Line Rate直接選1G或2.5G。如果選2.5G注意物理接口選項(xiàng)里不會(huì)再給你SGMII的自適應(yīng)功能它是2500BASE-X這種非標(biāo)準(zhǔn)擴(kuò)展模式。Reference Clock多選125MHz。DCLK給62.5MHz或125MHz都行但必須跟實(shí)際接的時(shí)鐘一致。另外有一個(gè)“Speed Selection”的選項(xiàng)SGMII模式下可以選擇強(qiáng)制速率或者自適應(yīng)這個(gè)我前面講過(guò)按項(xiàng)目需求來(lái)。3.2 例化代碼與時(shí)鐘接法配置完生成IP打開例化模板會(huì)發(fā)現(xiàn)端口比想象中多。大致分幾類GMII接口txd、txen、txer、rxd、rxdv、rxer、rx_clk、tx_clk、GT接口gtx_clk、rx_serdes_reset等、管理接口mdio、mdc、狀態(tài)接口status_vector、reset_done。我重點(diǎn)提醒幾個(gè)端口。tx_clk和rx_clk在GMII模式下tx_clk由IP核輸出是125MHz1G模式你的MAC邏輯要用這個(gè)時(shí)鐘把數(shù)據(jù)送給IP核而不是自己隨便生成一個(gè)125M時(shí)鐘。rx_clk同理是IP核根據(jù)接收數(shù)據(jù)恢復(fù)出來(lái)的你下發(fā)來(lái)的MAC邏輯要用這個(gè)時(shí)鐘采樣接收數(shù)據(jù)。這也是新手最容易問(wèn)“為什么tx_clk不歸我管”的原因。gtx_clk這個(gè)端口在SGMII模式下是需要外部輸入的通常是125MHz接到GT的參考時(shí)鐘引腳上。它和上面的tx_clk不是同一個(gè)東西——好多人第一次看例化模板直接懵其實(shí)就是refclk給GT做串行收發(fā)基準(zhǔn)tx_clk是IP核分頻/倍頻后給MAC接口用的并行時(shí)鐘。reset相關(guān)IP核有多個(gè)復(fù)位輸入包括gt_reset、rx_reset、tx_reset等。我個(gè)人習(xí)慣用一個(gè)上電延時(shí)后的全局復(fù)位信號(hào)同時(shí)驅(qū)動(dòng)它們并且保證復(fù)位釋放時(shí)參考時(shí)鐘已經(jīng)穩(wěn)定。如果復(fù)位時(shí)序不對(duì)表現(xiàn)為link狀態(tài)反復(fù)跳變、寄存器讀到狀態(tài)不正常。3.3 管腳約束的常見錯(cuò)誤和正確姿勢(shì)約束是這IP核最容易翻車的環(huán)節(jié)。GT參考時(shí)鐘不能想當(dāng)然地約束到一個(gè)普通MRCC引腳必須約束到GT專用的參考時(shí)鐘引腳。查你所用FPGA的封裝引腳表找到MGTREFCLK引腳比如Artix-7A35T系列通常有MGTREFCLK0/MGTREFCLK1。注意每個(gè)GT bank的參考時(shí)鐘引腳是固定的如果你把IP核的GT位置指定到了某個(gè)bankrefclk必須用這個(gè)bank的refclk引腳否則編譯會(huì)報(bào)錯(cuò)或者上板不工作。另外一個(gè)高頻錯(cuò)誤是差分引腳約束。GT輸出的是高速差分對(duì)比如TXP/TXN、RXP/RXN約束時(shí)要成對(duì)寫并且注意電平標(biāo)準(zhǔn)。如果是跟PHY芯片對(duì)接電平標(biāo)準(zhǔn)通常是LVDS或LVPECL需要在約束文件里明確寫出來(lái)。如果用默認(rèn)的LVCMOS去約束差分引腳會(huì)直接報(bào)DRC錯(cuò)誤或者雖然能編譯過(guò)但上板后完全沒(méi)信號(hào)。這里分享一個(gè)實(shí)操習(xí)慣每做完一步約束就立即跑一次Implementation別等全部做完再跑。因?yàn)镚T相關(guān)的DRC錯(cuò)誤信息量很大一次只解決一類錯(cuò)誤會(huì)輕松很多。DRC RTSTAT-2這類報(bào)錯(cuò)基本都是IO標(biāo)準(zhǔn)或引腳位置違規(guī)把出錯(cuò)引腳列表導(dǎo)出來(lái)對(duì)著FPGA封裝圖逐個(gè)核對(duì)。4. 上板調(diào)試從環(huán)回測(cè)試到實(shí)際收發(fā)4.1 三種回環(huán)方式和它們的調(diào)試價(jià)值IP核配好之后建議別直接接對(duì)端設(shè)備先把環(huán)回測(cè)試跑通。調(diào)試以太網(wǎng)鏈路回環(huán)是最有力的工具而PCS/PMA這個(gè)IP核提供了幾個(gè)層次的回環(huán)。第一種是GT的串行環(huán)回serial loopback也叫near-end PMA loopback。它把GT發(fā)送的數(shù)據(jù)在PMA內(nèi)部直接返回給接收端不經(jīng)過(guò)外部物理介質(zhì)。這個(gè)環(huán)回驗(yàn)證的是GT的收發(fā)通道、時(shí)鐘恢復(fù)、串并轉(zhuǎn)換是否正常。在IP核里可以通過(guò)信號(hào)控制比如把tx_data發(fā)一串已知數(shù)據(jù)看rx_data能否原樣回來(lái)。如果這個(gè)環(huán)回都不通先查電源、時(shí)鐘、復(fù)位、GT配置別往下走。第二種是PCS環(huán)回在PCS內(nèi)部把數(shù)據(jù)從發(fā)送方向繞回接收方向經(jīng)過(guò)編碼、編幀但沒(méi)進(jìn)GT。這個(gè)環(huán)回可以驗(yàn)證PCS的邏輯功能。通常IP核有對(duì)應(yīng)的寄存器位需要通過(guò)MDIO或者DRP接口配置。實(shí)際調(diào)試時(shí)我習(xí)慣先跑PCS環(huán)回確認(rèn)PCS邏輯沒(méi)問(wèn)題再跑串行環(huán)回確認(rèn)GT沒(méi)問(wèn)題最后再接外部設(shè)備。第三種是外部環(huán)回把FPGA的TX差分對(duì)用短跳線直接接到RX差分對(duì)這種主要用于確認(rèn)PCB走線和焊接到位。如果你發(fā)現(xiàn)串行環(huán)回通了但外部環(huán)回不通大概率是板級(jí)問(wèn)題。4.2 用ILA抓包判斷問(wèn)題出在哪一段環(huán)回通了之后就要接真實(shí)業(yè)務(wù)了。這時(shí)候ILA集成邏輯分析儀是你最好的朋友。我的調(diào)試順序一般是先在GMII接口抓MAC發(fā)給IP核的數(shù)據(jù)確認(rèn)MAC工作正常再在IP核的狀態(tài)寄存器里看link狀態(tài)、接收錯(cuò)誤計(jì)數(shù)最后在接收側(cè)GMII抓IP核發(fā)給MAC的數(shù)據(jù)。如果發(fā)送方向一直有數(shù)據(jù)但接收方向看到rx_en和rx_dv始終拉不起來(lái)先看IP核的status_vector里的RX link status是不是1。如果RX link是0說(shuō)明PCS沒(méi)有完成同步繼續(xù)往物理層排查GT參考時(shí)鐘是否穩(wěn)定、對(duì)方的發(fā)送端是否真的在發(fā)數(shù)據(jù)、雙方速率是否匹配。如果RX link是1但收不到數(shù)據(jù)重點(diǎn)檢查GMII接口兩側(cè)的時(shí)鐘是否同源、MAC側(cè)是否用了正確的rx_clk。另外一個(gè)我印象很深的場(chǎng)景數(shù)據(jù)能通但Ping有一定概率丟包。這種情況優(yōu)先懷疑信號(hào)完整性其次是GT的RX均衡參數(shù)。Xilinx GT提供了RX均衡配置寄存器比如LPM和DFE模式的選擇。在低速1G場(chǎng)景下默認(rèn)配置一般夠用但2.5G對(duì)信號(hào)質(zhì)量更敏感如果鏈路比較長(zhǎng)或者連接器質(zhì)量一般可能要手動(dòng)調(diào)整均衡參數(shù)。這個(gè)調(diào)整沒(méi)有標(biāo)準(zhǔn)答案只能邊試邊看誤碼率。4.3 實(shí)際業(yè)務(wù)中的一些坑包間隔、CRC、MAC層配合物理層通了不代表以太網(wǎng)業(yè)務(wù)就通了。我在實(shí)際項(xiàng)目里遇到過(guò)幾個(gè)跟IP核本身關(guān)系不大、但跟以太網(wǎng)協(xié)議配合緊密的問(wèn)題。第一個(gè)是包間隔IPG不滿足要求。以太網(wǎng)標(biāo)準(zhǔn)要求最小幀間隔96ns1G下是12字節(jié)時(shí)間。如果你的MAC邏輯在幀與幀之間間隔太短對(duì)端交換機(jī)可能直接丟包或者按錯(cuò)誤幀處理。這個(gè)錯(cuò)誤在FPGA邏輯里很隱蔽因?yàn)檫壿嬌峡雌饋?lái)發(fā)送端一直在發(fā)數(shù)據(jù)沒(méi)有報(bào)錯(cuò)但對(duì)端就是收不到。排查方法是用ILA抓GMII的tx_en信號(hào)測(cè)量?jī)蓭g的間隔是否足夠。第二個(gè)是CRC校驗(yàn)。PCS/PMA IP核不做CRCCRC是MAC層的活。如果你自研MACCRC計(jì)算邏輯一定要嚴(yán)謹(jǐn)。有時(shí)候物理層已經(jīng)通了但對(duì)端一直報(bào)CRC錯(cuò)誤除了軟硬件接口問(wèn)題還要檢查MAC側(cè)CRC算法是否包含了Preamble和SFD雖然標(biāo)準(zhǔn)里CRC不包含這兩個(gè)但初學(xué)容易算錯(cuò)起點(diǎn)。第三個(gè)是MAC和PCS之間的速率匹配。SGMII支持10/100/1000M自動(dòng)協(xié)商但這意味著MAC的時(shí)鐘頻率要跟著變。如果你的MAC邏輯只支持千兆而PHY協(xié)商成了百兆就會(huì)導(dǎo)致數(shù)據(jù)通路時(shí)通時(shí)不通。這個(gè)要么在代碼里屏蔽掉低速能力要么在MAC側(cè)做好速率適配邏輯沒(méi)有第三條路。5. 避坑速查表與個(gè)人經(jīng)驗(yàn)總結(jié)5.1 高頻錯(cuò)誤現(xiàn)象速查表我把這幾年用這個(gè)IP核遇到的典型問(wèn)題整理成一個(gè)表方便大家遇到癥狀時(shí)快速定位方向?,F(xiàn)象可能原因排查方向Implementation報(bào)DRC RTSTAT-2IO標(biāo)準(zhǔn)約束錯(cuò)誤、GT引腳位置錯(cuò)誤檢查GT refclk和差分引腳約束仿真正常上板link不亮refclk未接到GT專用引腳、復(fù)位時(shí)序不對(duì)檢查硬件原理圖到FPGA引腳的實(shí)際連接SGMII對(duì)接PHYPHY link不亮物理接口選成了1000BASE-X、MDIO配置錯(cuò)誤換成SGMII模式檢查MDIO讀寫時(shí)序串行環(huán)回通外部環(huán)回不通PCB走線問(wèn)題、焊接虛焊、連接器接觸不良排查硬件鏈路、量差分信號(hào)收發(fā)都通但ping丟包信號(hào)完整性問(wèn)題、GT均衡參數(shù)不合適調(diào)整RX均衡設(shè)置、檢查PCB走線質(zhì)量對(duì)端一直報(bào)CRC錯(cuò)誤MAC側(cè)CRC計(jì)算錯(cuò)誤、發(fā)送數(shù)據(jù)位序不對(duì)檢查MAC邏輯字節(jié)序、CRC算法起點(diǎn)2.5G模式跑不出速率refclk頻率不對(duì)、user_clk不匹配核對(duì)2.5G模式下的時(shí)鐘配置5.2 幾條寫在最后的實(shí)操習(xí)慣最后分享幾個(gè)我這個(gè)項(xiàng)目里養(yǎng)成的習(xí)慣其實(shí)都是老生常談但每次都能救命。第一例化IP核之后先別急著寫業(yè)務(wù)邏輯先用最簡(jiǎn)的環(huán)回工程把物理鏈路打通。很多人喜歡一步到位把MAC、DMA、CPU全寫好了再聯(lián)調(diào)結(jié)果出了問(wèn)題根本不知道是哪一層的鍋。我見過(guò)太多項(xiàng)目卡在“以太網(wǎng)不通”上查了半個(gè)月發(fā)現(xiàn)是IP核某個(gè)引腳沒(méi)接對(duì)。第二GT相關(guān)的配置和約束盡量集中管理。比如GT位置約束、refclk約束單獨(dú)寫一個(gè)XDC文件做好注釋。后期換FPGA型號(hào)或封裝時(shí)只需要改這個(gè)文件不用滿工程翻。第三多看IP核的status_vector和寄存器狀態(tài)。很多工程師只關(guān)心收發(fā)數(shù)據(jù)對(duì)不對(duì)完全不看狀態(tài)寄存器。其實(shí)IP核內(nèi)部很多故障已經(jīng)通過(guò)狀態(tài)位反映出來(lái)了比如RX link down、RX not in table、RX disparity error。善用這些狀態(tài)位能省很多折騰的時(shí)間。我在實(shí)際調(diào)試中最大的體會(huì)是FPGA以太網(wǎng)調(diào)試不怕慢怕的是沒(méi)章法。先把鏈路分層把每層的驗(yàn)收標(biāo)準(zhǔn)定好一層層打通就不會(huì)慌。這個(gè)IP核整體來(lái)說(shuō)是成熟穩(wěn)定的絕大多數(shù)問(wèn)題都出在配置細(xì)節(jié)和使用姿勢(shì)上。希望這篇指南能幫你少踩幾個(gè)坑把時(shí)間花在真正有挑戰(zhàn)的業(yè)務(wù)邏輯上。