隨著需求的多樣化,FPGA的功能也進一步的增強。其中,高速收發(fā)器從本來是只有高端FPGA才有的模塊,已經(jīng)變?yōu)橄鄬ζ占暗纳踔帘貍涞墓δ苣K。而10G的線速率也從多年前的少數(shù)FPGA支持,變?yōu)槟壳暗闹髁骶€速率。
由于FPGA的最大特點就是靈活,所以FPGA的高速收發(fā)器也擁有非常繁瑣的配置選項,目的就是為了靈活地支持各種傳輸協(xié)議。之所以稱之為繁瑣,就是靈活性帶來的弊端,即想要理清楚諸多的功能,就需要非常多時間在高速收發(fā)器上。
不過對于大部分的用戶來說,需要使用高速收發(fā)器的接口通常是相對固定的,這樣功能也就相對固定。這樣就沒有必要理解高速收發(fā)器全部的功能,只要理解需要使用的配置含義即可。這樣可以快速進行嘗試/測試,在嘗試/測試過程中結(jié)合文檔進行深入理解。這樣比強行讀完文檔再動手實踐,學(xué)習(xí)效果上有可能更好。所以Xilinx的高速收發(fā)器中默認就帶了一些常用接口的配置,便于用戶的學(xué)習(xí)/使用。
Xilinx 7系列FPGA芯片配置四種高速收發(fā)器,按照支持的最高線速率從低到高排列分別是GTP,GTX,GTH,GTZ。
GTP由于結(jié)構(gòu)問題,使用起來靈活性較差,同時支持的最高線速率也只有6.x個G。GTZ屬于7系列中最高端的高速收發(fā)器,集成GTZ的FPGA很少,同時也是用了多die技術(shù),物理上和FPGA主體是兩個部分。對這兩種GT,本文不做更多的介紹。
與GTX相比,GTH整體結(jié)構(gòu)幾乎一樣,只是在個別細節(jié)有更多的配置或者更強大的性能。考慮到文檔都是同一篇文檔,所以本文以GTX為例。本文所有內(nèi)容,除非特別注明,都同時適用于GTX和GTH。
對于高速收發(fā)器GTX來說,雖然可以通過IP中的默認配置來進行初步的學(xué)習(xí),而且有一定基礎(chǔ)之后,可以手動配置GTX參數(shù)。但是如果不充分理解GTX的各個功能,最常見的被卡住的地方,就是不能/不知道如何進行正確的問題定位。所以文本的主題就是介紹一些常用的調(diào)試手段和步驟,便于使用者初步定位問題。即使無法定位,將這些調(diào)試工作詳細記錄并提交給FAE,也會有很大的幫助。
這里需要說明,GTX的問題通常都不簡單,調(diào)試工作更是繁瑣。而且很可能無功而返,最終還是要請FAE/技術(shù)支持來幫忙解決。但是這不代表可以將所有的工作都推給FAE/技術(shù)支持。進行一些初步的調(diào)試,并將結(jié)果反饋給FAE/技術(shù)支持,可以讓專家更快的理解問題的現(xiàn)象并給出進一步的建議,而無需從最基礎(chǔ)的工作開始一步一步檢查。
第一步,在配置好的GTX的IP基礎(chǔ)上,生成GTX的example design,并做仿真。
首先,Vivado工具的一個優(yōu)點就是幾乎所有IP都會提供一個基于IP配置的example design,對于GTX這樣復(fù)雜的IP,這個example design是一個完成的工程,提供了多種用途,是一個非常好用的學(xué)習(xí)/調(diào)試工具。第一步先使用這個工程進行仿真,這樣便于理解GTX的具體操作,并與實際結(jié)果做對比。
這里強調(diào)一下,并不是針對GTX的,對于任何FPGA的設(shè)計,都推薦盡量進行充分的仿真。
第二步,直接使用GTX的example design作為工程,抓一下rx fsm reset done和rx status狀態(tài)機。如果有條件,可以使用8b10b在真實環(huán)境中進行測試。
說明一下8b10b的作用。8b10b在這里的作用是用于查看是否有8b10b的錯誤,如果出現(xiàn)8b10b的錯誤則表明有很高的概率是硬件有問題,可以重點查看PCB走線質(zhì)量、時鐘/電源等地方。如果沒有使用8b10b的環(huán)境(連測試環(huán)境都無法使用8b10b),那么問題會棘手一些。
rx fsm reset done是接收端任務(wù)完成的標(biāo)記,通常這個信號拉高表示接收端沒有問題,通常就代表GTX可以正常工作。如果無法穩(wěn)定拉高,則查看rx status的變化,看看是哪一步(或者哪幾步)導(dǎo)致無法拉高rx fsm reset done。
至于這兩個信號的出處。example design中提供了一個復(fù)位狀態(tài)機。默認是不包含在IP Core中,放在example design中。最終的設(shè)計,建議使用example design作為一個整體,而不是只使用IP Core。
第三步,使用ibert工具測試一下誤碼率,并查看一下眼圖。
如果example design能夠正常工作了,那么除非GTX IP設(shè)置有問題,通常來說,GTX最基本的應(yīng)用是沒問題的,很大可能是GT的上層控制有問題。如果example design測試有問題,rx fsm reset done信號無法拉高,并有8b10b錯誤,下一步用ibert檢查一下硬件電路是必要的。
在對端可以發(fā)送prbs的條件下(比如對端FPGA上運行的也是ibert),ibert可以測試誤碼率。通過誤碼率來查看一下鏈路質(zhì)量是否有問題。
無論誤碼率測試是否可以進行,ibert都可以對接收端進行眼圖的掃描。通過查看眼圖的大小,可以初步判斷鏈路的質(zhì)量。
ibert是Xilinx針對FPGA的高速收發(fā)器提供的測試工具。通常在PCB完成之后就可以先用ibert對高速收發(fā)器的鏈路質(zhì)量進行測試。另外,如果需要進行高低溫測試,直接使用ibert也是一個不錯的選擇。
第四步,有條件的情況下進行外部環(huán)回測試。
FPGA使用高速收發(fā)器的時候,一個常見的場景就是使用外部線纜,比如光模塊/光纖,或者同軸電纜等。這個時候是條件進行外部環(huán)回測試的。將example design進行外部環(huán)回測試,及同一個GTX的TX發(fā)出信號通過外部線纜返回到自己的RX端。如果這個測試結(jié)果是穩(wěn)定的,表明GTX是可以正常工作的。
另外還有很多情況是無法進行外部環(huán)回測試的,比如收發(fā)器走線是固定在PCB上的,例如PCIE。這種情況下,如果是兩個Xilinx的FPGA對接,可以考慮利用FPGA內(nèi)部的遠端環(huán)回進行測試。具體原理是待測GTX的TX發(fā)送數(shù)據(jù),送往輔助的FPGA的GTX,輔助GTX從RX收到數(shù)據(jù)后直接送給TX發(fā)送出去,待測GTX的RX端接收到輔助GTX TX端發(fā)來的數(shù)據(jù),完成環(huán)回。相當(dāng)于利用輔助GTX來實現(xiàn)一個外部環(huán)回。需要注意的是,遠端環(huán)回的使用是由條件限制的,具體請參考7系列GTX/GTH的手冊UG476。
外部環(huán)回測試,如果example design的結(jié)果不理想,可以用ibert再進行一次測試,有條件的情況下誤碼率和眼圖都查看一下。可以作為對比分析的數(shù)據(jù)。
第五步,在有條件的情況下,使用高速示波器,查看FPGA GTX RX接收端PIN上的眼圖。
這一步的條件限制最大。高速示波器的價格昂貴,而且使用復(fù)雜。同時由于FPGA多為BGA封裝,GTX的RX PIN很可能無法使用示波器探頭進行測試。所以很多用戶是沒有辦法進行這一步的測試的。
至于GT內(nèi)部的2D eye scan眼圖的使用,理論上是可以用來幫助調(diào)試的。但是實際上,當(dāng)用戶會使用2D eye scan的時候,通常也就不需要本文的一個初步調(diào)試的建議。所以本文針對的是初級用戶,相對高級/復(fù)雜的2D eye scan在這里不做介紹。
下面更進一步分析一下第二到第五步的具體作用。
第二步的rx fsm reset done信號可以作為GTX正常工作的指示信號。如果example design在最終的使用/測試場景中可以穩(wěn)定工作,該信號穩(wěn)定為高,可以表示設(shè)計幾乎沒有問題。如果用戶自己的設(shè)計出現(xiàn)問題,大概率是GTX代碼集成時的問題,比如沒有正確使用example design,或者,問題不來自GTX模塊。另外,如果配置有不合適的地方,可以參考仿真,并參考第四步的測試。
這里要注意一下,example design中用自帶數(shù)據(jù)源和接收數(shù)據(jù)進行比較驗證,來判斷數(shù)據(jù)是否正確。如果用戶使用自己的數(shù)據(jù)源,可能會導(dǎo)致數(shù)據(jù)驗證模塊一直輸出出錯,從而導(dǎo)致rx復(fù)位狀態(tài)機持續(xù)被復(fù)位。
這個問題可以通過查看rx status來判斷。另外其他的可能性也都會反映在rx status信號的變化中。所以rx status是個很重要的調(diào)試信號。
至于8b10b,最大的優(yōu)勢就是自帶錯誤檢查。如果出現(xiàn)8b10b的錯誤,則很大概率是鏈路有問題。
在第二步的基礎(chǔ)上用ibert進行測試,原因是除了可以測試誤碼率和眼圖之外(其實這兩個功能自己設(shè)計邏輯也可以實現(xiàn)),ibert將GTX的所有參數(shù)都拉了出來,可以進行任意的配置。如果第一步的發(fā)現(xiàn)是懷疑硬件鏈路有問題,利用ibert檢查一下鏈路是個不錯的方法,并且可以通過調(diào)整部分GTX的參數(shù)來嘗試降低誤碼率,擴大眼圖。另外,眼圖的大小也是有參考意義的。
這里需要注意一下,ibert和GTX example design是完全不一樣的設(shè)計。ibert只是為了便于測試,GTX的很多參數(shù)值與實際使用中的值不一樣。所以相比ibert,GTX example design更接近最后實現(xiàn)的結(jié)果。
當(dāng)說到大概率是硬件鏈路的問題時候,這個結(jié)論對調(diào)試可能沒什么幫助。所以這個時候需要進行環(huán)回測試。如果可以進行外部環(huán)回測試,發(fā)現(xiàn)環(huán)回測試正常,那么可能是某一端的端接部分有問題,或者兩邊GTX參考時鐘頻偏比較大。如果外部環(huán)回測試無法正常通過檢查,那么可以打開GTX的近端PMA環(huán)回進行測試(不要用近端PCS環(huán)回進行測試)。如果近端PMA環(huán)回測試正常,可以認為是外部鏈路質(zhì)量有問題(比如光模塊/光纖有問題),如果近端PMA環(huán)回測試不正常,大概率是時鐘/電源有問題。
環(huán)回測試可以做兩次,一次用GTX example design,一次用ibert,來對比結(jié)果。類似光纖有問題這樣的原因兩次測試都能得出一樣的結(jié)果。如果結(jié)果符合預(yù)期,那么就離真正的問題原因更進一步了。
眼圖的測量是判斷鏈路質(zhì)量的最終依據(jù)。通過使用外部示波器和ibert來測量眼圖,具體數(shù)據(jù)可以交給FAE,可以得知是否符合GTX的要求(原廠應(yīng)該有相關(guān)數(shù)據(jù),但是似乎沒有開放給普通用戶查看)。
示波器和ibert測試的眼圖,是不一樣的。通常用示波器,測量FPGA GTX RX pin腳出的眼圖,稱之為遠端眼圖。用ibert測量出來的原圖,稱之為近端眼圖。
遠近端眼圖是按信號是否經(jīng)過RX PMA來區(qū)分的。遠端眼圖是沒有經(jīng)過RX PMA的信號,近端眼圖是通過RX PMA的信號。
出自UG476
RX PMA的對接收到的信號有一定的處理功能(上圖中RX EQ、DFE)。處理后的信號質(zhì)量會變好。所以通常經(jīng)過RX PMA的信號會比Pin腳處更好,導(dǎo)致近端眼圖好于遠端眼圖。
具體的調(diào)試步驟,雖然總結(jié)成5個步驟,但是如果不熟悉,實現(xiàn)起來還是很麻煩的。不過由于GTX的問題通常都比較難以定位,所以這些測試一方面有很多參考價值,另一方面也加強了對GTX的理解。在研發(fā)過程中,提前進行相關(guān)的測試,可以排查很多問題,便于項目的按計劃進行。
評論