在整個芯片開發中,芯片設計的驗證階段就像一場前線戰斗,可以說是整道防線上成敗的關鍵。在芯片進入生產之前,需要保證其設計完全符合需求規格,解決所有潛在的風險,并修正所有的缺陷。這樣可以避免在流片后發現無法修正的硬件bug,降低后期的問題風險。隨著芯片規模和功能的復雜度增加,驗證的難度也隨之上升,而如何在降低驗證復雜度的同時保證其正確性和效率,正是驗證的核心問題。
核心角色是DUT(Design under Test),即待測試設計,也就是我們所設計的RTL(寄存器傳輸級)代碼。驗證流程從需求收集開始,將需求劃分為子系統模塊,進一步細化為功能模塊,然后編寫RTL級別的硬件描述語言文件。驗證人員便基于這些設計文件構建測試平臺(Testbench),用于模擬和控制DUT的輸入和環境,包括生成功能模型、輸入激勵、或在線數據交互等,如圖1所示??梢哉f,整個驗證流程就是確認DUT的正確性,確保芯片產品符合規格要求。
圖1 驗證人員構建的測試平臺
面對復雜的設計代碼,我們如何確保其準確性?功能驗證就是這場戰斗的關鍵過程。工程師們通常使用的驗證方法包括軟件仿真、硬件仿真和原型驗證等。這些不同的驗證方法都有各自的優點,也有各自的不足。在不同設計階段選擇不同的驗證工具,提高生產效率,加速驗證的收斂顯得尤為重要。而所有這些都圍繞著DUT進行。接下來,我們將詳細探討軟件仿真、硬件仿真和原型驗證這三種方法是如何圍繞DUT進行工作的。
軟件仿真
軟件仿真是基于硬件描述語言對數字電路設計進行功能和特性的仿真和驗證。它會通過在計算機環境中模擬硬件行為,驗證電路設計是否符合原意。仿真過程是正確實現設計的關鍵環節,它以硬件描述語言(如VHDL或Verilog)編寫的模型為基礎,檢驗設計中的功能是否正確無誤。
一個簡化的仿真驗證系統如圖2所示:在這個過程中,測試向量(TestVector)運行在測試平臺(Testbench)上,DUT 和Testbench一起通過仿真系統(基于軟件)運行,最終運行出來的結果通常會和預期結果做比較。
圖2 仿真驗證系統
但是隨著芯片設計規模的增大,傳統使用Verilog/SystemVerilog編寫的測試平臺不足以高效覆蓋測試場景需求。例如,測試平臺中的基本組件之間的通信、以及這些組件之間的建立、管理和重用性問題。因此UVM(Universal Verification Methodology)應運而生。
在復雜的系統級芯片設計中,UVM提供了一個健壯的測試平臺,能夠處理大量的設計和驗證任務。UVM的主要優勢在于其重復使用性,可以使設計人員在多個項目中重復使用同一驗證環境,大大提高了設計效率。此外,由于UVM是一個行業標準,因此使用UVM可以方便地與其他設計團隊進行協作,并使用他們創建的UVM組件。圖3是一個典型的UVM驗證平臺框圖。
圖3 典型的UVM驗證平臺框圖
一般來說,軟件仿真分為功能仿真、綜合后仿真和時序仿真,分別對應于RTL設計輸入后、綜合完成后、布局布線完成后等步驟。
功能仿真:即RTL仿真,這是仿真驗證的第一步,也叫前仿真,目標是在理想的情況下,確認設計的功能是否符合預期。在這個階段,我們通過模擬設計在特定輸入下的輸出來驗證其行為。這就像對待測試設計(DUT)進行“預演”,在沒有物理硬件的情況下就可以發現設計中的邏輯錯誤。
綜合后仿真:在綜合后的仿真階段,目標是確認綜合后的電路結構是否符合設計的意圖。在這個階段,我們使用綜合工具將硬件描述語言(HDL)代碼轉化為邏輯網表。然后,我們使用這個邏輯網表進行仿真,以確認綜合后的電路行為是否和設計的意圖一致。
時序仿真:最后,在時序仿真或后仿真階段,我們將考慮設計在實際硬件和工藝中可能遇到的時序問題。這包括元件的延時、布線延時、電源和熱問題等。在這個階段,我們會使用更復雜的仿真模型,比如考慮了延時信息的模型,以更準確地模擬硬件的行為。
圖4 軟件仿真的應用
在每個階段,我們都通過建立測試平臺(Testbench)提供對DUT的輸入和環境的控制,并將DUT的輸出與預期進行比較。而這三種仿真應用的共同目標,都是要確保我們的芯片設計在各個階段都能滿足預期的功能和性能。
以思爾芯的PegaSim芯神馳軟件仿真工具為例,其為一款高性能、多語言混合的商用數字軟件仿真工具,采用了創新的架構算法,實現了高性能的仿真和約束求解器引擎,對System Verilog語言、Verilog語言、VHDL語言和UVM方法學等提供了廣泛的支持,同時支持時序反標和門級后仿真,并可提供功能覆蓋率、代碼覆蓋率分析等功能。同時創新的軟件架構允許仿真器支持不同的處理器架構——x86-64、RISC-V、ARM等。
雖然軟件仿真技術對工程師來說非常有必要,但就現有的商業模式來說,軟件仿真的仿真能力和算力都與軟件許可證(software license)掛鉤。供應商提供的商用軟件仿真服務會以license的形式收費。但在實際使用時,工程師們難以依賴經驗進行有效算力與工具需求計算的匹配。如圖5所示。
圖5 設計驗證中的算力難題
思爾芯的PegaSim芯神馳軟件仿真工具除了傳統license合作模式外,還采用了創新的商業模式,提供了一個即算即用的在線仿真云平臺。在對DUT進行回歸測試和覆蓋范圍隨即驅動時,可實現如圖6所示??梢院芎玫貪M足企業多樣化的需求,幫助企業解決license使用緊張、算力不足、license被設計工程師長期占用等問題。為工程師提供按需和無限的仿真能力,提高驗證團隊的工作效率。
硬件仿真
雖然軟件仿真易于使用,成本效益高,并且具有復雜的調試能力,但一旦碰到大規模數字電路設計,結構越是復雜,仿真所需要的時間就越長,軟件仿真的效益得到了限制。所以通過專門的設備在硬件上調試芯片設計,如硬件仿真和原型驗證,是其重要的解決方案之一。
硬件仿真的運行速度和調試效率比軟件仿真可要高很多,因為它可以對完整的芯片設計進行自動化的加速仿真并調試,多應用于大規模SoC設計前期的RTL功能驗證。
硬件仿真首先將硬件設計(通常以HDL,例如Verilog或VHDL編寫)編譯,然后加載編譯后的設計。在一些系統中,設計可能被加載到專門的硬件中(例如FPGA)。一旦設計被加載,硬件仿真就可以運行設計,并觀察其行為。硬件仿真通常會提供觀察和調試設計內部狀態的工具。最后,工程師可以根據結果分析設計的正確性,查找并解決問題,以優化設計。
硬件仿真可以提供比軟件仿真更快的仿真速度,同時還能模擬出硬件在實際運行中的實際行為。這使得它們在硬件設計和驗證過程中,尤其是在處理復雜和大規模硬件系統時,非常有用。硬件仿真系統主要由硬件和軟件兩部分構成。以思爾芯的OmniArk芯神鼎企業級硬件仿真系統為例,其中硬件部分是由眾多的FPGA搭成,最多可擴展至上百顆FPGA。軟件部分由編譯(Compile)、運行(Runtime)、調試(Debug)組成,如圖7所示。
圖7 芯神鼎硬件仿真系統的軟件部分
編譯:編譯階段通過完全自動化軟件將待測設計(DUT)映射到硬件仿真系統上,便可以進行高速仿真。編譯的流程如圖8所示。
圖8 芯神鼎硬件仿真系統的編譯流程
運行:運行時Runtime軟件控制整個硬件仿真的運行過程,它可以控制硬件仿真以支持不同的用戶模式,它的核心組成部分是運行數據庫、運行庫、軟硬件接口以及用戶交互接口,例如ICE(In-circuit Emulation)、TBA(Transaction-based Acceleration)以及QEMU模式等。還可支持多用戶同時進行使用設備。
調試:硬件仿真有著接近軟件仿真的調試能力??梢酝ㄟ^靜態探針(static probe),動態探針(dynamic probe)及內置邏輯分析儀(ILA)可以觀測信號的數據,以及實現信號全可視(Full Visibility)。同時,通過ReadBack/WriteBack功能可以實現對信號進行賦值或恢復。
此外,硬件仿真還會配備專門的驗證核(VIP),為硬件仿真系統提供了所需的驗證接口。例如芯神鼎可以支持APB、AHB、AXI4、AXI4-Stream、AXI4-Lite、UART、SPI、I2C、DDR、Ethernet、USB、PCIe、SPI Flash、NAND Flash等?;靖采w了常用的接口協議,可以滿足絕大部分驗證應用需求。后續思爾芯也可以根據客戶需求進行開發。
芯神鼎在提供硬件加速平臺的同時也提供各種功能的創新配套軟件:用戶設計語法自動糾錯、Smart P&R技術,ABS(Auto-Block Select)技術,多樣化信號采集手段等等,讓用戶實現MHz級仿真加速、全自動智能編譯流程、強大調試能力,以及多種仿真驗證模式。更擁有豐富的VIP庫,適合超大規模高端通用芯片設計的系統級驗證,可以滿足不同驗證場景需求。
總之,硬件仿真通常集成了專門的電路和邏輯,以加速仿真過程。其速度通??梢赃_到幾百kHz甚至MHz級別,軟件仿真中的功能仿真通常運行速度通常在幾十至幾百Hz,相比之下,硬件仿真比軟件仿真快幾千倍至幾十萬倍。因此,硬件仿真在驗證復雜設計時非常有用。它們能夠以更高的速度執行仿真,更快地提供反饋和結果,這對于設計的驗證和調試至關重要。
原型驗證
在復雜的集成電路設計中,原型驗證是另一項關鍵的“驗證”技術方法。其目的是在早期階段就通過與最終芯片接近的原型硬件來測試和驗證電路設計,通過接近最終芯片的運行速度確保設計出正確的芯片。原型驗證將設計映射到FPGA陣列,通過模擬芯片的功能和應用環境,來驗證芯片整體功能,并提供片上軟件開發環境。因為相比硬件仿真,原型驗證的運行速度更接近于真實芯片,可以配合軟件工程師來進行底層軟件的開發。這一流片前的軟硬件協同開發,是其最不可替代的地方。
以下是DUT在原型驗證流程中的關鍵步驟,包括設計分割、分割后的系統級時序分析、編程和下載、功能驗證調試等步驟。
設計分割:在開始階段,我們需要將復雜的設計即DUT分割以適應FPGA的資源限制。通常,由于單個FPGA無法容納超大規模的設計,我們需要利用特定工具將設計邏輯分割成更小的部分。每一部分被映射到一個或多個FPGA中,這需要在保持整體設計完整性的同時,盡量減少跨FPGA信號數量以減少系統間的路徑延時,從而提高系統性能。一種典型的RTL級分割流程如圖9所示。
其中的邏輯綜合是將DUT轉化為FPGA可以理解的網表。對分割后的設計插入TDM也是影響分割后系統性能的關鍵步驟。通常分割后設計的FPGA之間存在遠遠超過物理連接數量的互聯信號,插入TDM是通過時分復用的方式來將這些互聯信號通過有限的物理資源來傳輸。映射和布局布線是將綜合后的設計映射到FPGA的特定資源上,包括查找表、觸發器、DSP模塊等,然后進行布局布線。
圖9 芯神瞳RTL級設計分割流程
時序分析:時序分析確保設計在FPGA上運行時滿足所有的時序要求,這包括各個FPGA的時序要求以及整個系統的時序要求。由于對用戶原始設計進行了分割,在做時序分析時需要考慮被分割的時序路徑延時。這部分時序延時主要來源于TDM的延時和跨FPGA連線的延遲,這兩種延時通常能達到幾十ns。當存在不滿足時序要求的路徑,可能導致設計無法正常工作。這種情況下,可以通過優化時序約束、設計優化、流水線設計、分割邊界調整、布局布線優化等方式改善時序性能,使得設計滿足預期的時鐘頻率,減少路徑的延遲。
由于原型驗證系統能夠運行的頻率是衡量系統性能的一個關鍵因素,所以如何提高系統運行頻率也是經常需要考慮的一個問題。通常的做法有調整分割邊界、分割結果TDM優化、使用布局布線約束、使用時序驅動的分割算法等,達到降低關鍵路徑的延遲、提高系統性能的目的。
編程和下載:將映射和布局布線后的設計編譯為FPGA的比特文件;搭建各個FPGA之間的互聯組網結構,然后將比特文件下載到對應的各個FPGA上。下載完成后根據需要對全局時鐘、全局復位以及其他外圍IP進行配置。這確保了DUT可以在原型上正確地運行。
功能驗證調試:這個階段主要是測試DUT在FPGA上運行時的功能的正確性。我們可以通過實際的硬件接口或虛擬IO接口對DUT進行測試,以驗證其是否符合預期。
如何對分割后的設計進行調試也是原型驗證中需要重點考慮的問題。通常,除了用戶設計中自帶的應用級調試監控工具,設計人員還需要抓取設計運行時的信號波形進行分析。對于該應用場景,思爾芯提供的MDM Pro調試解決方案,支持多顆FPGA協同調試,支持最大125MHz的高速采樣頻率,最大波形存儲容量可達64GB,能有效解決原型驗證中多顆FPGA的協同調試問題。
以思爾芯的Prodigy芯神瞳原型驗證解決方案為例,芯神瞳就提供了基于時序驅動的RTL級分割算法,能夠實現全自動的分割編譯流程。其內置的增量編譯算法功能可以幫助用戶完成快速迭代的版本迭代,大大提高用戶開發驗證效率。
總之,因為原型驗證內部處理和真實芯片一樣都是可以做并行運算,其高效性能可以透過硬件子卡對接真實數據來發現更多隱蔽的bug。相較之下,軟件仿真使用的激勵源模型和真實數據是有一定差別,因此并不能將Corner Case全覆蓋,此時就需要原型驗證。通過原型驗證,在流片前我們就可以在SoC的基本功能驗證通過后,立刻開始驅動開發。甚至可以在流片前就給有需求的客戶進行芯片演示,進行預售。這就大大縮短了整個驗證周期,加速了產品上市時間。
總結
軟件仿真、硬件仿真、原型驗證這三種方法通過各自的優點和功能,共同為芯片設計提供了一種全面而高效的驗證手段,有助于加速整個芯片開發周期,同時確保設計的正確性。
在先進工藝的推動下,異構計算架構已逐漸成為設計芯片的主流方式。由于不同的運算單元具有各自獨特的架構設計和信息處理方式,因此需要采用符合其特性的驗證方法。為了縮短芯片的上市周期,各大芯片設計公司已達成共識,即在不同設計階段選擇不同的仿真驗證工具,以提升驗證效率,這一策略已被廣泛應用于各大芯片領域。
思爾芯的異構驗證方法就是在這個背景下產生。它使用多種不同的驗證手段,如軟件仿真(芯神馳)、硬件仿真(芯神鼎)和原型驗證(芯神瞳),整合多種驗證方法,不斷創新驗證工具和驗證流程,圍繞著待測試設計(DUT)進行協同仿真和交叉驗證,以確保設計出正確的芯片。思爾芯一系列EDA工具對DUT進行詳盡全面的檢查,檢查其在各個層次、各個方面的功能和性能。這一系列的工作能夠有效地識別和修復設計中的問題,從而大大縮短芯片的開發周期。
-
仿真
+關注
關注
50文章
3972瀏覽量
132970 -
硬件
+關注
關注
11文章
3114瀏覽量
65858 -
軟件
+關注
關注
69文章
4572瀏覽量
86706
發布評論請先 登錄
相關推薦
評論