系統(tǒng)級設(shè)計和驗證語言的發(fā)展趨勢
解決系統(tǒng)級設(shè)計問題首先要解決系統(tǒng)及功能的描述問題。系統(tǒng)級設(shè)計語言的競爭正在如火如荼的展開。需要一種語言能夠描述包括嵌入的軟件和模擬電路在內(nèi)的整個系統(tǒng)。而現(xiàn)在的寄存器級的硬件描述語言將成為硬件設(shè)計的匯編語言。設(shè)計和驗證工程師將只在關(guān)鍵的部分利用他們?nèi)〉幂^高的性能,而一般情況下將主要利用系統(tǒng)及語言進(jìn)行設(shè)計和驗證。
本文將對當(dāng)前出現(xiàn)的系統(tǒng)級設(shè)計和驗證語言及其發(fā)展趨勢進(jìn)行全面地綜述,在第2節(jié)和第3節(jié)將分別綜述系統(tǒng)及設(shè)計語言和驗證語言的發(fā)展情況。第4節(jié)論述當(dāng)前主流的驗證方法。
2 系統(tǒng)級設(shè)計語言
2.1 對系統(tǒng)級設(shè)計語言的要求
系統(tǒng)級設(shè)計的特點是:更多更復(fù)雜的功能集成和綜合、功能模塊或IP核,包含存儲器、處理器、模擬模塊、接口模塊和高速、高頻輸入輸出及軟件模塊,因此要考慮軟件和硬件的劃分、優(yōu)化等協(xié)同設(shè)計和協(xié)同驗證問題。根據(jù)系統(tǒng)級設(shè)計的特點,人們普遍認(rèn)為系統(tǒng)級設(shè)計語言應(yīng)當(dāng)具有如下的特點:
1)具有形式化的語義。
2)支持特別領(lǐng)域規(guī)范的集成。
3)支持描述系統(tǒng)和部件的計算模型的復(fù)合。
4)支持更加抽象的建模。
5)支持對于限制信息的表示和集成。
6)從設(shè)計規(guī)范到設(shè)計實現(xiàn)整個設(shè)計過程中一致地、連續(xù)地探索設(shè)計空間。
7)支持在具體領(lǐng)域和多個交叉領(lǐng)域的預(yù)先分析和驗證。
2.2 系統(tǒng)級設(shè)計語言的發(fā)展
21世紀(jì)初期是系統(tǒng)級設(shè)計語言發(fā)展變化最迅速的時期。各種系統(tǒng)設(shè)計語言 如雨后春筍,已經(jīng)出現(xiàn)的系統(tǒng)級語言可以分成3類。
第一類是通過對于經(jīng)典語言的擴(kuò)展得到的語言如SystemVerilog[1]。SystemVerilog 在向高層次發(fā)展方面,對于原來的Verilog進(jìn)行了根本性的修改。他混合了Verilog, C/C++和 CoDesign AutomaTIon′s SuperLog 給設(shè)計者提供了最強(qiáng)的能力。SystemVerilog是對于IEEE 13642001 Verilog的擴(kuò)展,以便輔助提供產(chǎn)生并驗證抽象的系統(tǒng)結(jié)構(gòu)級的模型。在接口方面突出的特點是在高層抽象可以實現(xiàn)模塊的連接。類似于C語言的結(jié)構(gòu),如斷言結(jié)構(gòu)支持性質(zhì)的檢驗。主要擴(kuò)展的目的是使得Verilog語言能夠支持大規(guī)模的設(shè)計并達(dá)到更高級的抽象。他還借用了C的數(shù)據(jù)類型 “char”,“int”等。凡是C的編碼可以直接用在Verilog模型和驗證程序中。這類對傳統(tǒng)語言擴(kuò)展的方法的優(yōu)點是有利于設(shè)計者的平穩(wěn)過渡,但是主張完全用C語言作為系統(tǒng)級語言的人們懷疑這種“改良”的方法在進(jìn)行模擬時的效率不能得到滿意結(jié)果。
第二類是利用軟件領(lǐng)域的語言和方法,如C/C++,Java,UML等等。主張用C/C++作為系統(tǒng)級設(shè)計語言的人們認(rèn)為隨著時間的推移,最終將會利用C的自動編譯程序和其他自動化的工具來實現(xiàn)從C/C++的模型到芯片的編譯。在目前工具不完善的情況下必須進(jìn)行人工逐步求精的設(shè)計。也就是說,目前C/C++要擴(kuò)展硬件表達(dá)成分而不是只在算法級描述。例如 SpecC(the University of California, Irvine),ardwareC(Stanford University)HandelC(原先是在 Oxford University,現(xiàn)在轉(zhuǎn)移到Embedded Solutions Ltd)SystemC++(C Level Design Inc)SystemC(Synopsys Inc)Cynlib(CynApps)等??梢园堰@些語言分成2類:一類是在標(biāo)準(zhǔn)C語言上進(jìn)行擴(kuò)充,以SpecC為代表;另一類是利用C++可擴(kuò)充性,以SystemC為代表,他提供一組硬件的基本元件,這些元件可以擴(kuò)充,以便在更高的層次上支持硬件。這2種互補(bǔ)的方法都在4個層次上即算法、模塊、按照周期(cycle accurate)和寄存器傳輸(RTL)級別上支持硬件描述。在SystemC20之前,有些人認(rèn)為SystemC是側(cè)重于模擬,SpecC是側(cè)重于規(guī)范和結(jié)構(gòu)建模,以綜合和驗證為目標(biāo),但是在SystemC20之后,這些說法也不準(zhǔn)確了,因為現(xiàn)在的SystemC2.0已經(jīng)能夠支持所有系統(tǒng)級的要求。 SystemC填補(bǔ)了在傳統(tǒng)的HDL和基于C/C++的軟件開發(fā)方法之間的鴻溝。他包含C++類庫和一個模擬內(nèi)核,這個內(nèi)核用來產(chǎn)生行為級和寄存器級的模型。有領(lǐng)先的EDA廠家管理和支持,并與商用的綜合工具相結(jié)合。他支持通用的軟件和硬件開發(fā)環(huán)境。
我們認(rèn)為,和C相比,C++顯然是比較好的選擇。因為C++是可以擴(kuò)展的,也因為硬件中的并發(fā)概念易于用類庫表示,C++面向?qū)ο蟮谋举|(zhì)與HDL的分層次特性可以很好地對應(yīng)。
人們也在討論Java是否可以作為系統(tǒng)及語言和高級硬件描述語言的問題[2]。例如LavaLogic先提出JHDL,他把Java語言的描述轉(zhuǎn)換成為綜合的HDL程序,再用所提供的工具變成門級的描述。擁護(hù)Java作為系統(tǒng)級描述語言的人認(rèn)為Java可以提高描述和運(yùn)行效率,與現(xiàn)在的HDL相比,能夠以很簡短的程序表達(dá)高層的概念。C/C++具有內(nèi)在的表達(dá)并發(fā)能力,相反Java可以用線程顯式的表達(dá)并發(fā)。但是Java不支持模板和操作符過載,因此可能產(chǎn)生大量的過程調(diào)用。
第三類是全新的系統(tǒng)級語言。例如Rosetta,用這一個語言,用戶可以描述幾乎任何工程領(lǐng)域的行為和限制,包括模擬、數(shù)字、軟件、微流體和機(jī)械等。但是并不能代替和實現(xiàn)Verilog,VHDL和C等。他由美國DARPA開發(fā),目的是給設(shè)計者提供描述大型的、復(fù)雜的計算系統(tǒng),特別是混合多種技術(shù)的系統(tǒng)的能力,他可以在高層次上定義、捕獲和驗證系統(tǒng)的限制條件和需求條件及其部件。他提供定義和結(jié)合多個領(lǐng)域的語義模型,進(jìn)行建模和分析。他的語義是形式化的、可以擴(kuò)展的,并且能適應(yīng)新系統(tǒng)的要求。
Rosetta 的設(shè)計方法學(xué)是基于一種多面體的小平面(facet)的概念。facet是部件或系統(tǒng)的模型,他提供所關(guān)心領(lǐng)域具體的信息。為了支持異構(gòu)系統(tǒng)的設(shè)計,每個小平面提供具體領(lǐng)域的詞匯和語義。他用來從不同角度定義系統(tǒng)的視圖,然后把不同的小平面組合起來構(gòu)成部件的模型。部件的模型再組合成系統(tǒng)的模型。
Rosetta的 facets語法對于現(xiàn)有的硬件描述語言的用戶來說,應(yīng)當(dāng)是容易熟悉的。他的語法和VHDL幾乎是一樣的。該語言設(shè)計的主要難點是要把多個領(lǐng)域的信息統(tǒng)一在一種設(shè)計活動中。對于不同的領(lǐng)域,例如模擬、數(shù)字、機(jī)械、和光部件,Rosetta 提供了定義和理解系統(tǒng)的機(jī)制。不僅如此,他還提供對于擴(kuò)展新領(lǐng)域進(jìn)行建模的技術(shù),這對于將來語言的發(fā)展非常重要。不能正確理解不同領(lǐng)域的交互作用經(jīng)常是引起系統(tǒng)失敗的根源。因此Rosetta提供顯式的交互建模和評價這些交互的方法。
3 系統(tǒng)級驗證語言
3.1 基于事務(wù)的驗證和基于斷言的驗證
驗證語言的提出需要說明基于事務(wù)的驗證和基于斷言的驗證。解決所謂系統(tǒng)芯片的“驗證危機(jī)”,策略之一是基于事務(wù)處理的驗證(TBV),事務(wù)是概念上單一的數(shù)據(jù)或控制的轉(zhuǎn)移,這種轉(zhuǎn)移有事務(wù)的開始時間,結(jié)束時間和所有相關(guān)的信息確定,這些信息和事務(wù)一起存儲,作為事務(wù)的屬性。事務(wù)處理可以是簡單的存儲器讀寫,也可以是具有復(fù)雜的結(jié)構(gòu)數(shù)據(jù)報在網(wǎng)絡(luò)信道中的傳送。把驗證的層次從信號層次提高到事務(wù)處理層次,讓測試具有更直觀的方式,有利于測試產(chǎn)生、糾錯過程和功能覆蓋的度量。設(shè)計系統(tǒng)結(jié)構(gòu)不是想象使能信號和地址總線如何工作,而是想象數(shù)據(jù)如何在系統(tǒng)中流動和存儲。TBV就是這種高層次設(shè)計過程的自然展開。定性的驗證過程包含3個步驟:測試生成、設(shè)計查錯和功能覆蓋分析。每個階段都要提高到事務(wù)處理的抽象層次。可以用Verilog語言的task 來構(gòu)成事務(wù)。這對于基本的測試也許還可以接受,但是當(dāng)要產(chǎn)生復(fù)雜的數(shù)據(jù)結(jié)構(gòu)、復(fù)雜的測試方案,動態(tài)的測試生成時,就會產(chǎn)生太多的限制。高級驗證語言(HLV)例如近年來開發(fā)TestBuilder(C++)、Vera和 E等,就是要解決這些復(fù)雜的問題。
基于斷言的驗證(ABV)是把形式化方法集成到傳統(tǒng)模擬流程中的一種有效的方法。設(shè)計團(tuán)隊在RTL設(shè)計中插入設(shè)計意圖(斷言)并且進(jìn)行模擬,然后用形式化技術(shù)檢查斷言,限制條件,也就是合法接口行為的斷言,和其他斷言同時一同參加模擬。斷言檢查的結(jié)果改進(jìn)模擬的有效性。即使利用傳統(tǒng)的模擬驗證,斷言也可以大大提高模擬的效率。基于斷言的驗證要由用戶寫出斷言,斷言表示要驗證的性質(zhì),因此需要性質(zhì)描述語言。例如邏輯和時序方面的性質(zhì)。這些也是驗證語言要解決的問題。
3.2 目前的系統(tǒng)級驗證語言概況
IC設(shè)計和EDA 界需要一種標(biāo)準(zhǔn)化的具有公開接口的驗證方法學(xué),在2000年,Open Verilog InternaTIonal和VHDL International聯(lián)合,組成了Accellera組織。其目的就是在系統(tǒng)、半導(dǎo)體和設(shè)計工具企業(yè),推動、開發(fā)和培育新的國際標(biāo)準(zhǔn)。以便加強(qiáng)以語言為基礎(chǔ)的設(shè)計自動化進(jìn)程。面對幾個在語法和語義方面都不夠完善的形式性質(zhì)描述語言,Accellera進(jìn)行了一個選舉過程,4個候選的語言是 Motorola的CBV,IBM的 Sugar,Intel的 ForSpec 和Verisity的e 語言。經(jīng)過討論,集中到Sugar和 CBV上,在2002年4月選定了IBM的Sugar 2.0[3]。Sugar 2.0的獲勝造成了Accellera組織的分裂,包括Cadence在內(nèi)的多數(shù)EDA工具供應(yīng)商支持Accellera 的決定。另外一部分則轉(zhuǎn)向支持Syopsys的 OpenVera 2.0。作為一種真正的工業(yè)標(biāo)準(zhǔn)語言,Sugar 2.0語法和語義很簡單明了。基本上是基于線性時態(tài)邏輯語言(LTL),他是由基于分支時態(tài)邏輯(計算樹邏輯CTL)的Sugar1.0演化而來的。其關(guān)鍵思想是利用一種擴(kuò)展的正則表達(dá)式的構(gòu)件。因此對于形式驗證領(lǐng)域來說,理解Sugar是很容易的。
Sugar語言是由IBM的Haifa 實驗是經(jīng)過8年研究開發(fā)的[4],是一種說明性的形式化性質(zhì)規(guī)范語言。其語義是嚴(yán)格的,但是易于理解和使用??梢杂妙愃贫ɡ淼男问?描述要驗證的屬性,這些描述可以作為模型檢驗和定理證明的輸入,也可以做模擬程序中檢查程序的輸入。Sugar由4層結(jié)構(gòu)組成:
布爾層由布爾表達(dá)式構(gòu)成。
時態(tài)層描述邏輯值隨時間變化的性質(zhì)。
驗證層由一些指示詞描述驗證軟件如何利用時態(tài)的性質(zhì)。還有些驗證指示詞假設(shè)某種性質(zhì)成立。驗證層也提供把Sugar的語句分成驗證單元的方式。
模型層提供對于輸入行為進(jìn)行建模的方法,對于輔助信號和變量進(jìn)行 說明并定義其行為。模型層也可以定義為時態(tài)層的性質(zhì)和實體的名字。
Sugar具有3種風(fēng)格,分別對應(yīng)于硬件描述語言Verilog,VHDL和環(huán)境描述語言EDL( IBM的RuleBase 模型檢驗器使用的語言)。采用不同風(fēng)格時,在布爾層和模型層的 語法可以不同,但是在時態(tài)層和驗證層相同。
OpenVera 1.0 是Synopsys捐獻(xiàn)出來公開的驗證語言。對于模擬,他已經(jīng)具有描述斷言的能力。Synopsys公司和Intel公司的ForSpec相結(jié)合后產(chǎn)生的OpenVera 2.0也能夠支持形式化驗證。和Intel公司聯(lián)合推出OpenVeraForespec 作為工業(yè)標(biāo)準(zhǔn)的斷言語言,但是因為對于工程師來說難以接受,因此被拒絕。但是其概念還是有特點的。他的目標(biāo)是作為一種支持模擬和形式驗證的性質(zhì)描述語言。從ForSpec借用的構(gòu)件和操作包括“assume”,“restrict”,“model”,“assert” 等,這些都為形式化驗證服務(wù)。語言成分“ assumeguarantee”可以把斷言作為模塊的性質(zhì),在高層上又作為監(jiān)視器。OpenVera 用來描述斷言時可以精確的描述在多個周期時間的時序行為。硬件描述語言例如Verilog和 VHDL是用來描述硬件的過程行為。這種過程模型難以有效地表述在多周期的時態(tài)行為。利用Ope nVera的斷言語言O(shè)VA,用戶可以方便直觀地描述輸入輸出行為、總線協(xié)議以及其他復(fù)雜的硬件行為和關(guān)系。和硬件描述語言的描述比較,要簡潔3~5倍。和Sugar語言的4級結(jié)構(gòu)相比,OpenVera 2.0分為5個主要的級別:
上下文(環(huán)境)幫助定義斷言的轄域(或作用域)。
指示詞描述所要檢查或監(jiān)視的性質(zhì)。
布爾表達(dá)式。
事件表達(dá)式表示時間序列。
公式表示表述時間序列之間的關(guān)系。
Sugar和 Open Vera 2.0 有2個層次是相同的,即布爾層和時態(tài)層。這些層構(gòu)成了斷言的核心。他們的差別在其他層次上面。OpenVera 2.0 重視性質(zhì)的細(xì)致結(jié)構(gòu),用戶能和斷言深入交互,以便考察和探索形式驗證的知識。Sugar的另外2個層次服務(wù)于性質(zhì)的“格式化”,而簡化與用戶的交互??傊还苡媚欠N語言,Open Vera 2.0 或者Sugar,他們都提供了高效驗證復(fù)雜系統(tǒng)芯片的手段。
4 對于當(dāng)前驗證方法的評述
目前的設(shè)計驗證方法迅速發(fā)展,設(shè)計和驗證語言層出不窮。但是以下的觀點和結(jié)論是明確的:
1)形式化方法取得了長足進(jìn)展,特別是等價性檢驗已經(jīng)集成到標(biāo)準(zhǔn)驗證流程中。模型檢驗技術(shù)以及定理證明等還不能成為設(shè)計環(huán)境的主流驗證方法的主要原因有[3]:
①缺乏廣泛接受的性質(zhì)描述語言。
?、谌狈ι虡I(yè)化的工具。
?、壑两袢狈τ行У厥褂眯问交椒▽W(xué)的指導(dǎo)原則。
?、茉诟淖凃炞C方法帶來的收益是否明顯的問題上還在觀望。
2)形式化方法還需要和傳統(tǒng)的方法相結(jié)合才能發(fā)揮作用。設(shè)計和驗證方法的進(jìn)步應(yīng)當(dāng)是漸進(jìn)的,不可能革命性的改變。因此在可以預(yù)見的幾年內(nèi),混合驗證方法應(yīng)當(dāng)成為主流的驗證方法。斷言對于表示接口限制、設(shè)計性質(zhì)和設(shè)計假設(shè)都具有很深刻的作用和影響。這些會對發(fā)現(xiàn)過去的方法不能發(fā)現(xiàn)的設(shè)計錯誤做出貢獻(xiàn)。特別適合測試覆蓋結(jié)合起來可以極大的改進(jìn)驗證效率。
3)基于斷言的驗證是結(jié)合形式化驗證和傳統(tǒng)的模擬驗證可行的途徑[5]。支持這種途徑的統(tǒng)一的設(shè)計和驗證語言是SystemVerilog。他是在新的Verilog語言標(biāo)準(zhǔn)上擴(kuò)充系統(tǒng)描述構(gòu)件而開發(fā)的一種過渡性的系統(tǒng)級設(shè)計語言。該語言可以統(tǒng)一的描述復(fù)雜的設(shè)計和測試方案( testbenches)。SystemVerilog支持多級接口設(shè)計和斷言,充分利用了當(dāng)前的設(shè)計驗證技術(shù)和實踐。他后向兼容verilog,具有繼承性,與其同時成為一個結(jié)合設(shè)計和驗證的語言。該語言已經(jīng)得到很多EDA廠商和用戶的支持,預(yù)計將會流行起來。
評論