章林柯 ,王 力 ,王艷武
(1.海軍工程大學 振動與噪聲研究所,湖北 武漢 430033;2.東南大學 集成電路學院,江蘇 南京 210096;3.92601部隊,廣東 湛江 524009)
為適應日益復雜的系統芯片SoC(System on Chip)設計,新一代芯片設計和驗證語言SystemVerilog應運而生,并在2005年11月被美國電氣和電子工程師協會(IEEE)批準為新標準[1]。在此基礎上,Synopsys公司和ARM公司聯合推出了VMM驗證方法學[2,3]。運用 VMM方法學提出的規則和標準函數庫,可以快速搭建功能強大的驗證平臺。通過受約束的隨機激勵,并以覆蓋率為指導,可以快速完成系統功能驗證,顯著提高驗證效率。
文章以實際工程項目為背景,構建了一種符合VMM方法學標準的系統級軟硬件協同驗證平臺。同時通過對實驗數據的分析,提出了用于優化隨機激勵約束的方法。
一般仿真驗證SoC的策略可分為3個步驟:模塊驗證、集成驗證和系統驗證[2,4]。其中系統驗證平臺中包含處理器CPU或DSP[2],并且采用軟硬件協同驗證方法。因此系統級軟硬件驗證比其他形式的驗證更貼近真實環境,在仿真中可以觀察到軟硬件運行的所有情況,這樣可以快速有效地定位問題并進行系統性能綜合分析。但是系統級軟硬件協同仿真驗證也存在驗證平臺搭建周期長、編譯仿真時間長和資源消耗大的問題。針對這些問題可以采用VMM方法學推薦的方法和標準函數庫,并采用成熟的 VIP(Verification Intellectual Property),快速搭建驗證平臺。同時通過一次編譯多次仿真的驗證方式,以提高驗證效率,縮短驗證周期。
圖1所示是一種符合VMM標準的系統級軟硬件協同仿真驗證平臺。在這里,硬件指RTL(Register Transfer Lever)設計,包括ARM核處理器模型。軟件指用匯編語言和C語言編寫的程序,通過編譯加載到仿真環境中由ARM核處理器模型執行[5]。驗證平臺由SystemVerilog語言實現,在RTL級仿真驗證。

圖1所示的驗證平臺符合可重用性[2,6],即不同的DUT(Design Under Test)模塊可以共用同一個驗證平臺。驗證平臺結構被模塊化和層次化。每個模塊的功能和層與層之間的接口被明確定義,這使得驗證平臺十分靈活。
1.1.1 測試層
測試層主要是編寫各種測試案例(Testcase),包括修改生成器的約束,定義新的隨機場景,同步不同事物處理器和創建定向激勵[2]。通常,在仿真的進行中要不斷查看搜集的覆蓋率,并以此來修改隨機激勵的約束條件,或者針對難以覆蓋的邊角情況編寫定向激勵。適當的約束條件可提高覆蓋率收斂速度。
1.1.2 場景層
場景層由生成器(Generator)產生可控且同步的事務。生成器根據測試層提供的靜態變量和約束條件,隨機生成不同的配置信息和數據。配置信息通過功能層的事務處理器傳遞給命令層的軟件程序,用于配置DUT。同時配置信息還要傳到VIP事務處理器用于配置VIP模塊。
1.1.3 功能層
功能層將場景層隨機生成的配置信息和數據通過事先約定的通道傳遞給命令層的軟件程序,另外檢測VIP事務處理器傳回的數據,送給計分板(Scoreboard),實現驗證平臺的自動檢查功能。
1.1.4 命令層
命令層包括控制ARM核運行的軟件程序(ARM Core Software,圖1中帶紋理方框),需要接收功能層通過通道(Channel)傳遞過來的配置信息和數據,同時還要配置和驅動DUT完成數據傳輸。VIP事務處理器(VIP Transfer)是用于驗證 DUT的成熟驗證 IP模塊。VIP監視器(VIP Monitor)屬于 VIP模塊,用于監視 DUT與外部通信的接口信號。命令層還包含一個或多個AMBA總線監視器,屬于成熟的VIP模塊,用于監視多層AMBA總線(Multi-layer AMBA Bus)[7]。
1.1.5 信號層
在信號層,例化了所有SoC模塊,實現系統級的功能驗證。除AMBA總線外,主要還包括ARM核、片上RAM、中斷控制模塊、DMA控制模塊以及其他模塊。
1.1.6 功能覆蓋率
功能覆蓋率可以從驗證平臺的其他模塊中收集,一般沒有特定的限定。
上面所介紹的驗證平臺與其他驗證平臺最大的區別就是引入了軟件程序,構建該驗證平臺的關鍵是軟件與硬件之間的通信。一般軟件是用匯編和C語言編寫的,硬件與驗證平臺分別是用可綜合Verilog語言和SystemVerilog語言編寫的。在這里規定用軟件程序與SV(SystemVerilog)之間的通信表示軟件程序與硬件之間的通信,本文介紹以下三種軟硬件通信方式。
(1)軟件向總線未用地址寫數據實現軟件程序向SV的單向通信;
(2)通過SoC上的具有通信功能的模塊,實現軟件程序與SV之間的通信;
(3)通過片內RAM,實現軟件程序與SV間的雙向通信。
在實際使用過程中,通過第一種方法輸出軟件程序運行過程中的信息,通過第三種方法可以作為軟硬件間信息通信的雙向通道。圖1所示的軟硬件協同仿真驗證平臺就是通過第三種方式實現軟硬件雙向通信的,同時也用到了第一種方式,輸出軟件運行過程中的信息。第二種方式可以視情況使用。
圖2所示是一種系統級軟硬件協同仿真驗證平臺的結構,虛線中為SoC的系統架構。為滿足驗證需求,在SoC系統架構中增添了兩個模塊:一個是Print Tube(PT)模塊,用來實現軟件仿真時的信息輸出。當軟件需要輸出信息時,向PT模塊寫數據,PT模塊會調用$display系統函數,顯示傳輸過來的信息。另一個是RAM(Random Access Memory)模塊,作為軟件和SV的信息交互的通道。RAM模塊有兩個總線接口,一個鏈接到SoC系統總線上,軟件可通過其讀寫RAM模塊;另一個接口與驗證平臺中的BFM(Bus Function Model)模塊鏈接,如AHB VIP Master[8]。同時在驗證平臺中使用RAL(Register Abstraction Layer)[9]方法,將RAM模塊抽象為 RAL模型。這樣處理后驗證平臺對RAM模塊的訪問更簡潔方便。

為驗證SoC系統上某個模塊的功能,需要編寫兩套激勵:C語言編寫的軟件程序和SV語言編寫的激勵。在仿真時,兩套激勵需要同步。可以通過監測RAM模塊中某個寄存器的變化實現同步。
在搭建圖1所示的系統級軟硬件協同仿真驗證平臺時,由于大量使用了VIP,同時開發了可重用的PT模塊和SRAM模塊,這使得驗證平臺的搭建工作可以在一周內完成,迅速提高了驗證效率。
搭建好基于VMM標準的驗證平臺后,要發揮平臺的作用,關鍵是要設計好受約束的隨機激勵。
一種分類樹(Classification Trees)[10]的方法可以有效地將待測模塊(DUT)的各種功能配置情況轉換成System-Verilog[1-3,11]的約束語句。但是一般在編寫受約束隨機激勵前,需要通過一些定向激勵確定驗證平臺工作正常,以及配置參數有效取值。
如下程序是驗證項目中為驗證SPI模塊DMA傳輸方式編寫的約束條件。在經過試驗性的定向測試和分類樹處理后,形成SystemVerilog的約束語句。


在編寫完隨機約束條件的同時還要編寫相應的覆蓋率組(covergroup)[1-3,8],用于自動收集仿真過程中功能覆蓋情況,指導仿真。如下程序是針對SPI模塊DMA傳輸方式編寫的功能覆蓋率組。

仿真所采用的軟件為Synopsys公司的VCS-MXC2009.06。它自帶有VMM標準庫函數,支持一次編譯多次仿真。由于如圖1所示的軟硬件協同仿真驗證平臺的通用性,可以將所有測試案例一次編譯后,分別仿真。不同的測試案例代碼寫到VMM的宏′vmm_test_begin()與′vmm_test_end()之間,并在驗證平臺的程序(program)中通過類(class)vmm_test_registry 的方法 run()來調用。仿真過程如圖3所示。
圖4是由上面程序2所定義的覆蓋率組收集的覆蓋率數據。每次仿真中,隨機產生10次隨機場景。這樣做可以減少重復運行仿真的次數,提高仿真速度。

圖3 驗證過程

從仿真結果看到:(1)覆蓋率在仿真初始階段增長很快,隨后逐漸趨緩;(2)劃分測試空間后的連續仿真,與未劃分測試空間的連續仿真最終仿真時間相同;(3)劃分測試空間后的并行仿真,覆蓋率收斂速度最快,可以使覆蓋率收斂速度提高近3倍。
另外由結果(1)可知,在仿真過程中,通過負反饋機制修改隨機變量的約束條件,排除已測試過的測試案例,可以使每次仿真的覆蓋率保持很高的增長速度[12]。但修改約束條件后需要重新編譯。
針對實際項目需要,文章介紹了一種符合VMM標準的系統級軟硬件協同仿真驗證平臺,討論了驗證平臺中軟硬之間的通信方式。給出了在此平臺上所做的一個模塊的具體驗證,包括隨機激勵的約束和相應的覆蓋率組。最后對仿真結果做了對比分析。結果表明,與基于SystemC語言搭建的驗證平臺[13]相比,基于VMM標準并使用SystemVerilog語言,可以提高驗證平臺的搭建效率和可重用性。通過對測試空間的劃分和仿真過程的控制,有效提高仿真效率。
[1]IEEE standard for SystemVerilog-unified hardware design,specification,and verification language-IEEE computer society[S].IEEE Std 1800TM-2007.
[2]BERGERON J,CERNY E,HUNTER A,et a1.SystemVerilog methodology manual for SystemVerilog[M].Spinger,2005.
[3]CHRIS S.Svstemverilog for verificiaton[M].Spinger,2006.
[4]程剛,蔡敏.基于SystemVerilog的 SoC功能驗證方法研究[J].科學技術與工程,2009,9(22):6814-6818.
[5]申敏,曹聰玲.基于SoC設計的軟硬件協同驗證技術研究[J].電子測試,2009,17(3):9-12.
[6]Synopsys Inc.Introduction to design verification with VMM:A quickstart guide.Version 1.0[S].2007,2008.
[7]ARM Limited.AMBATMSpecification(Rev 2.0)[M].May 1999.
[8]Han Kedeng,Zhong Liangshu.Verification of AMBA bus model using system verilog[C].Proceedings of 2007 8th International Conference on Electronic Measurement&Instruments,2007,1,Xian,China.
[9]BERGERON J,CERNY E,HUNTER A,et a1.Register abstraction layer[M].Spinger,2005.
[10]ALEXANDER K,WOLFGANG M.Classification trees for random tests and functional coverage[J].Design,Automation and Test in Europe,2006,1:1-2.
[11]SystemVerilog 3.1a language reference manual.Accellera’s Extensions to Verilog?.2004.
[12]黃思遠,邵智勇,于承興,等.VMM中功能覆蓋率收斂技術[J].集成電路設計,2010,33(4):16-17,31.
[13]魯芳,柏娜.基于 SystemC和Verilog軟硬件協同驗證[J].現代電子技術,2008,31(4):1-3.