天天看點

軟體仿真、硬體仿真、原型驗證是如何工作的?

作者:半導體行業觀察

在整個晶片開發中,晶片設計的驗證階段就像一場前線戰鬥,可以說是整道防線上成敗的關鍵。在晶片進入生産之前,需要保證其設計完全符合需求規格,解決所有潛在的風險,并修正所有的缺陷。這樣可以避免在流片後發現無法修正的硬體bug,降低後期的問題風險。随着晶片規模和功能的複雜度增加,驗證的難度也随之上升,而如何在降低驗證複雜度的同時保證其正确性和效率,正是驗證的核心問題。

核心角色是DUT(Design under Test),即待測試設計,也就是我們所設計的RTL(寄存器傳輸級)代碼。驗證流程從需求收集開始,将需求劃分為子系統子產品,進一步細化為功能子產品,然後編寫RTL級别的硬體描述語言檔案。驗證人員便基于這些設計檔案建構測試平台(Testbench),用于模拟和控制DUT的輸入和環境,包括生成功能模型、輸入激勵、或線上資料互動等,如圖1所示。可以說,整個驗證流程就是确認DUT的正确性,確定晶片産品符合規格要求。

軟體仿真、硬體仿真、原型驗證是如何工作的?

圖1 驗證人員建構的測試平台

面對複雜的設計代碼,我們如何確定其準确性?功能驗證就是這場戰鬥的關鍵過程。工程師們通常使用的驗證方法包括軟體仿真、硬體仿真和原型驗證等。這些不同的驗證方法都有各自的優點,也有各自的不足。在不同設計階段選擇不同的驗證工具,提高生産效率,加速驗證的收斂顯得尤為重要。而所有這些都圍繞着DUT進行。接下來,我們将詳細探讨軟體仿真、硬體仿真和原型驗證這三種方法是如何圍繞DUT進行工作的。

1.軟體仿真

軟體仿真是基于硬體描述語言對數字電路設計進行功能和特性的仿真和驗證。它會通過在計算機環境中模拟硬體行為,驗證電路設計是否符合原意。仿真過程是正确實作設計的關鍵環節,它以硬體描述語言(如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所示。可以很好地滿足企業多樣化的需求,幫助企業解決license使用緊張、算力不足、license被設計工程師長期占用等問題。為工程師提供按需和無限的仿真能力,提高驗證團隊的工作效率。

軟體仿真、硬體仿真、原型驗證是如何工作的?

圖6 芯神馳提供的線上仿真雲平台

2.硬體仿真

雖然軟體仿真易于使用,成本效益高,并且具有複雜的調試能力,但一旦碰到大規模數字電路設計,結構越是複雜,仿真所需要的時間就越長,軟體仿真的效益得到了限制。是以通過專門的裝置在硬體上調試晶片設計,如硬體仿真和原型驗證,是其重要的解決方案之一。

硬體仿真的運作速度和調試效率比軟體仿真可要高很多,因為它可以對完整的晶片設計進行自動化的加速仿真并調試,多應用于大規模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等。基本覆寫了常用的接口協定,可以滿足絕大部分驗證應用需求。後續思爾芯也可以根據客戶需求進行開發。

芯神鼎在提供硬體加速平台的同時也提供各種功能的創新配套軟體:使用者設計文法自動糾錯、Smart P&R技術,ABS(Auto-Block Select)技術,多樣化信号采集手段等等,讓使用者實作MHz級仿真加速、全自動智能編譯流程、強大調試能力,以及多種仿真驗證模式。更擁有豐富的VIP庫,适合超大規模高端通用晶片設計的系統級驗證,可以滿足不同驗證場景需求。

總之,硬體仿真通常內建了專門的電路和邏輯,以加速仿真過程。其速度通常可以達到幾百kHz甚至MHz級别,軟體仿真中的功能仿真通常運作速度通常在幾十至幾百Hz,相比之下,硬體仿真比軟體仿真快幾千倍至幾十萬倍。是以,硬體仿真在驗證複雜設計時非常有用。它們能夠以更高的速度執行仿真,更快地提供回報和結果,這對于設計的驗證和調試至關重要。

3.原型驗證

在複雜的內建電路設計中,原型驗證是另一項關鍵的“驗證”技術方法。其目的是在早期階段就通過與最終晶片接近的原型硬體來測試和驗證電路設計,通過接近最終晶片的運作速度確定設計出正确的晶片。原型驗證将設計映射到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的基本功能驗證通過後,立刻開始驅動開發。甚至可以在流片前就給有需求的客戶進行晶片示範,進行預售。這就大大縮短了整個驗證周期,加速了産品上市時間。

4.總結

軟體仿真、硬體仿真、原型驗證這三種方法通過各自的優點和功能,共同為晶片設計提供了一種全面而高效的驗證手段,有助于加速整個晶片開發周期,同時確定設計的正确性。

在先進工藝的推動下,異構計算架構已逐漸成為設計晶片的主流方式。由于不同的運算單元具有各自獨特的架構設計和資訊處理方式,是以需要采用符合其特性的驗證方法。為了縮短晶片的上市周期,各大晶片設計公司已達成共識,即在不同設計階段選擇不同的仿真驗證工具,以提升驗證效率,這一政策已被廣泛應用于各大晶片領域。

思爾芯的異構驗證方法就是在這個背景下産生。它使用多種不同的驗證手段,如軟體仿真(芯神馳)、硬體仿真(芯神鼎)和原型驗證(芯神瞳),整合多種驗證方法,不斷創新驗證工具和驗證流程,圍繞着待測試設計(DUT)進行協同仿真和交叉驗證,以確定設計出正确的晶片。思爾芯一系列EDA工具對DUT進行詳盡全面的檢查,檢查其在各個層次、各個方面的功能和性能。這一系列的工作能夠有效地識别和修複設計中的問題,進而大大縮短晶片的開發周期。

關于思爾芯S2C

思爾芯(S2C)自2004年設立上海總部以來始終專注于內建電路EDA領域。作為業内知名的EDA解決方案專家,公司業務聚焦于數字晶片的前端驗證,已覆寫驗證雲服務、架構設計、軟體仿真、硬體仿真、原型驗證等工具。已與超過600家國内外企業建立了良好的合作關系,服務于人工智能、高性能計算、圖像處理、資料存儲、信号處理等數字電路設計功能的實作,廣泛應用于物聯網、雲計算、5G通信、智慧醫療、汽車電子等終端領域。

公司總部位于上海,并建立了全球化的技術研發與市場服務網絡,在北京、深圳、西安、香港、東京、首爾及聖何塞等地均設有分支機構或辦事處。

思爾芯在EDA領域的技術實力受到了業界的廣泛認可,通過多年耕耘,已在原型驗證領域構築了技術與市場的雙優勢地位。并參與了大陸EDA團體标準的制定,承擔了多項國家及地方重大科研項目。

繼續閱讀