芯片驗(yàn)證越來越像是軟件而不是硬件工作,,這點(diǎn)已逐漸成為業(yè)界的共識(shí)。本文以軟件工程的視角切入,,分析中科院計(jì)算所某片上系統(tǒng)(SoC" target="_blank">SoC)項(xiàng)目的驗(yàn)證平臺(tái),,同時(shí)也介紹當(dāng)前較為流行的驗(yàn)證方法,即以專門的驗(yàn)證語言結(jié)合商用的驗(yàn)證模型,快速建立測試平臺(tái)(Test-bench)并在今后的項(xiàng)目中重用,。
本文提及的高級(jí)驗(yàn)證語言,、方法學(xué)、驗(yàn)證基本庫和仿真模型,,這一套方法在近幾年中正逐漸被業(yè)界廣為采用,。計(jì)算所的工作就是以這些最新成果為起點(diǎn),對(duì)基于AXI總線協(xié)議的SoC建立測試平臺(tái),。
這種新方法可大幅度提高芯片驗(yàn)證的效率,,尤其是項(xiàng)目初期投入極大地降低,原因之一是面向?qū)ο缶幊痰溶浖こ谭椒ǖ拇罅恳?。?dāng)然,這也對(duì)驗(yàn)證工程師的技能提出了新的要求,。
驗(yàn)證方法
在驗(yàn)證領(lǐng)域,,顯見的趨勢是語言劃一、仿真平臺(tái)統(tǒng)一,、更加正規(guī)和高效,。以本文介紹的項(xiàng)目為例,語言是SystemVerilog,,平臺(tái)則基于VMM構(gòu)建,,更有驗(yàn)證模型(Verification IP)助力,大幅提升了效率,。正是因?yàn)椴考芍赜?、平臺(tái)結(jié)構(gòu)化、以覆蓋率為導(dǎo)向和高度自動(dòng)化等特點(diǎn),,驗(yàn)證工作也愈加正規(guī),,有流程可循。
專門的驗(yàn)證語言,,面世已有數(shù)年之久,。它們出自于傳統(tǒng)的純粹Verilog(有時(shí)部分引入C/C++)描述的驗(yàn)證系統(tǒng),并有很大發(fā)展,。Vera,、e語言和目前已成IEEE標(biāo)準(zhǔn)的SystemVerilog就是這段時(shí)期技術(shù)創(chuàng)新的成果。
面向?qū)ο缶幊烫匦?,溯其源頭便是C++語言,。早在純Verilog語言驗(yàn)證的時(shí)代,已有利用C++開發(fā)可重用驗(yàn)證代碼的做法,。工程師們看中的恰是OOP的封裝,、繼承、多態(tài)及可重用等優(yōu)異特性。
驗(yàn)證語言沒有相應(yīng)函數(shù)庫的支持,,語言本身也很難發(fā)揮效力,。舉一個(gè)大家熟知的例子,視窗(Windows)編程中,,使用C語言直接調(diào)用視窗系統(tǒng)的編程接口(API)實(shí)現(xiàn),,是較為傳統(tǒng)的做法,可目前卻鮮有視窗程序員這樣應(yīng)用,。為什么,?工作量巨大,需維護(hù)的信息太多,,從窗口尺寸,、菜單列表到程序算法,都要加以考慮,。因而作為解決方案之一的微軟基本庫(MFC)才得以大行其道,。與之相得益彰的是,C++作為微軟基本庫的描述語言,,也隨視窗系統(tǒng)的傳播,,廣為流行開來。
現(xiàn)代芯片驗(yàn)證領(lǐng)域,,無例外地也出現(xiàn)了類似狀況,。大量新方法、新模型和新類庫不斷涌現(xiàn),,減輕了驗(yàn)證工程師們重復(fù)開發(fā)底層代碼的負(fù)擔(dān),,將更多精力投入到實(shí)際項(xiàng)目上。這一套新思路中,,主要構(gòu)成部分便是驗(yàn)證語言(如Vera,、SystemVerilog),驗(yàn)證基本庫(RVM,、VMM)和相應(yīng)的驗(yàn)證模型,。
VMM的應(yīng)用
VMM不僅是方法學(xué),更是該方法的具體實(shí)現(xiàn),。它包括一系列的類庫(class library),、類對(duì)象(object)聯(lián)接關(guān)系以及用戶定制的代碼。如圖1所示的測試平臺(tái)中,,各部件或即對(duì)象,,是VMM基本類/擴(kuò)展類的實(shí)例化(Instantiate)。所涉及到的VMM基本類有vmm_xactor,、vmm_scenario_gen和vmm_data等,。
圖1:測試平臺(tái)框圖。
聯(lián)接各部件,,構(gòu)成一個(gè)整體還需要其它一些基本類,,包括vmm_env、vmm_channel以及vmm_xactor_callbacks等,。除此之外,,用戶要根據(jù)芯片的實(shí)際狀況,添加或修改約束條件,、接口聯(lián)線,、執(zhí)行步驟、覆蓋率定義和自動(dòng)比對(duì)機(jī)制(auto-check),。
1. 背景
該種類型的驗(yàn)證平臺(tái)充分利用了軟件工程的成果,,將整個(gè)測試平臺(tái)按照所實(shí)現(xiàn)的功能,分門別類予以切割,,實(shí)現(xiàn)各模塊獨(dú)自開發(fā),、分別維護(hù)。目前,,芯片規(guī)模趨于龐大,協(xié)議愈形復(fù)雜,,通常要傳遞海量數(shù)據(jù),,并擁有數(shù)目繁多的端口。如果還以先前純Verilog的方式建立驗(yàn)證系統(tǒng),,將很難滿足芯片開發(fā)和投片的進(jìn)度,。
簡而言之,簡單地激勵(lì)DUT輸入端口,、監(jiān)控相應(yīng)的輸出端口和編寫臨時(shí)性的代碼來做數(shù)據(jù)比對(duì),,這種驗(yàn)證方法已相當(dāng)落后了。當(dāng)然,,我們也看到某些結(jié)構(gòu)簡單的芯片還有一定市場,,純粹Verilog語言的驗(yàn)證平臺(tái)也可以做到非常復(fù)雜(但是很難維護(hù)),并且學(xué)習(xí)面向?qū)ο缶幊痰拇鷥r(jià)容易令人望而卻步,。但這些都是主流之外的個(gè)例,,故對(duì)此本文不深入展開。
現(xiàn)代驗(yàn)證系統(tǒng),,盡管包含數(shù)量眾多的模塊,、多樣的數(shù)據(jù)類型/協(xié)議及各模塊間復(fù)雜的信息傳遞(保持同步、共享數(shù)據(jù)等),,它仍然是繼承傳統(tǒng)方法,,歸納以往的驗(yàn)證經(jīng)驗(yàn),,依照慣常的步驟建立測試平臺(tái)。
VMM方法也概莫能外,。依照通常的流程,,它為所有應(yīng)用VMM的測試平臺(tái)設(shè)定了九個(gè)步驟,定義在vmm_env中:gen_cfg,、build,、reset_dut、cfg_dut,、start,、wait_for_end、stop,、cleanup和report,。
另一方面,VMM平臺(tái)的架構(gòu)按抽象層次劃分,,由以下部件組成:測試?yán)?test),、場景發(fā)生器(generator)、驅(qū)動(dòng)部件(driver),、監(jiān)控部件(monitor),、數(shù)據(jù)比對(duì)部件(scoreboard)、數(shù)據(jù)對(duì)象(data object),、數(shù)據(jù)傳輸管道(channel),、回調(diào)函數(shù)集(callback)、配置總集(dut_cfg與sys_cfg),、覆蓋率統(tǒng)計(jì)部件,,以及聯(lián)接并集成以上所有部件的環(huán)境對(duì)象(environment object),如圖2中所示,。
圖2:在測試平臺(tái)中使用驗(yàn)證IP可大為降低工作量。
VMM中各個(gè)部件的使用,,可參看Synopsys與ARM共同出版的手冊(cè),。
2. 評(píng)估標(biāo)準(zhǔn)
該研究所之前的驗(yàn)證工作均采用高級(jí)驗(yàn)證語言Vera,使用SystemVerilog則是第一次,。VMM方法的引入,,究竟能在多大程度上提高驗(yàn)證效率?該項(xiàng)目既是實(shí)際工作又是一次評(píng)估,。
我們?cè)O(shè)定預(yù)期值,,是基于以下幾點(diǎn)考慮:
a. 建立一個(gè)范例平臺(tái)(包含簡單的數(shù)據(jù)交易、自檢測,、覆蓋率統(tǒng)計(jì))需要多長時(shí)間,?
b. 可擴(kuò)展性,,即隨機(jī)測試向量的約束條件更改、自動(dòng)比對(duì)機(jī)制按需求定制,、功能覆蓋點(diǎn)的添加及AXI協(xié)議的監(jiān)控是否完備,。
c. 驗(yàn)證流程可控性,如在已有的九步驟中插入額外動(dòng)作,;通過系統(tǒng)配置的改變,,來控制各步驟執(zhí)行的順序和次數(shù)(比如一次reset多次cfg_dut以實(shí)現(xiàn)在線重復(fù)測試)。
d. 易用性也應(yīng)當(dāng)考慮在內(nèi),。畢竟,,VMM方法涵蓋的內(nèi)容很廣,工程師們要完全掌握仍有個(gè)過程,。在無法知其所以然的時(shí)候,,能不能很快地知其然,并開展工作,,顯得非常重要,。
后文的敘述都將圍繞著這幾方面展開。
AXI-VIP的集成
如前所述,,VMM方法具備抽象分層結(jié)構(gòu),、有九個(gè)執(zhí)行步驟等優(yōu)點(diǎn),但它只是一個(gè)通用的方法,,能否符合前邊提出的四點(diǎn)判定標(biāo)準(zhǔn)還成問題,。舉例來說,計(jì)算所的AXI主設(shè)備(master)仿真模型是以Verilog編寫的,,無法在短期內(nèi)實(shí)現(xiàn)與VMM平臺(tái)的互聯(lián);完整的AXI協(xié)議檢測,,對(duì)本所第一顆基于該總線的片上系統(tǒng)顯得尤為重要,;由于時(shí)間倉促,AXI仿真模型還有待修正,。這些都是項(xiàng)目進(jìn)程中無法回避的問題,,而VMM方法本身又沒有提供解決方法。
1. 商用驗(yàn)證模型
AXI驗(yàn)證模型(VIP)是Synopsys公司的商用模型,,可配置,、數(shù)據(jù)交易嚴(yán)格符合AXI協(xié)議,具備完整的協(xié)議檢查功能,。最重要的一點(diǎn)是,,AXI-VIP提供與VMM平臺(tái)的接口。實(shí)際上,,這個(gè)VIP本身就實(shí)現(xiàn)了VMM平臺(tái)的驅(qū)動(dòng)部件(Driver)加監(jiān)控部件(Monitor)的功能:向下層是與DUT通過端口相聯(lián),,向上層則有基于vmm_channel/vmm_xactor_callbacks的數(shù)據(jù)傳輸管道,。如圖2所示,除Test,、Generator和Scoreboard之外的部分,,AXI-VIP都已實(shí)現(xiàn)。這個(gè)商用模型對(duì)開發(fā)進(jìn)度的實(shí)際貢獻(xiàn)將取決于工程師能否快速上手,。換言之,,VIP的易用性決定了它的價(jià)值。
有鑒于此,,Synopsys公司提供一個(gè)基于AXI-VIP的VMM范例,。其中,DUT部分以AXI Bus VIP替代,,TB部分實(shí)現(xiàn)了如圖2所示的分層架構(gòu),。工程師作為用戶只需做如下修改,便能得到包含有簡單數(shù)據(jù)交易,、自檢測,、覆蓋率統(tǒng)計(jì)等功能的驗(yàn)證平臺(tái):替換DUT,并修改接口信號(hào)名,;改寫測試?yán)齮est_1的約束條件,,得到自己的測試?yán)辉黾訉?duì)DUT的配置操作,。上述工作于一天內(nèi)完成,,仿真輸出結(jié)果有波形文件、Log文件及覆蓋率報(bào)告,。
2. AXI-VIP支持的類
AXI- VIP定義的類都有相同的前綴名“dw_vip_axi”,,它們構(gòu)成vmm_env當(dāng)中的大部分:
a. dw_vip_axi_master_rvm;
b. dw_vip_axi_slave_rvm,;
c. dw_vip_axi_monitor_rvm,;
d. dw_vip_axi_master_transaction_scenario_gen;
e. dw_vip_axi_port_model_configuration,;
f. dw_vip_axi_system_model_configuration,;
g. dw_vip_axi_master_transaction_channel;
h. dw_vip_axi_slave_resp_transaction_channel,;
i. dw_vip_axi_monitor_transaction_channel,。
這些類將例化產(chǎn)生主設(shè)備部件、從設(shè)備部件,、監(jiān)控部件,、配置對(duì)象、數(shù)據(jù)對(duì)象和數(shù)據(jù)傳輸管道等等,。它們有著各自的變量,、函數(shù),,提供了豐富的控制功能,涵蓋所有類型的操作,。
功能的完備并未損害AXI-VIP的易用性,,這點(diǎn)在項(xiàng)目中得到了印證。通過三天的培訓(xùn)與實(shí)做,,工程師們能夠通過"修改約束條件來隨機(jī)產(chǎn)生測試向量",,按照芯片測試規(guī)范改寫"自動(dòng)比對(duì)機(jī)制",添加"功能覆蓋點(diǎn)",,并利用AXI監(jiān)控部件"自動(dòng)檢查協(xié)議"并收集與AXI協(xié)議相關(guān)的覆蓋率,。
這當(dāng)中,按照芯片測試規(guī)范改寫“自動(dòng)比對(duì)機(jī)制”沒有現(xiàn)成的VMM基本類可用,。我們是從Synopsys提供的簡單范例入手,,利用AXI-VIP提供的回調(diào)函數(shù)集,獲取數(shù)據(jù)交易信息,,并實(shí)時(shí)地比對(duì)流出與流入數(shù)據(jù),。如同其他的驗(yàn)證系統(tǒng),這部分工作是最多樣化,,也是最為核心的任務(wù),,所以占用三天當(dāng)中的大部分時(shí)間,也在意料之中,。
基于VMM的Scoreboard實(shí)現(xiàn)
本所驗(yàn)證組以VMM方法為指導(dǎo),,利用AXI-VIP提供的回調(diào)函數(shù)集,快速建立了該測試平臺(tái)的自動(dòng)比對(duì)機(jī)制,。盡管還不能最終應(yīng)用在十幾個(gè)主/從設(shè)備的全系統(tǒng)中,,但是,由于這部分代碼封裝在自定義的Scoreboard類當(dāng)中,,可重用,、可擴(kuò)展,并且符合VMM平臺(tái)的接口要求,,可以很方便地合入將來的系統(tǒng)中。該Scoreboard類的核心部分SystemVerilog代碼由Synopsys提供,,如圖3所示,。
圖3:自檢測單元的結(jié)構(gòu)框圖,。
左端是主設(shè)備數(shù)據(jù)緩沖及比對(duì),,右端為從設(shè)備數(shù)據(jù)緩沖及比對(duì),中間的1到N和N到1轉(zhuǎn)換,,實(shí)現(xiàn)數(shù)據(jù)比對(duì)任務(wù)的分配,。N個(gè)從設(shè)備的比對(duì)代碼,,都擴(kuò)展自相同的類。正因?yàn)檫@種設(shè)計(jì)它是可無限擴(kuò)展的,?;诒卷?xiàng)目只有兩個(gè)主設(shè)備的特點(diǎn),我們對(duì)左邊的結(jié)構(gòu)做了大幅度簡化,。
核心的比對(duì)部分之外,,關(guān)鍵任務(wù)就是實(shí)時(shí)地獲取各主/從設(shè)備的數(shù)據(jù)流。這在AXI-VIP(也包括Synopsys公司的其他VIP)中,,已經(jīng)有現(xiàn)成函數(shù)可用,。本所工程師在兩天時(shí)間內(nèi)就學(xué)會(huì)使用,并結(jié)合實(shí)際完成了代碼的開發(fā)與調(diào)試,。
AXI-VIP包括主設(shè)備,、從設(shè)備與監(jiān)控設(shè)備,它們?cè)跀?shù)據(jù)交易的幾個(gè)關(guān)鍵點(diǎn)將得到一次函數(shù)回調(diào)的機(jī)會(huì),,如表1所示,。
表1:回調(diào)函數(shù)與相應(yīng)管道的對(duì)應(yīng)關(guān)系表,。
依據(jù)這些回調(diào)函數(shù)對(duì)應(yīng)的數(shù)據(jù)交易階段,,我們選取主設(shè)備的post_input_channel_get,從設(shè)備的pre_output_channel_put兩函數(shù)來獲取交易數(shù)據(jù),。
其它函數(shù)也可以用來獲取數(shù)據(jù),,如監(jiān)控設(shè)備的pre_activity_channel_put,就可以得到輸入,、輸出兩方面的數(shù)據(jù),。具體請(qǐng)參看AXI-VIP使用手冊(cè)。另外,,VMM回調(diào)函數(shù)還可以用于控制驗(yàn)證流程,、插入錯(cuò)誤數(shù)據(jù)等等,限于篇幅,,本文不再展開,。
本文小結(jié)
因?yàn)樾酒?yàn)證工作的趨勢是需要更多的軟件知識(shí)和技巧。本文以中科院計(jì)算所的SoC項(xiàng)目為例,,講解了如何充分利用專業(yè)的驗(yàn)證語言基本庫和商用的仿真模型快速建立測試平臺(tái),。文中詳細(xì)介紹了各部件的使用和AXI-VIP對(duì)象如何納入VMM框架,以及這樣做的實(shí)際意義,。
VMM方法基于SystemVerilog語言,,提供了完整的函數(shù)庫,而作為補(bǔ)充的AXI-VIP,功能完備且易用性強(qiáng),?;谶@一新方法,本所驗(yàn)證組工程師在五個(gè)工作日內(nèi)快速建立了一套可方便擴(kuò)展的測試平臺(tái),。建立新系統(tǒng)的過程中,,發(fā)現(xiàn)一個(gè)設(shè)計(jì)的漏洞,充分體現(xiàn)了該方法的高效性,。