新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于VMM方法學(xué)的系統(tǒng)級軟硬件協(xié)同仿真驗證

基于VMM方法學(xué)的系統(tǒng)級軟硬件協(xié)同仿真驗證

作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

為適應(yīng)日益復(fù)雜的系統(tǒng)芯片SoC(System on Chip)設(shè)計,新一代芯片設(shè)計和驗證語言SystemVerilog應(yīng)運(yùn)而生,并在2005年11月被美國電氣和電子工程師協(xié)會(IEEE)批準(zhǔn)為新標(biāo)準(zhǔn)[1]。在此基礎(chǔ)上,Synopsys公司和ARM公司聯(lián)合推出了VMM驗證方法學(xué)[2,3]。運(yùn)用提出的規(guī)則和標(biāo)準(zhǔn)函數(shù)庫,可以快速搭建功能強(qiáng)大的驗證平臺。通過受約束的隨機(jī)激勵,并以為指導(dǎo),可以快速完成系統(tǒng)功能驗證,顯著提高驗證效率。

文章以實際工程項目為背景,構(gòu)建了一種符合標(biāo)準(zhǔn)的系統(tǒng)級軟硬件協(xié)同驗證平臺。同時通過對實驗數(shù)據(jù)的分析,提出了用于優(yōu)化隨機(jī)激勵約束的方法。

1 系統(tǒng)級驗證平臺

一般仿真驗證SoC的策略可分為3個步驟:模塊驗證、集成驗證和系統(tǒng)驗證[2,4]。其中系統(tǒng)驗證平臺中包含處理器CPU或DSP[2],并且采用軟硬件協(xié)同驗證方法。因此系統(tǒng)級軟硬件驗證比其他形式的驗證更貼近真實環(huán)境,在仿真中可以觀察到軟硬件運(yùn)行的所有情況,這樣可以快速有效地定位問題并進(jìn)行系統(tǒng)性能綜合分析。但是系統(tǒng)級驗證也存在驗證平臺搭建周期長、編譯仿真時間長和資源消耗大的問題。針對這些問題可以采用推薦的方法和標(biāo)準(zhǔn)函數(shù)庫,并采用成熟的VIP(Verification Intellectual Property),快速搭建驗證平臺。同時通過一次編譯多次仿真的驗證方式,以提高驗證效率,縮短驗證周期。

圖1所示是一種符合VMM標(biāo)準(zhǔn)的系統(tǒng)級驗證平臺。在這里,硬件指RTL(Register Transfer Lever)設(shè)計,包括ARM核處理器模型。軟件指用匯編語言和C語言編寫的程序,通過編譯加載到仿真環(huán)境中由ARM核處理器模型執(zhí)行[5]。驗證平臺由SystemVerilog語言實現(xiàn),在RTL級仿真驗證。

1.1 驗證平臺的架構(gòu)

圖1所示的驗證平臺符合可重用性[2,6],即不同的DUT(Design Under Test)模塊可以共用同一個驗證平臺。驗證平臺結(jié)構(gòu)被模塊化和層次化。每個模塊的功能和層與層之間的接口被明確定義,這使得驗證平臺十分靈活。

1.1.1 測試層

測試層主要是編寫各種測試案例(Testcase),包括修改生成器的約束,定義新的隨機(jī)場景,同步不同事物處理器和創(chuàng)建定向激勵[2]。通常,在仿真的進(jìn)行中要不斷查看搜集的,并以此來修改隨機(jī)激勵的約束條件,或者針對難以覆蓋的邊角情況編寫定向激勵。適當(dāng)?shù)募s束條件可提高收斂速度。

1.1.2 場景層

場景層由生成器(Generator)產(chǎn)生可控且同步的事務(wù)。生成器根據(jù)測試層提供的靜態(tài)變量和約束條件,隨機(jī)生成不同的配置信息和數(shù)據(jù)。配置信息通過功能層的事務(wù)處理器傳遞給命令層的軟件程序,用于配置DUT。同時配置信息還要傳到VIP事務(wù)處理器用于配置VIP模塊。

1.1.3 功能層

功能層將場景層隨機(jī)生成的配置信息和數(shù)據(jù)通過事先約定的通道傳遞給命令層的軟件程序,另外檢測VIP事務(wù)處理器傳回的數(shù)據(jù),送給計分板(Scoreboard),實現(xiàn)驗證平臺的自動檢查功能。

1.1.4 命令層

命令層包括控制ARM核運(yùn)行的軟件程序(ARM Core Software,圖1中帶紋理方框),需要接收功能層通過通道(Channel)傳遞過來的配置信息和數(shù)據(jù),同時還要配置和驅(qū)動DUT完成數(shù)據(jù)傳輸。VIP事務(wù)處理器(VIP Transfer)是用于驗證DUT的成熟驗證IP模塊。VIP監(jiān)視器(VIP Monitor)屬于VIP模塊,用于監(jiān)視DUT與外部通信的接口信號。命令層還包含一個或多個AMBA總線監(jiān)視器,屬于成熟的VIP模塊,用于監(jiān)視多層AMBA總線(Multi-layer AMBA Bus)[7]。

1.1.5 信號層

在信號層,例化了所有SoC模塊,實現(xiàn)系統(tǒng)級的功能驗證。除AMBA總線外,主要還包括ARM核、片上RAM、中斷控制模塊、DMA控制模塊以及其他模塊。

1.1.6 功能覆蓋率

功能覆蓋率可以從驗證平臺的其他模塊中收集,一般沒有特定的限定。

1.2 驗證平臺中軟硬件通信方式

上面所介紹的驗證平臺與其他驗證平臺最大的區(qū)別就是引入了軟件程序,構(gòu)建該驗證平臺的關(guān)鍵是軟件與硬件之間的通信。一般軟件是用匯編和C語言編寫的,硬件與驗證平臺分別是用可綜合Verilog語言和SystemVerilog語言編寫的。在這里規(guī)定用軟件程序與SV(SystemVerilog)之間的通信表示軟件程序與硬件之間的通信,本文介紹以下三種軟硬件通信方式。

(1)軟件向總線未用地址寫數(shù)據(jù)實現(xiàn)軟件程序向SV的單向通信;
(2)通過SoC上的具有通信功能的模塊,實現(xiàn)軟件程序與SV之間的通信;
(3)通過片內(nèi)RAM,實現(xiàn)軟件程序與SV間的雙向通信。

在實際使用過程中,通過第一種方法輸出軟件程序運(yùn)行過程中的信息,通過第三種方法可以作為軟硬件間信息通信的雙向通道。圖1所示的軟硬件協(xié)同仿真驗證平臺就是通過第三種方式實現(xiàn)軟硬件雙向通信的,同時也用到了第一種方式,輸出軟件運(yùn)行過程中的信息。第二種方式可以視情況使用。

本文引用地址:http://www.butianyuan.cn/article/201706/349161.htm

圖2所示是一種系統(tǒng)級軟硬件協(xié)同仿真驗證平臺的結(jié)構(gòu),虛線中為SoC的系統(tǒng)架構(gòu)。為滿足驗證需求,在SoC系統(tǒng)架構(gòu)中增添了兩個模塊:一個是Print Tube(PT)模塊,用來實現(xiàn)軟件仿真時的信息輸出。當(dāng)軟件需要輸出信息時,向PT模塊寫數(shù)據(jù),PT模塊會調(diào)用$display系統(tǒng)函數(shù),顯示傳輸過來的信息。另一個是RAM(Random Access Memory)模塊,作為軟件和SV的信息交互的通道。RAM模塊有兩個總線接口,一個鏈接到SoC系統(tǒng)總線上,軟件可通過其讀寫RAM模塊;另一個接口與驗證平臺中的BFM(Bus Function Model)模塊鏈接,如AHB VIP Master[8]。同時在驗證平臺中使用RAL(Register Abstraction Layer)[9]方法,將RAM模塊抽象為RAL模型。這樣處理后驗證平臺對RAM模塊的訪問更簡潔方便。

為驗證SoC系統(tǒng)上某個模塊的功能,需要編寫兩套激勵:C語言編寫的軟件程序和SV語言編寫的激勵。在仿真時,兩套激勵需要同步??梢酝ㄟ^監(jiān)測RAM模塊中某個寄存器的變化實現(xiàn)同步。

在搭建圖1所示的系統(tǒng)級軟硬件協(xié)同仿真驗證平臺時,由于大量使用了VIP,同時開發(fā)了可重用的PT模塊和SRAM模塊,這使得驗證平臺的搭建工作可以在一周內(nèi)完成,迅速提高了驗證效率。

2 受約束的隨機(jī)激勵與功能覆蓋率組

搭建好基于VMM標(biāo)準(zhǔn)的驗證平臺后,要發(fā)揮平臺的作用,關(guān)鍵是要設(shè)計好受約束的隨機(jī)激勵。

一種分類樹(Classification Trees)[10]的方法可以有效地將待測模塊(DUT)的各種功能配置情況轉(zhuǎn)換成System-
Verilog[1-3,11]的約束語句。但是一般在編寫受約束隨機(jī)激勵前,需要通過一些定向激勵確定驗證平臺工作正常,以及配置參數(shù)有效取值。

如下程序是驗證項目中為驗證SPI模塊DMA傳輸方式編寫的約束條件。在經(jīng)過試驗性的定向測試和分類樹處理后,形成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ī)約束條件的同時還要編寫相應(yīng)的覆蓋率組(covergroup)[1-3,8],用于自動收集仿真過程中功能覆蓋情況,指導(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 驗證過程與驗證結(jié)果

3.1 驗證過程

仿真所采用的軟件為Synopsys公司的VCS-MX-C2009.06。它自帶有VMM標(biāo)準(zhǔn)庫函數(shù),支持一次編譯多次仿真。由于如圖1所示的軟硬件協(xié)同仿真驗證平臺的通用性,可以將所有測試案例一次編譯后,分別仿真。不同的測試案例代碼寫到VMM的宏′vmm_test_begin()與′vmm_test_end()之間,并在驗證平臺的程序(program)中通過類(class)vmm_test_registry的方法run()來調(diào)用。仿真過程如圖3所示。

3.2 驗證結(jié)果

圖4是由上面程序2所定義的覆蓋率組收集的覆蓋率數(shù)據(jù)。每次仿真中,隨機(jī)產(chǎn)生10次隨機(jī)場景。這樣做可以減少重復(fù)運(yùn)行仿真的次數(shù),提高仿真速度。

從仿真結(jié)果看到:(1)覆蓋率在仿真初始階段增長很快,隨后逐漸趨緩;(2)劃分測試空間后的連續(xù)仿真,與未劃分測試空間的連續(xù)仿真最終仿真時間相同;(3)劃分測試空間后的并行仿真,覆蓋率收斂速度最快,可以使覆蓋率收斂速度提高近3倍。

另外由結(jié)果(1)可知,在仿真過程中,通過負(fù)反饋機(jī)制修改隨機(jī)變量的約束條件,排除已測試過的測試案例,可以使每次仿真的覆蓋率保持很高的增長速度[12]。但修改約束條件后需要重新編譯。

針對實際項目需要,文章介紹了一種符合VMM標(biāo)準(zhǔn)的系統(tǒng)級軟硬件協(xié)同仿真驗證平臺,討論了驗證平臺中軟硬之間的通信方式。給出了在此平臺上所做的一個模塊的具體驗證,包括隨機(jī)激勵的約束和相應(yīng)的覆蓋率組。最后對仿真結(jié)果做了對比分析。結(jié)果表明,與基于SystemC語言搭建的驗證平臺[13]相比,基于VMM標(biāo)準(zhǔn)并使用SystemVerilog語言,可以提高驗證平臺的搭建效率和可重用性。通過對測試空間的劃分和仿真過程的控制,有效提高仿真效率。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉