摘要: 仿真和驗證是開發(fā)任何高質(zhì)量的基于 FPGA 的 RTL 編碼過程的基礎(chǔ)。本文檔主要分享虹科設(shè)計過程中的關(guān)鍵步驟。
在IP核的開發(fā)過程中,面臨著許多關(guān)鍵技術(shù),比如IP核的規(guī)格定義、基于接口的設(shè)計、IP核測試存取結(jié)構(gòu)標(biāo)準(zhǔn)、IP核的驗證與打包等。對于IP核的驗證,主要是建立參照模型和測試平臺,然后進行回歸測試和形式驗證。
這里參照的模型主要用于對系統(tǒng)功能進行驗證以及和RTL模型的對照驗證,該模型主要用Verilog HDL等語言來構(gòu)造。測試平臺的建立與子模塊設(shè)計并行,搭建驗證環(huán)境和開發(fā)測試用例,并針對IP核的行為級模型對測試環(huán)境和測試用例進行調(diào)試,從而同步準(zhǔn)備好用來仿真測試RTL級IP核的驗證環(huán)境和測試用例。
仿真和驗證是開發(fā)任何高質(zhì)量的基于 FPGA 的 RTL 編碼過程的基礎(chǔ)。在本系列文章中,我們將分享我們設(shè)計過程中的關(guān)鍵步驟,并將基于虹科以太網(wǎng)IP核產(chǎn)品組合進行介紹。
整個過程的關(guān)鍵步驟如下:
- 面向?qū)嶓w/塊的仿真:通過在每個輸入信號上生成激勵并驗證 RTL 代碼行為是否符合預(yù)期,對構(gòu)成每個 IP 核的不同模塊進行實體/塊的仿真。
- 面向全局的仿真:一旦不同的模塊被單獨驗證,則意味著下一步將整個IP仿真為單個 UUT(被測試單元)。
- (On)硬件測試:盡管擴展的仿真計劃提供了良好的可信度,但仍有許多corner的情況無法在虛擬環(huán)境中驗證。對于這些情況,需要基于硬件的測試計劃,這也是獲得高質(zhì)量結(jié)果的最后一步。
一、面向?qū)嶓w/塊的仿真
“面向?qū)嶓w或塊的仿真”這一步驟意味著驗證在 IP 核內(nèi)具有特定操作的特定實體或模塊的正確操作。每個 IP 核都由許多實體或塊組成,為了測試它們,每個實體會有不同的測試平臺,通過在輸入受到刺激時觀察設(shè)計的輸出來執(zhí)行設(shè)計,這將有助于檢查預(yù)期的行為。舉個例子有助于理解這些內(nèi)容,在此之前,我們需要先介紹虹科以太網(wǎng)交換機 IP 核的過濾數(shù)據(jù)庫。
過濾數(shù)據(jù)庫存儲 MAC 地址及其相關(guān)信息以做出幀轉(zhuǎn)發(fā)決策。它是一個基于哈希的存儲器,每個地址條目都有一些存儲過濾數(shù)據(jù)的 bin。該哈希算法還生成過濾數(shù)據(jù)庫內(nèi)存的索引。
過濾數(shù)據(jù)庫執(zhí)行有三個主要過程:學(xué)習(xí)、查找和老化。
- 學(xué)習(xí)過程負(fù)責(zé)在滿足不同條件時保存幀。
- 查找過程是在過濾數(shù)據(jù)庫中搜索并獲得幀的轉(zhuǎn)發(fā)端口掩碼的過程。
- 老化過程根據(jù)給定的時間段刪除舊的 MAC 條目。
在這個仿真MAC表的具體案例中,請始終嘗試測試構(gòu)成過濾數(shù)據(jù)庫功能的所有機制。從這個意義上說,就像學(xué)習(xí)不同的MAC,不同的查詢、老化是并行完成的,最后需要清除MAC表并驗證所有條目都已刪除。此外,研究并始終能夠測試可能的corner案例也十分重要。
測試和驗證復(fù)雜 FPGA 設(shè)計的第二個關(guān)鍵步驟是面向全局的仿真。一旦形成 IP 核的所有實體都按預(yù)期工作,全局仿真就會發(fā)揮作用。
二、面向全局的仿真
全局仿真意味著驗證整個IP實體的正確行為,包括構(gòu)成產(chǎn)品的每個子模塊。為了適應(yīng)不同客戶的用例,虹科SoC-e IP核解決方案在設(shè)計時充分考慮了靈活性,這意味著虹科所有的IP核都是高度可配置的,無論是在集成時(以優(yōu)化 FPGA 中的封裝)還是在運行時。借助于有著不同接口選項的寄存器映射(在下面的示例中,使用 AXI4),運行時配置成為可能。
這種靈活性也對仿真過程提出了挑戰(zhàn),因為需要根據(jù)仿真環(huán)境中的不同測試用例來配置IP。對此,虹科的合作伙伴SoC-e團隊開發(fā)了一個令人驚嘆的智能測試平臺環(huán)境,在該環(huán)境中可以進行實時配置并實現(xiàn)自動化,開發(fā)人員可以通過“點擊應(yīng)用”的方式來執(zhí)行復(fù)雜的仿真。例如,測試平臺可以通過交換機發(fā)送以太網(wǎng)幀,并可以通過訪問IP 核的統(tǒng)計寄存器來讀取結(jié)果(并檢查輸出是否符合預(yù)期)。
這極大地加快了調(diào)試過程,并允許開發(fā)團隊執(zhí)行快速迭代,而這在基于硬件的測試環(huán)境中會慢得多。在下圖為具有此類全局測試平臺架構(gòu)的框圖(基于虹科網(wǎng)管以太網(wǎng)交換機IP核):
網(wǎng)管型以太網(wǎng)交換機 (MES) 表示為UUT。其余的測試平臺組件是符合整個環(huán)境的不可綜合的 VHDL 模塊:
- Frame Generator::該模塊連接到以太網(wǎng)交換機 IP 的入口端口,負(fù)責(zé)生成激勵(以太網(wǎng)幀)。
- Frame Checker:該模塊連接到以太網(wǎng)交換機IP的出端口,負(fù)責(zé)分析交換機轉(zhuǎn)發(fā)的流量。
- AXI Configurator:它控制 AXI4 配置總線以修改配置寄存器的內(nèi)容(讀/寫操作)。
2.1 測試平臺執(zhí)行流程
正常的測試平臺執(zhí)行流程如下:首先,AXI Configurator模塊根據(jù)測試用例配置IP核。之后,每個Frame Generator都會生成測試幀,并將其發(fā)送到啟用的入口端口。幀是通過循環(huán)重復(fù)某些特定測試文件中定義的內(nèi)容來生成的。最后,F(xiàn)rame Checker接收幀(接收與否,取決于測試用例)。該塊將檢查每個端口對應(yīng)的統(tǒng)計信息,并根據(jù)執(zhí)行的測試用例確定輸出是否符合預(yù)期的。
虹科SoC-e測試平臺架構(gòu)的一大亮點是Frame Checker可以自動檢測多種錯誤,例如完整性錯誤、轉(zhuǎn)發(fā)錯誤或幀丟失。這是可實現(xiàn)的,因為Frame Generator可以生成具有特定格式的流量(例如有效載荷中的特殊模式、序列號等),F(xiàn)rame Checker可以解釋這些流量。
2.2 虹科測試平臺測試計劃
該測試平臺套件的驚人靈活性還與SoC-e定義的嚴(yán)格測試計劃相結(jié)合。對于每個IP核,都有一個測試計劃,旨在在仿真環(huán)境中測試盡可能多的特性。
例如,網(wǎng)管以太網(wǎng)交換機IP的測試計劃可以被劃分為五個主要部分:
- 通用交換
- 自定義轉(zhuǎn)發(fā)
- 過濾數(shù)據(jù)庫
- 優(yōu)先隊列
- VLAN
這些部分旨在涵蓋與網(wǎng)絡(luò)相關(guān)的不同功能的行為,以及不同的流量模式和情況。
2.3 仿真波形和TCL控制臺
測試平臺的結(jié)果可以由開發(fā)人員或用戶以不同的方式進行分析。TCL控制臺用于快速反饋測試結(jié)果。然而,在某些情況下,在仿真的特定時刻深入了解特定信號值可能會很有趣。對于這種情況,虹科團隊還開發(fā)了預(yù)先格式化的波形,以便于查找特定信號。
2.4 用于測試執(zhí)行的命令行界面(CLI)
此測試平臺環(huán)境中包含的最新功能之一是可以直接從命令行界面(CLI)執(zhí)行所有測試,而無需打開RTL仿真工具(Vivado或其他工具)。這是一個很大的改進,因為它可以實現(xiàn)更高的測試自動化。它基于使用Vivado編譯器命令的腳本(Python)的使用,以便用戶生成易于解釋的結(jié)果。下圖顯示了向用戶顯示的仿真菜單。用戶只需選擇相應(yīng)的選項即可執(zhí)行任何列出的測試:
眾所周知,仿真是一個需要大量時間的過程。即使在功能強大的計算機中執(zhí)行,毫秒或以上范圍內(nèi)的復(fù)雜仿真也需要持續(xù)數(shù)十分鐘,甚至更長。為了簡化執(zhí)行所有測試的過程(這需要幾個小時),我們實現(xiàn)了一個“-all”選項,它允許在管道中執(zhí)行所有測試,且無需用戶交互。完成所有測試后,它將提供有關(guān)每個測試的報告消息(如下圖所示),并在測試失敗的情況下生成輸出文件,以便開發(fā)人員稍后進行分析。
虹科SoC-e測試平臺套件,現(xiàn)在作為產(chǎn)品提供!
雖然所有這些測試平臺環(huán)境僅用于內(nèi)部調(diào)試和開發(fā)目的,但由于不少客戶有使用該測試平臺的需求,因此虹科的合作伙伴SoC-e目前已將其作為產(chǎn)品,提供給那些使用虹科SoC-e IP核解決方案并希望能夠執(zhí)行高級仿真工作(系統(tǒng)級仿真)的客戶。如果您對該產(chǎn)品感興趣和/或想了解更多信息,請通過sales@hkaco.com聯(lián)系我們。
三、硬件測試
硬件測試是為IP核產(chǎn)品執(zhí)行高質(zhì)量測試和驗證計劃的最后一步,主要可以分為以下幾個階段:
1)測試準(zhǔn)備:定義在產(chǎn)品開始測試之前必須完成的步驟
在這個階段,定義了測試計劃文檔。在這個文檔中,詳細(xì)描述了必須在 DUT(被測設(shè)備)上執(zhí)行的每一項測試。
2)測試執(zhí)行:執(zhí)行上一個階段中定義的測試用例
3)問題報告:檢查和報告在測試執(zhí)行期間檢測到的所有問題
我們提供了一個問題電子表格,其中將記錄在測試階段檢測到的每個問題。每當(dāng)注冊新問題時,都會向開發(fā)團隊報告,并且能夠追蹤哪些問題已解決,哪些問題仍有待審查。
4)測試結(jié)束:確定測試階段何時完成,并創(chuàng)建測試結(jié)果文檔,其中將包含成功執(zhí)行的測試的摘要以及有關(guān)測試的更多相關(guān)信息。
3.1 虹科SoC-e測試工具
為了優(yōu)化測試執(zhí)行過程,我們使用了虹科SoC-e測試工具以進行自動化測試。該工具考慮了以下內(nèi)容:
- DUT配置過程
- 流量注入和嗅探
- 記錄從 DUT 返回的流量
- 驗證保存的日志
- 將 DUT 設(shè)置為原始狀態(tài)
3.2 SoC-e測試軟件架構(gòu)
該工具的第一步與DUT 配置的執(zhí)行有關(guān)。這是通過名為 Platform.vars 的輸入配置文件完成的。通過該文件,用戶可以配置不同的參數(shù),如 DUT SSH 參數(shù)、主機 PC 的 IP 地址或網(wǎng)絡(luò)接口。
第二步,完成TS(測試站)和 DUT之間的流量注入和嗅探。我們有不同的第三方設(shè)備用作測試站,但最常用的設(shè)備之一是IXIA Novus One Plus。流量可以通過 IXIA 的 Python API 輕松發(fā)送。數(shù)據(jù)包操作是通過 Scapy Python 模塊完成的。盡管 Scapy 允許傳輸該工具生成的所有流量,但它是使用不同的工具tcpreplay執(zhí)行的。這使我們能夠克服由 Scapy 引起的帶寬和準(zhǔn)確性方面的某些限制。在此步驟中,測試提供了自定義流量的靈活性,以驗證不同的 DUT 功能??蓴U展性不是問題,因為該工具支持添加額外的流量和測試端口。
第三步,該工具使用測試站或通過 Linux tcpdump 軟件登記來自 DUT 的流量。
第四步,SoC-e 測試工具驗證上一步中存儲的信息(統(tǒng)計、寄存器轉(zhuǎn)儲(dump)等),以檢查一切是否正常。通過這兩個步驟,SoC-e 測試工具為測試用例的驗證提供了一個很好的解決方案。
最后,第五步,也是最后一步。最后一步的主要目的是將 DUT 配置恢復(fù)到其原始狀態(tài),因為它可能在測試期間被修改。
IP核可以使開發(fā)人員減設(shè)計工作量并縮短產(chǎn)品上市時間。虹科目前已有豐富的IP核產(chǎn)品組合,包括TSN IP核、HSR/PRP IP核、以太網(wǎng)IP核、冗余IP核等,可以輕松集成到用戶的FPGA中。若想了解更多信息,歡迎隨時通過info@hkaco.com聯(lián)系虹科工業(yè)控制團隊!
聯(lián)系虹科工程師:18922242268
聯(lián)系鏈接:https://tl-tx.dustess.com/ChxLxfu6M0