串列解串列器(SerDes)的數千兆赫茲級(MGH)的線路速率為現場可編程閘陣列(FPGA)帶來新的設計難題,特別是訊號完整性問題。此複雜技術所帶來的功能驗證挑戰,雖然不會更棘手,但也同樣困難。FPGA研發業者發現,SerDes設計的邏輯模擬容易陷入較長串列測試序列的泥沼,模擬次數以一~二個等級遞增。另外,SerDes使用複雜的層級化協定,使得全面驗證內部邏輯的工作難上加難。而且由於SerDes一般會在設計中整合陌生的第三方智慧財產權(IP)模組,因此最終系統的除錯工作也是一大問題。
設計人員可使用多種功能驗證方法來克服SerDes模擬的瓶頸問題。由於每種方法都會影響驗證的效能、精準度和工程生產力,因此,必須權衡開發時間、模擬時間和模擬精準度。可供選擇方法包括將SerDes從模擬中移除,使用並行通訊驗證晶片的其餘部分;在測試平台上加一個SerDes,然後將兩個SerDes背對背連接;在實驗室驗證系統板上設計的SerDes部分;使用與模擬相似的方法在原生FPGA硬體中執行整個元件;編寫客製的SerDes行為模型等方法。
FPGA SerDes技術發展快速
新型FPGA元件均使用可配置高效能SerDes元件來接入SerDes技術,以滿足各種應用需求,從簡單的以減少接腳數量為目標的晶片間資料傳輸協定,到用於連接現代電腦主機板的標準高效能匯流排等。這些SerDes元件一般以硬式IP模組形式提供給終端使用者。而常見的FPGA SerDes技術的位元速率已發展到10Gbit/s。
賽靈思(Xilinx)Virtex-5 GTP_DUAL單元是新型SerDes的代表。該單元有八道串列輸入/輸出(I/O)訊號,運行速率從100M~3.75Gbit/s,內核心側有三百四十二道訊號,可選擇部分啟用。整個功能組包括一百八十四個可配置參數、九個輸入時脈和五個輸出時脈。
如果沒有更詳細的資訊、設計或驗證具有這些特性的設計會是一項非常繁重的工作。收發器技術文件列出該SerDes模組支援的十七種通訊標準。這些標準使用十五種不同的參考時脈頻率,並對應唯一的一組配置參數。
自主開發的協定可使用任何FPGA SerDes裝置和時脈頻率,不管是否與標準協議重疊。在可配置參數中,其中六十八個參數有兩個可選值,七十個為數值型參數,共有七百三十個可變位元,八個為非數值型參數,並有多個可選值。該模擬模型僅通過參數設置實現的可用配置就超過二千七百三十種,確實驚人。這種SerDes收發器很顯然能夠在多種模式下工作,並為多種用戶設計提供支援。
要精確為該SerDes設計元件的行為建立模型,需要高度複雜的模擬模型。使用此模擬模型設計的邏輯模擬器上的明顯負荷就是實證。實際上,FPGA SerDes模型會主宰任何使用其設計的模擬時間。
交易處理器角色吃重
在任何設計中,測試一個介面的標準驗證方式是使用交易處理器,或者連接到介面接腳的模型,並交付和使用介面的資料協定。這些交易處理器一般能夠把週期精確的接腳級功能純化為數量較少,但更容易理解和操控的功能。要為FPGA SerDes系統連接功能,建立模型開發全套交易處理器需要高度的靈活性和強大功能。
為FPGA SerDes建立外部介面模型意味著在開發時間、模擬時間和精準度之間進行權衡取捨。最簡單的實現方式是在交易處理器中,使用另一個SerDes模擬模型。這種方法需要的開發時間最短,但會讓SerDes模擬模型的邏輯模擬器上的有效負載倍增。使用者也可編寫執行速度快的行為模型,但這勢必會影響功能完整性和精準度。還有一種方法是介於這兩個極端之間,即只為FPGA設計實際使用的SerDes功能建立模型,而不測試其餘的功能。
FPGA SerDes使驗證工作更趨複雜
在探討驗證SerDes設計的方法之前,先了解一下某些驗證漏洞,如功能模擬過程中,不易發現的漏洞源頭及發現它們的困難度。這也就是為何有必要對FPGA SerDes進行功能驗證的原因。
在驗證範圍上,使用FPGA的系統與3年前使用特定應用積體電路(ASIC)的系統很相似。利用現有FPGA元件能實現具有五十萬個觸發正反器、數兆MB內建隨機存取記憶體(RAM)、軟/硬核心微處理器,以及一系列專用通訊、資料處理和匯流排介面IP的邏輯設計。驗證使用這樣的元件系統要遵循一定的規則,而介面行為、子系統互動以及邏輯與實現正確的假設也須得到證實。FPGA SerDes技術的使用會讓每一項驗證工作都變得複雜。
避免功能漏洞 驗證工作不可少
功能漏洞的主要來源之一是由於直接連接到SerDes本身,不管是在串列側還是在並行側。串列側資料一般是對使用者資料編碼後的資料,被使用者的內核心側邏輯與正在設計的元件外部其電子產品之間的資料操控協定封裝於其中。這種使用者資料上的轉換協定可淺可深。
|
圖1 簡單的8b10bFPGA模塊圖 |
圖1是設計中使用的簡單實例。此為使用FPGA SerDes元件中,內置的8b10b編碼,把8位元並行資料簡單轉換為10位元串列資料。用於驗證本例中使用者路徑的功能模式非常簡單。對內核心側的兩百五十六個週期使用增量模式,就可驗證能夠通過介面的所有可能數據。雖然從架構上來說,這是一個簡單轉換,但在實際操作中,要在原生的FPGA SerDes元件應用這樣的轉換,須要連接數百個訊號,並配置幾百個參數。即便是以這個不太複雜的實例來說,使用者也很容易發生連接錯誤、配置錯誤或對元件規範理解不當的問題。因此,如果不進行適當的驗證,簡單使用SerDes也可能會產生功能漏洞。
連接處單元接口(XAUI)、PCIe或RapidIO等以封包為主的匯流排協定是更複雜的實例。這些介面一般透過FPGA元件內部的硬式SerDes IP和軟式(僅有可程式設計邏輯)IP共同建構。將FPGA軟/硬式IP結合使用是為滿足系統需求。上述實例均使用外部序列介面作為到標準匯流排的連接。使用預先驗證過的IP來實現匯流排介面,有助於避免在匯流排上出現基本功能錯誤,但同時也把介面驗證工作移到軟式IP的內核心側並行資料介面處。這種介面上的控制操作和資料操作視廠商而異,容易導致對規範理解不當。而針對標準匯流排介面,也有必要按特定廠商進行設計和驗證。
由於內核心側的介面屬於專有非標準介面,要驗證設計內核心側上的邏輯,只能透過在標準匯流排上產生客戶專有活動,才能得到需要結果。故這種測試無法實現IP廠商間的移植。要啟動IP內核心側上的介面訊號,有時須要較長的模擬序列,進而造成驗證互聯使用者邏輯的模擬時間大大延長。
對圖2中的XAUI設計而言,在其59秒的模擬時間中,有55秒被用於初始化XAUI鏈路,僅有4秒被用於測試鏈路上的資料傳輸。這種初始化序列對其他測試都必須重複進行。介面行為的驗證還會因為FPGA SerDes模擬模型占用的模擬時間和協定IP內核心側介面的專有性而變得更複雜。
|
圖2 XAUI FPGA模塊圖 |
多種驗證方法任君挑選
要驗證以SerDes為基礎的FPGA設計,使用者必須充分考慮上文所探討的常見漏洞,以有效管理SerDes模擬模型因其靈活性和複雜性所帶來的影響。在進行任何有意義的測試前,模擬時間的增加將導致初始化序列的延長。不過有多種方法可以處理這種延長的序列。
以下將分別針對圖1和圖2的設計,一個簡單的雙向8b10b串列鏈路和一個10Gbit/s的XAUI介面,介紹一些驗證的方法。在XAUI介面設計實例中,資料在內核心側XGMII平行介面和業界標準的串列XAUI介面之間轉換和傳輸。這個設計是由賽靈思的CORE Generator使用XAUI 8.1核心產生。現在透過這兩個設計來比較各種功能驗證方法,在GateRocket的實驗中,將在同一台機器上進行所有模擬。
移除SerDes模型
採用FPGA SerDes模型的設計,其常見模擬方法之一是完全移除SerDes模型,用外殼(Shell)取而代之,把並行內核心側資料直接從訊號源傳輸到訊號終點。一般的做法是界定模擬模型直接驅動SerDes模型的並行輸出,然後直接從測試平台上的交易處理器監控其內核心側的並行輸入,具體方法如圖3所示。
|
圖3 在設計中界定SerDes模型 |
此方法的優勢在於使用者不必開發複雜的串列交易處理器,但會影響動態精準度和串列鏈路的功能。比如說,無法適當地對序列化或解序列化次數給內核心側邏輯帶來的影響建立模型,也無法檢測出解序列化過程中發生的錯誤。對於圖1中簡單的8b10b實例,這是一種直觀的解決方案,因為SerDes元件專用於端對端的傳輸並行資料,串列鏈路不傳輸控制資訊。相比之下,將這種方法用在圖2的XAUI設計上,就須要對SerDes內核心側的配置和I/O相當了解。只是簡單連續發送資料、給接收器加上「逗點」控制訊號是不夠的,因為XAUI內核心邏輯需要在GTP_DUAL SerDes元件的控制輸出端進行狀態同步才能完成轉換。
建構在使用簡化模型的條件下能夠成功通過驗證的內核心側線路相當容易,但在連接到具有精確行為的真實物理元件時,則會發生故障。建立一個能通過邏輯模擬,但只覆蓋最起碼內核心側訊號集的模型,不能保證在實驗室中建構和運行FPGA時,能得到功能正常的元件。
驗證介面的運行須要做兩方面的工作,其一,驗證內核心側的邏輯和介面;其二,驗證SerDes本身的運行。界定法(Scoping Method)不能驗證SerDes本身的配置或執行。
將這種方法用於圖1中的設計可以達到非常快速的模擬,能夠在不到1秒的時間內完成測試。將同樣的方法用於圖2中的XAUI設計,模擬時間則為18秒。建立模型所耗的時間對8b10b設計來說微不足道(數分鐘到數小時),但對XAUI設計來說卻相當長(數天到數周)。
使用第二個SerDes
第二種FPGA SerDes設計功能驗證方法是在測試平台上把一個FPGA SerDes模擬模型當作交易處理器使用。這麼做的好處是開發時間短,但由於SerDes模型的模擬器上的有效負載量倍增,因此要讓每個模擬運作,反而延長模擬時間。
基本方法是把SerDes模型在交易處理器中連接(圖4)。這可保留所有的配置選項。在測試平台上,把交易處理器的串列-發送輸出連接到正在測試的設計的串列-接收輸入,反之亦然。
|
圖4 測試平台SerDes的連接 |
表1列出圖2設計模擬器在模擬運行中的特性。該測試平台使用行為交易處理器進行串列端刺激和採集回應。用XAUI設計中的SerDes模擬花了59秒。轉換測試平台,使之能夠使用SerDes模擬模型而非測試平台中的行為交易處理器,會讓模擬器的負載量加倍。在這種情況下,每次模擬運行的整體模擬時間會加倍,執行時間從59秒延長至101秒。對圖1所示的8b10b設計,模擬器顯示時間全被SerDes模擬模型占用,在測試平台上使用第二個SerDes讓模擬時間從32秒僅增加到64秒。
在實驗室中驗證SerDes
第三種FPGA SerDes設計功能驗證方法是在邏輯模擬階段跳過SerDes串列連接和內核心側連接的驗證,直接進入實驗室驗證設計這兩個部分。此方法的優勢在於可在即時系統中,透過SerDes介面傳輸大量資料。模擬時脈頻率一般比自由運行的物理FPGA元件要低五~七個等級。因此之於軟體模擬,在實驗室中用晶片進行模擬,可提供較長的測試週期。但是,在實驗室環境中除錯難度大大增加,因為難以掌握高頻串列訊號,也容易造成內核心側邏輯的內容不透明。
使用本機硬體驗證
第四種解決這個驗證問題的方法是建立一個模擬平台,把FPGA設計和周邊電子元件整合到該平台上,刺激並做出回應。把正在測試的FPGA專用硬體平台連接到邏輯模擬器或者軟體上,就可獲得FPGA設計的模式及檢查回饋。使用這種方法,必須定義並製作某種連接到用於現有暫存器轉化層(RTL)測試模擬器的無縫介面,或者放棄使用現有的RTL測試平台,將FPGA設計從測試和交易處理器的連接中分離。
運行在軟體模擬器內部的電路具有嚴格的同步概念。透過為硬體描述語言(HDL)行為和調度規則,能夠實現可預測且具有高生產力的純軟體設計和模擬。但是,將邏輯模擬器與硬體平台相連、維持硬體和被模擬的HDL之間的建置與保持關係,並不是一項簡單的工作。在設計與測試平台斷開的條件下完成驗證,也不是一項簡單的工作。一般的FPGA驗證流程都是從簡單的模組層級功能測試到全晶片功能測試,循序漸進。將設計同測試平台分離,就脫離了常見的FPGA驗證環境。
不管是哪種情況,都必須建構硬體平台來模擬SerDes設計的行為。任何設計修改都會迅速讓這個平台過時,因為元件與元件廠商的變化乃至接腳的變化,都要求對印刷電路板(PCB)重新布線。圖1所示的設計構硬體平台不能用於圖2所示的設計,因為,在一個設計中所存在的SerDes串列連接在另一個設計中並不存在。
圖2中在FPGA模擬系統中運行的XAUI設計可得到晶片精準度的SerDes行為,並把模擬時間從59秒縮短至18秒。但建構一個與邏輯模擬器緊密相連,且高度靈活的專用硬體模擬解決方案對專門的FPGA設計方案來說,並不是一件輕鬆的工作。不過商用電子設計自動化(EDA)廠商已經有回應,GateRocket也推出一款經成功驗證並獨立於設計的RocketDrive解決方案,能夠提供這項功能。本文中的資料就來自這款解決方案。
客製行為模型
用簡化的模型替換SerDes模擬模型會導致不正確的行為結果。為設計使用的特定模式編寫行為模型是一種常見的做法。可不必在模擬模型中,執行所有可能的SerDes功能,只須要執行選擇的參數設置和連接埠,這樣可縮小模型開發的整體規模。
當有新設計使用相同的參數和連接埠時,可重複利用以這種方式生成的模型。例如,使用簡單的8b10b編碼器/解碼器為圖1中簡單的8b10b設計建立模型。在今後使用任何帶有這種簡單運算的SerDes時,都可重複利用這個模擬模型。這些模型的可用性受具體功能設計的限制。如果須要新的設計或者SerDes功能,必須編寫新的模型。
在測試平台上用CORE Generator工具為圖2中的XAUI設計編寫的模型就是一個很好的實例。此測試平台實現針對XAUI協定的行為串列交易處理器。但是其他設計,包括圖1中所示的簡單8b10b設計就不能重複利用上述模型。該模擬使用廠商為設計中的SerDes提供的高精度模型,結合測試平台內部的交易處理器的專用行為SerDes模型,運作時間為59秒。
驗證方案各有優劣
表2和表3為對圖1的8b10b設計和圖2的XAUI設計的驗證方案進行比較。測量結果揭示某些值得關注的現象,並可從中總結出一些建議。比如,只有在SerDes模型占總體模擬時間很短,或者測試數量很少的情況下,使用第二個SerDes才是合適的。如果模擬特性顯示大部分時間被用在SerDes模型上,模擬時間將受到明顯影響。
提出的驗證方案有時可結合使用,例如設計小組可移除模擬中的SerDes模型,然後在實驗室中驗證SerDes功能。本地硬體模擬方案提供行為模型的效能和晶片行為的精準度。軟體模擬模型的精準度一般會影響模擬效能。硬體解決方案則是以開發時間為代價,提供更高的效能和精準度。模擬時間延長會迫使驗證週期中測試數量的減少,自然會導致功能漏洞。在等待最終版本時,使用評估板或目標系統來驗證SerDes設計,可能會帶來風險。
正如本文的實例所示,驗證基於SerDes的FPGA是一個複雜的過程。在所面臨的諸多難題中,最主要的困難包括在設計中除錯內核心邏輯,確保SerDes配置正確;決定使用二千七百三十種配置的哪一套配置來實現需要的功能;以及解決SerDes模型或閘電路模擬運行緩慢的問題,以準確驗證設計。
GateRocket建議對驗證專案進行精心規畫並嚴格執行,但是由於隨意使用手中的可用工具會導致模擬時間極長,或者只有透過跳過測試來完成專案進度,都會加大風險。因此寧可堅信沒有所謂的過度測試,但測試不足肯定存在。在規畫驗證專案的時候,應該問自己有沒有時間做好,或者有沒有時間做兩次。使用合適工具來驗證基於SerDes的設計最為重要。正如同ASIC設計小組使用硬體輔助驗證方法來確保設計能夠一次到位,硬體模擬驗證方法也有助於基於SerDes的高級FPGA設計的實現。
(本文作者GateRocket工程副總裁暨首席技術長)