基于VMM方法學(xué)的系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證
為適應(yīng)日益復(fù)雜的系統(tǒng)芯片SoC(System on Chip)設(shè)計(jì),新一代芯片設(shè)計(jì)和驗(yàn)證語言SystemVerilog應(yīng)運(yùn)而生,并在2005年11月被美國電氣和電子工程師協(xié)會(huì)(IEEE)批準(zhǔn)為新標(biāo)準(zhǔn)[1]。在此基礎(chǔ)上,Synopsys公司和ARM公司聯(lián)合推出了VMM驗(yàn)證方法學(xué)[2,3]。運(yùn)用VMM方法學(xué)提出的規(guī)則和標(biāo)準(zhǔn)函數(shù)庫,可以快速搭建功能強(qiáng)大的驗(yàn)證平臺(tái)。通過受約束的隨機(jī)激勵(lì),并以覆蓋率為指導(dǎo),可以快速完成系統(tǒng)功能驗(yàn)證,顯著提高驗(yàn)證效率。
文章以實(shí)際工程項(xiàng)目為背景,構(gòu)建了一種符合VMM方法學(xué)標(biāo)準(zhǔn)的系統(tǒng)級軟硬件協(xié)同驗(yàn)證平臺(tái)。同時(shí)通過對實(shí)驗(yàn)數(shù)據(jù)的分析,提出了用于優(yōu)化隨機(jī)激勵(lì)約束的方法。
1 系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證平臺(tái)
一般仿真驗(yàn)證SoC的策略可分為3個(gè)步驟:模塊驗(yàn)證、集成驗(yàn)證和系統(tǒng)驗(yàn)證[2,4]。其中系統(tǒng)驗(yàn)證平臺(tái)中包含處理器CPU或DSP[2],并且采用軟硬件協(xié)同驗(yàn)證方法。因此系統(tǒng)級軟硬件驗(yàn)證比其他形式的驗(yàn)證更貼近真實(shí)環(huán)境,在仿真中可以觀察到軟硬件運(yùn)行的所有情況,這樣可以快速有效地定位問題并進(jìn)行系統(tǒng)性能綜合分析。但是系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證也存在驗(yàn)證平臺(tái)搭建周期長、編譯仿真時(shí)間長和資源消耗大的問題。針對這些問題可以采用VMM方法學(xué)推薦的方法和標(biāo)準(zhǔn)函數(shù)庫,并采用成熟的VIP(Verification Intellectual Property),快速搭建驗(yàn)證平臺(tái)。同時(shí)通過一次編譯多次仿真的驗(yàn)證方式,以提高驗(yàn)證效率,縮短驗(yàn)證周期。
圖1所示是一種符合VMM標(biāo)準(zhǔn)的系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證平臺(tái)。在這里,硬件指RTL(Register Transfer Lever)設(shè)計(jì),包括ARM核處理器模型。軟件指用匯編語言和C語言編寫的程序,通過編譯加載到仿真環(huán)境中由ARM核處理器模型執(zhí)行[5]。驗(yàn)證平臺(tái)由SystemVerilog語言實(shí)現(xiàn),在RTL級仿真驗(yàn)證。
1.1 驗(yàn)證平臺(tái)的架構(gòu)
圖1所示的驗(yàn)證平臺(tái)符合可重用性[2,6],即不同的DUT(Design Under Test)模塊可以共用同一個(gè)驗(yàn)證平臺(tái)。驗(yàn)證平臺(tái)結(jié)構(gòu)被模塊化和層次化。每個(gè)模塊的功能和層與層之間的接口被明確定義,這使得驗(yàn)證平臺(tái)十分靈活。
1.1.1 測試層
測試層主要是編寫各種測試案例(Testcase),包括修改生成器的約束,定義新的隨機(jī)場景,同步不同事物處理器和創(chuàng)建定向激勵(lì)[2]。通常,在仿真的進(jìn)行中要不斷查看搜集的覆蓋率,并以此來修改隨機(jī)激勵(lì)的約束條件,或者針對難以覆蓋的邊角情況編寫定向激勵(lì)。適當(dāng)?shù)募s束條件可提高覆蓋率收斂速度。
1.1.2 場景層
場景層由生成器(Generator)產(chǎn)生可控且同步的事務(wù)。生成器根據(jù)測試層提供的靜態(tài)變量和約束條件,隨機(jī)生成不同的配置信息和數(shù)據(jù)。配置信息通過功能層的事務(wù)處理器傳遞給命令層的軟件程序,用于配置DUT。同時(shí)配置信息還要傳到VIP事務(wù)處理器用于配置VIP模塊。
1.1.3 功能層
功能層將場景層隨機(jī)生成的配置信息和數(shù)據(jù)通過事先約定的通道傳遞給命令層的軟件程序,另外檢測VIP事務(wù)處理器傳回的數(shù)據(jù),送給計(jì)分板(Scoreboard),實(shí)現(xiàn)驗(yàn)證平臺(tái)的自動(dòng)檢查功能。
1.1.4 命令層
命令層包括控制ARM核運(yùn)行的軟件程序(ARM Core Software,圖1中帶紋理方框),需要接收功能層通過通道(Channel)傳遞過來的配置信息和數(shù)據(jù),同時(shí)還要配置和驅(qū)動(dòng)DUT完成數(shù)據(jù)傳輸。VIP事務(wù)處理器(VIP Transfer)是用于驗(yàn)證DUT的成熟驗(yàn)證IP模塊。VIP監(jiān)視器(VIP Monitor)屬于VIP模塊,用于監(jiān)視DUT與外部通信的接口信號。命令層還包含一個(gè)或多個(gè)AMBA總線監(jiān)視器,屬于成熟的VIP模塊,用于監(jiān)視多層AMBA總線(Multi-layer AMBA Bus)[7]。
1.1.5 信號層
在信號層,例化了所有SoC模塊,實(shí)現(xiàn)系統(tǒng)級的功能驗(yàn)證。除AMBA總線外,主要還包括ARM核、片上RAM、中斷控制模塊、DMA控制模塊以及其他模塊。
1.1.6 功能覆蓋率
功能覆蓋率可以從驗(yàn)證平臺(tái)的其他模塊中收集,一般沒有特定的限定。
1.2 驗(yàn)證平臺(tái)中軟硬件通信方式
上面所介紹的驗(yàn)證平臺(tái)與其他驗(yàn)證平臺(tái)最大的區(qū)別就是引入了軟件程序,構(gòu)建該驗(yàn)證平臺(tái)的關(guān)鍵是軟件與硬件之間的通信。一般軟件是用匯編和C語言編寫的,硬件與驗(yàn)證平臺(tái)分別是用可綜合Verilog語言和SystemVerilog語言編寫的。在這里規(guī)定用軟件程序與SV(SystemVerilog)之間的通信表示軟件程序與硬件之間的通信,本文介紹以下三種軟硬件通信方式。
(1)軟件向總線未用地址寫數(shù)據(jù)實(shí)現(xiàn)軟件程序向SV的單向通信;
(2)通過SoC上的具有通信功能的模塊,實(shí)現(xiàn)軟件程序與SV之間的通信;
(3)通過片內(nèi)RAM,實(shí)現(xiàn)軟件程序與SV間的雙向通信。
在實(shí)際使用過程中,通過第一種方法輸出軟件程序運(yùn)行過程中的信息,通過第三種方法可以作為軟硬件間信息通信的雙向通道。圖1所示的軟硬件協(xié)同仿真驗(yàn)證平臺(tái)就是通過第三種方式實(shí)現(xiàn)軟硬件雙向通信的,同時(shí)也用到了第一種方式,輸出軟件運(yùn)行過程中的信息。第二種方式可以視情況使用。
圖2所示是一種系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證平臺(tái)的結(jié)構(gòu),虛線中為SoC的系統(tǒng)架構(gòu)。為滿足驗(yàn)證需求,在SoC系統(tǒng)架構(gòu)中增添了兩個(gè)模塊:一個(gè)是Print Tube(PT)模塊,用來實(shí)現(xiàn)軟件仿真時(shí)的信息輸出。當(dāng)軟件需要輸出信息時(shí),向PT模塊寫數(shù)據(jù),PT模塊會(huì)調(diào)用$display系統(tǒng)函數(shù),顯示傳輸過來的信息。另一個(gè)是RAM(Random Access Memory)模塊,作為軟件和SV的信息交互的通道。RAM模塊有兩個(gè)總線接口,一個(gè)鏈接到SoC系統(tǒng)總線上,軟件可通過其讀寫RAM模塊;另一個(gè)接口與驗(yàn)證平臺(tái)中的BFM(Bus Function Model)模塊鏈接,如AHB VIP Master[8]。同時(shí)在驗(yàn)證平臺(tái)中使用RAL(Register Abstraction Layer)[9]方法,將RAM模塊抽象為RAL模型。這樣處理后驗(yàn)證平臺(tái)對RAM模塊的訪問更簡潔方便。
為驗(yàn)證SoC系統(tǒng)上某個(gè)模塊的功能,需要編寫兩套激勵(lì):C語言編寫的軟件程序和SV語言編寫的激勵(lì)。在仿真時(shí),兩套激勵(lì)需要同步。可以通過監(jiān)測RAM模塊中某個(gè)寄存器的變化實(shí)現(xiàn)同步。
在搭建圖1所示的系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證平臺(tái)時(shí),由于大量使用了VIP,同時(shí)開發(fā)了可重用的PT模塊和SRAM模塊,這使得驗(yàn)證平臺(tái)的搭建工作可以在一周內(nèi)完成,迅速提高了驗(yàn)證效率。
2 受約束的隨機(jī)激勵(lì)與功能覆蓋率組
搭建好基于VMM標(biāo)準(zhǔn)的驗(yàn)證平臺(tái)后,要發(fā)揮平臺(tái)的作用,關(guān)鍵是要設(shè)計(jì)好受約束的隨機(jī)激勵(lì)。
一種分類樹(Classification Trees)[10]的方法可以有效地將待測模塊(DUT)的各種功能配置情況轉(zhuǎn)換成System-
Verilog[1-3,11]的約束語句。但是一般在編寫受約束隨機(jī)激勵(lì)前,需要通過一些定向激勵(lì)確定驗(yàn)證平臺(tái)工作正常,以及配置參數(shù)有效取值。
如下程序是驗(yàn)證項(xiàng)目中為驗(yàn)證SPI模塊DMA傳輸方式編寫的約束條件。在經(jīng)過試驗(yàn)性的定向測試和分類樹處理后,形成SystemVerilog的約束語句。
程序1:
constraint c_ssi_dma {
ch dist { SSI1 := 1, SSI2 := 0, SSI3 := 0 };
ctrlr0_spc dist { 0 := 1, 1 := 0, 2 := 0, 3 := 1 };
( burst_size == 0 ) -> (dmatdlr inside {[0:20]})
(dmardlr == 0)(datas.size() inside{[79:80]});
( burst_size == 1 ) -> (dmatdlr inside {[0:17]})
(dmardlr == 3)(datas.size() inside{[77:80]});
( burst_size == 2 ) -> (dmatdlr inside {[0:13]})
(dmardlr == 7)(datas.size() inside{[73:80]});
( burst_size == 3 ) -> (dmatdlr inside {[0:5]})
(dmardlr == 15)(datas.size() inside{[65:80]});
……
……
datas.size() = 80;
for_block_ts == (80-datas.size());
}
在編寫完隨機(jī)約束條件的同時(shí)還要編寫相應(yīng)的覆蓋率組(covergroup)[1-3,8],用于自動(dòng)收集仿真過程中功能覆蓋情況,指導(dǎo)仿真。如下程序是針對SPI模塊DMA傳輸方式編寫的功能覆蓋率組。
程序2:
covergroup covport_ssi_dma;
coverpoint ch {bins CH[]={[1:3]};}
ctrlr0_spc_c:coverpoint ctrlr0_spc {
bins spc_00={0};
bins spc_11={3};}
coverpoint burst_size {
bins burst_size_1={0};
bins burst_size_4={1};
bins burst_size_8={2};
bins burst_size_16={3};}
dmatdlr_c:coverpoint dmatdlr {
……
……
}
……
……
cross ch, ctrlr0_spc_c, burst_size, dmatdlr_c, dmardlr_c,
for_block_ts, ctrlr0_dfl_c {
ignore_bins
burst_t1=binsof(burst_size)intersect{0}
binsof(dmatdlr_c)intersect{[21:$]};
ignore_bins
burst_t4=binsof(burst_size)intersect{1}
binsof(dmatdlr_c)intersect{[17:$]};
……
}
endgroup
3 驗(yàn)證過程與驗(yàn)證結(jié)果
3.1 驗(yàn)證過程
仿真所采用的軟件為Synopsys公司的VCS-MX-C2009.06。它自帶有VMM標(biāo)準(zhǔn)庫函數(shù),支持一次編譯多次仿真。由于如圖1所示的軟硬件協(xié)同仿真驗(yàn)證平臺(tái)的通用性,可以將所有測試案例一次編譯后,分別仿真。不同的測試案例代碼寫到VMM的宏′vmm_test_begin()與′vmm_test_end()之間,并在驗(yàn)證平臺(tái)的程序(program)中通過類(class)vmm_test_registry的方法run()來調(diào)用。仿真過程如圖3所示。
3.2 驗(yàn)證結(jié)果
圖4是由上面程序2所定義的覆蓋率組收集的覆蓋率數(shù)據(jù)。每次仿真中,隨機(jī)產(chǎn)生10次隨機(jī)場景。這樣做可以減少重復(fù)運(yùn)行仿真的次數(shù),提高仿真速度。
從仿真結(jié)果看到:(1)覆蓋率在仿真初始階段增長很快,隨后逐漸趨緩;(2)劃分測試空間后的連續(xù)仿真,與未劃分測試空間的連續(xù)仿真最終仿真時(shí)間相同;(3)劃分測試空間后的并行仿真,覆蓋率收斂速度最快,可以使覆蓋率收斂速度提高近3倍。
另外由結(jié)果(1)可知,在仿真過程中,通過負(fù)反饋機(jī)制修改隨機(jī)變量的約束條件,排除已測試過的測試案例,可以使每次仿真的覆蓋率保持很高的增長速度[12]。但修改約束條件后需要重新編譯。
針對實(shí)際項(xiàng)目需要,文章介紹了一種符合VMM標(biāo)準(zhǔn)的系統(tǒng)級軟硬件協(xié)同仿真驗(yàn)證平臺(tái),討論了驗(yàn)證平臺(tái)中軟硬之間的通信方式。給出了在此平臺(tái)上所做的一個(gè)模塊的具體驗(yàn)證,包括隨機(jī)激勵(lì)的約束和相應(yīng)的覆蓋率組。最后對仿真結(jié)果做了對比分析。結(jié)果表明,與基于SystemC語言搭建的驗(yàn)證平臺(tái)[13]相比,基于VMM標(biāo)準(zhǔn)并使用SystemVerilog語言,可以提高驗(yàn)證平臺(tái)的搭建效率和可重用性。通過對測試空間的劃分和仿真過程的控制,有效提高仿真效率。
評論