各種流行驗證技術(shù)的特性比較和選擇標(biāo)準(zhǔn)
抽象級越高,設(shè)計就越容易;同理,抽象級越高,就越容易犯較大的錯誤。如果產(chǎn)生架構(gòu)缺陷,就有可能損害整個芯片,這與發(fā)生在邏輯門連接表級上的導(dǎo)線誤連接是截然不同的(后者可通過重新連線的方法得到修復(fù))。
以Verilog為例,它為設(shè)計者提供了一個較為簡易的接口,以便在一個相當(dāng)抽象的等級上進行設(shè)計。然而,如果設(shè)計者并不知曉在多個設(shè)計周期中獲得的語言的細微差別,那么就非常容易犯錯。許多論文重點闡述了Verilog誤用的不良后果。當(dāng)設(shè)計曾經(jīng)是瓶頸時,Verilog獨立地使設(shè)計生產(chǎn)率取得了指數(shù)性的提高(如采用原理圖捕獲),并首先推進了復(fù)雜芯片的開發(fā)!在眾多的驗證技術(shù)和語言、檢驗成為瓶頸的今天,相同的爭議仍然存在。
驗證瓶頸
EDA行業(yè)通過引入工具來幫助提升設(shè)計生產(chǎn)率,進而達到縮短產(chǎn)品時間的目的,并最終實現(xiàn)設(shè)計時間的縮減。設(shè)計時間與硅片復(fù)雜性之間存在某種函數(shù)關(guān)系。硅片復(fù)雜性指的是工藝精細度調(diào)整以及新型材料或新型架構(gòu)的引入對器件互連的影響。在硅片結(jié)構(gòu)中擁有復(fù)雜性的能力將導(dǎo)致系統(tǒng)復(fù)雜性的形成(由于特征尺寸的縮小以及消費者對增加功能的需求而在相同的面積之內(nèi)壓縮進更多晶體管的能力)。
隨著設(shè)計方案構(gòu)筑過程中所集成的晶體管數(shù)量的指數(shù)性增加,計算時間或工程師數(shù)量的線性增加已不足以縮短設(shè)計時間。系統(tǒng)復(fù)雜性繼續(xù)按照摩爾定律增加,而功能復(fù)雜性(一個系統(tǒng)所具有的不同狀態(tài)的數(shù)量)的增長速度則更加迅猛。為解決這一問題,EDA行業(yè)提出了通過自動化來實現(xiàn)“設(shè)計抽象”(Design Abstraction)的概念。從能夠在多個電路層上捕獲設(shè)計的原理圖捕獲工具到基于語言的解決方案等均已面市。
這種追隨形勢需要的設(shè)計手法仍然是適當(dāng)?shù)?。EDA界即將推出并給予支持的最新語言是SystemC和SystemVerilog,它們能夠解決一些由目前所采用的技術(shù)和工藝造成的系統(tǒng)復(fù)雜性問題。我們可以說,就目前的技術(shù)工藝而言,設(shè)計復(fù)雜性已經(jīng)得到了很好的理解,而且,設(shè)計瓶頸也因為采用EDA工具所實現(xiàn)的生產(chǎn)率提高而在一定程度上得到了克服。
設(shè)計生產(chǎn)率的提升速度將繼續(xù)低于復(fù)雜性的增速,此時與之相關(guān)的瓶頸已并非設(shè)計時間,而是驗證時間
由于下列原因所導(dǎo)致的設(shè)計抽象級的提高是形成驗證瓶頸的罪魁禍?zhǔn)字弧?
在一個較高的抽象級上進行設(shè)計使得我們能夠輕松地構(gòu)筑高度復(fù)雜的功能。設(shè)計復(fù)雜性的這種增加接著會導(dǎo)致驗證工作量幾乎翻番(如果設(shè)計者考慮增加鎖存器和邏輯門的數(shù)量,這就等于功能復(fù)雜性將加倍,而且其驗證范圍也將因此翻番)。
在設(shè)計、變換以及至終端產(chǎn)品的最終映射中采用較高的抽象級總會存在信息損失和解釋錯誤的情況。比如,采用HDL級設(shè)計并將之變換為邏輯門級(映射至某一特定技術(shù))的綜合過程;在這一級上需要進行驗證,以保證所實施的變換正確無誤,而且設(shè)計內(nèi)容沒有丟失。提高抽象級還會帶來代碼解釋方面的問題,代碼解釋是用來在仿真過程中對設(shè)計進行描述的,用于確保所編寫的代碼如實地反映了功能規(guī)范。
其他影響驗證問題的因素包括:
由于當(dāng)今設(shè)計的異類特性(比如硬件-軟件、模擬-數(shù)字的共存等)所導(dǎo)致的功能復(fù)雜性的增加;
對較高的系統(tǒng)可靠性的要求迫使驗證工作必須確保芯片級功能可在系統(tǒng)環(huán)境中圓滿地執(zhí)行,尤其是當(dāng)某個芯片級缺陷具有多重影響時更應(yīng)如此。
相關(guān)統(tǒng)計結(jié)果表明:驗證問題是客觀存在的,并正在耗費有關(guān)的公司的巨額資金。
設(shè)計差錯導(dǎo)致的芯片缺陷:在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進行重新布線的設(shè)計當(dāng)中,有82%存在著設(shè)計差錯。這意味著在驗證過程中并未考慮一些極端場合,而且一直到最后的檢查之前,bug都會隱匿在設(shè)計之中。
規(guī)范誤差導(dǎo)致的芯片缺陷:在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進行重新布線的設(shè)計當(dāng)中,有47%存在著規(guī)范不正確或不完整的情況。在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進行重新布線的設(shè)計當(dāng)中,有32%對規(guī)范進行了改動。
采用復(fù)用IP和外來IP所引發(fā)的問題:14%的缺陷芯片在復(fù)用單元或外來IP中存在bug。
重新布線的影響:重新布線有可能給公司帶來高達10萬美元的損失。此外,它還會推遲產(chǎn)品面市,并因采用這些缺陷芯片的系統(tǒng)所發(fā)生的故障而導(dǎo)致費用的上揚。
為了對付驗證瓶頸問題可以:1.提高設(shè)計師的生產(chǎn)率:這一領(lǐng)域大有優(yōu)化空間。設(shè)計生產(chǎn)率已經(jīng)通過改善計算機性能、采用諸如微軟公司的軟件工具(如Excel)等個人工具而得到了提高。雖然它們在捕獲測試和驗證計劃中大有助益,但大部分時間卻花在了測試場合的編碼、運行和調(diào)試上。2.提高驗證生產(chǎn)率:這種方法明顯具有用于提升生產(chǎn)率的潛力。
為了提高驗證生產(chǎn)率,EDA行業(yè)采用了一種與解決設(shè)計瓶頸問題相似的“抽象”概念。諸如Verilog和VHDL等高級語言被用來驗證芯片;包括諸如任務(wù)、線程(分叉、連接)等以及諸如“while”等控制結(jié)構(gòu)。這提供了對數(shù)據(jù)的進一步控制,以便在所有的功能隅角上實現(xiàn)設(shè)計的全面執(zhí)行。然而,這些構(gòu)件過去是不可綜合的,因此未被設(shè)計師用作實際設(shè)計代碼的一部分。
隨著復(fù)雜性的繼續(xù)提高,人們創(chuàng)建并引入了能夠在不同的抽象級上對復(fù)雜設(shè)計進行驗證的新型驗證語言。伴隨著這些新型語言的問世又出現(xiàn)了對其提供支持的技術(shù)和工具。
驗證與確認(rèn)(Validation)的比較
除了驗證問題之外,芯片制造商還飽受確認(rèn)時間的困擾。Kropf將“確認(rèn)”定義為“通過檢查實現(xiàn)方案的工作行為來獲得對規(guī)范的信心的過程”。對驗證與確認(rèn)的比較,觀點眾多。一種觀點是:“確認(rèn)用于保證這是一種正確的設(shè)計,而驗證則用于保證設(shè)計是正確的”。另一種觀點是:“驗證是在硅片測試之前(Verilog/VHDL仿真等)進行的,而確認(rèn)則是在硅片測試之后(在實驗室中,在電路板上進行硅片測試)進行”。
不管是確認(rèn)還是驗證,為了確保硅片滿足規(guī)范,有兩件事是必需做到的:
1)芯片規(guī)范得到了正確的解釋(一般是借助文檔資料,有時也采用建模的方法);
2)這種解釋被正確地捕獲和執(zhí)行(一般采用VHDL)、綜合到硅片之中、并被封裝為芯片。
本文將第二步視作驗證,而把第一步看作確認(rèn)。圖1給出了被業(yè)界用來確保上述兩個步驟得到滿足的常見設(shè)計流程的概況。
視被執(zhí)行功能的復(fù)雜性的不同,可以跳過其中的某些步驟,也可以增加更多的步驟。例如,如果知道某個特定設(shè)計完全是面向硬件的,且不包括驅(qū)動器或軟件,便可從抽象級3直接跳至抽象級1(無需進行硬件-軟件折衷)。PLL(鎖相環(huán))設(shè)計似乎就是這樣的一個例子。
應(yīng)該注意,當(dāng)逐漸走向較低的抽象級時,必須始終保持等效性,以確保最低的抽象級能夠滿足系統(tǒng)規(guī)范的要求。
當(dāng)今的驗證技術(shù)和發(fā)展趨勢
1. 動態(tài)功能驗證
使用最為普遍的功能驗證方法具有動態(tài)特性。之所以將其冠名為“動態(tài)”,原因在于輸入圖形/激勵信號是在一段時間內(nèi)(若干個時鐘周期)生成并應(yīng)用于設(shè)計的,而且,對應(yīng)的結(jié)果被收集起來并與一個參考/黃金模型進行比較,以便與規(guī)范相符。
一個仿真器被用來計算所有信號的全部數(shù)值,并將規(guī)定的預(yù)期值與計算值加以比較。目前,業(yè)界可以選用的仿真器有兩種。
1. 基于周期的仿真器:該仿真器完全不理會時鐘內(nèi)部發(fā)生的事件,而是在每個周期中進行一次信號評估。由于執(zhí)行時間較短,這類仿真器的運行速度往往較快。
2. 基于事件的仿真器:這些仿真器捕獲事件(在時鐘內(nèi)部或在時鐘的邊界上)并通過設(shè)計進行傳播,直到實現(xiàn)一個穩(wěn)定狀態(tài)為止。
動態(tài)仿真的一個主要的缺點是,在一個限時仿真行程當(dāng)中,只能對芯片的典型(而不是所有可能的)工作特性進行驗證。造成這種情況的主要原因在于芯片是針對已知測試空間(而不是未知測試環(huán)境)進行測試的,采用的是定向測試法。EDA行業(yè)推出了諸如Open-VERA、E和SVL(SystemC Verification Library)等更加高級的驗證語言。這些語言引入了新的概念,比如約束隨機激勵、隨機激勵信號分配和電抗性測試臺。伴隨著這些語言的運用出現(xiàn)了一些用于對其進行解釋的工具,就本場合而言,它們有可能是VERA、Specman和OSCI內(nèi)核(即CCSS)。
除了引入了隨機化功能之外,新型驗證語言和工具還通過減少公司在構(gòu)筑各種用于激勵信號發(fā)生的測試場合/方案所花費的時間量而實現(xiàn)了生產(chǎn)率的提高。例如,測試方案可以采用最高的抽象級來編寫,并能夠通過采用功能強大的面向?qū)ο笮徒Y(jié)構(gòu)而“擴展”至任何較低的抽象級。
當(dāng)采用動態(tài)驗證時,設(shè)計者一般希望擁有一個以可量化項來覆蓋和捕獲的功能空間的估計值:
1. 被驗證的代碼行的數(shù)量(行覆蓋率);
2. 被驗證的邏輯表達式有多少?(表達式覆蓋率)
3. 在一個FSM設(shè)計中達到了多少種狀態(tài)(FSM覆蓋率);
4. 在一個仿真行程中進行雙向變換的端口和寄存器的數(shù)量(變換覆蓋率);
5. 設(shè)計代碼中被覆蓋的邏輯通路的數(shù)量(通路覆蓋率);
這可以通過采用諸如代碼覆蓋和lint等工具來實現(xiàn)。
設(shè)計者將“斷言”用作一個占位符,用來描述與某項設(shè)計相關(guān)聯(lián)的假設(shè)和工作特性(包括暫時的特性)。如果設(shè)計滿足或未滿足規(guī)范或假設(shè),則斷言將會在一個動態(tài)仿真過程中被觸發(fā)。斷言也可在形式/靜態(tài)功能驗證環(huán)境中使用。
2. 混合功能驗證
在該方法中通常執(zhí)行動態(tài)仿真,仿真結(jié)果被捕獲并用作靜態(tài)驗證的輸入。在靜態(tài)驗證期間,邏輯方程/符號通過設(shè)計進行傳播(而不象在動態(tài)仿真中那樣傳播的是數(shù)值)。這種手法雖然不如形式驗證詳盡周全,但卻可以被證實具有比純動態(tài)仿真更高的效率,因為它開始于動態(tài)仿真停止之時。
3.靜態(tài)功能驗證
在靜態(tài)功能驗證中,沒有向設(shè)計施加輸入激勵信號。而是將設(shè)計映射至一個采用BDD(雙擇判決圖)或其他數(shù)學(xué)表達式(它們規(guī)定了所有時間周期中的設(shè)計功能)來說明其功能的圖形結(jié)構(gòu)上。利用這種圖形結(jié)構(gòu)來證實或反駁屬性將能夠驗證這些數(shù)學(xué)表達式。這是通過確定數(shù)學(xué)結(jié)構(gòu)中的矛盾式(方法是順著或逆著信號流來傳遞數(shù)值)來完成的。
現(xiàn)有工具采用以下兩種方式來滿足靜態(tài)驗證市場的需求。
1. 采用斷言:這些是在模型/設(shè)計自身當(dāng)中規(guī)定并公式化的設(shè)計約束(運用諸如SystemVerilog、Open-VERA、Verilog、VHDL等設(shè)計/驗證語言)。
2. 采用屬性:這些通過采用一種屬性語言(比如PSL、Sugar)提供了屬性的規(guī)范。
4. 等效性驗證
為了確定邏輯門級表示與HDL實現(xiàn)是相同的,通過采用匹配點并比較這些點之間的邏輯來執(zhí)行一種所謂的“等效性檢查”。生成一種數(shù)據(jù)結(jié)構(gòu),并將其與相同輸入特性曲線條件下的輸出數(shù)值特性曲線進行比較。如果它們不同,則表示(在本場合為邏輯門和RTL)是不等效的。當(dāng)其中一種表示經(jīng)過了某種類型的變換時,等效性檢查有時是在兩個連接表(邏輯門級)或兩個RTL實現(xiàn)之間執(zhí)行的(圖2)。
造成設(shè)計表示出現(xiàn)差異的一些實際原因如下:
1. 合成算法/啟發(fā)式法:根據(jù)對合成工具的約束條件(區(qū)域、時間、功率)的不同,合成工具將對邏輯運算進行優(yōu)化,以推導(dǎo)出適當(dāng)?shù)倪壿嬮T級表示。為此,合成工具將采用啟發(fā)式法和邏輯最小化算法。
2. 抽象級:有時可以采用HDL來實現(xiàn)設(shè)計,它有可能與設(shè)計者的意圖存在一定的差異,原因是語言的局限性,抑或是缺乏(或不具備)對合成工具解釋特定語言結(jié)構(gòu)并將其變換為邏輯門級表示的方式進行預(yù)測的能力。
正確驗證方法的選擇標(biāo)準(zhǔn)
在準(zhǔn)備將新技術(shù)引入自己的工具流程之前,芯片供應(yīng)商應(yīng)當(dāng)考慮以下問題并做出適當(dāng)?shù)恼壑浴?
1. 在某個特定的產(chǎn)品線中,我們是市場的領(lǐng)先者還是追隨者?
2. CAD基礎(chǔ)設(shè)施、工具和方法是集中式的還是分布式的?
3. 新型驗證技術(shù)的評估是針對第一代產(chǎn)品進行的嗎?
4. 新型驗證技術(shù)對成本和產(chǎn)品面市時間的直接影響和間接影響是什么?
5. 新型工具能否處理變動的設(shè)計能力?
6. 工具的易用性如何?
7. 可為新型工具提供什么水平的文檔和支持?
8. 新型工具和方法與公司內(nèi)部現(xiàn)有的工具和方法之間是否具有互操作性?
9. 新型工具的ROI(投資回報)是什么(包括服務(wù)、培訓(xùn)、咨詢、計算和人力資源)?
10. 新型工具能否支持處于多個不同地理位置的設(shè)計?
11. 對于有關(guān)公司而言,他們所需關(guān)注的最為重要的問題或許是:我們雇用的設(shè)計師和驗證工程師對新型工具是否有成見(設(shè)計師不愿意學(xué)習(xí)和采用新技術(shù))?
1.產(chǎn)品角度
主要從事存儲器芯片或存儲器密集型(而不是邏輯密集型)芯片生產(chǎn)的公司――比如SRAM和DRAM公司或許根本不需要進行大量的邏輯驗證。這些器件大多是定制的。雖然此類產(chǎn)品中有些規(guī)模會很大,但它們的邏輯復(fù)雜性并不高,因而不支持在公司內(nèi)部配備大量邏輯驗證工具的計劃。不過,存儲器密集型設(shè)計提出了其他的挑戰(zhàn),比如布線、工藝調(diào)整和功耗。
那些制造純ASIC芯片(其上不運行軟件)的公司可能無須進行硬件-軟件折衷,或者也許不必實施用于捕獲運行于硬件之上的軟件的測試。例如,只具有硬件的SERDES(并串/串并變換器)芯片所要求的驗證和建模方法與同時具有硬件和軟件的SoC是不同的。
對于擁有門類寬泛的產(chǎn)品線的大型公司來說,驗證方法必須包含不同產(chǎn)品的各種要求。
2.系統(tǒng)角度
過去,邏輯芯片供應(yīng)商不負(fù)責(zé)對芯片是否滿足某一參考系統(tǒng)上的功能和性能要求進行驗證。如今的系統(tǒng)廠商在批量訂貨之前都要求芯片制造商進行系統(tǒng)參考驗證。這就要求芯片公司采用一種他們所不熟悉的附加抽象級來對芯片進行建模和驗證。這需要架構(gòu)模型、參考模型、制定復(fù)雜的應(yīng)用級測試和精細的測試臺配置。面對這些類型的難題,有關(guān)公司有兩種選擇,一是采用現(xiàn)有的語言、技術(shù)和方法(這樣做將耗費大量的時間和精力),另一種就是大量采用新技術(shù)(如VERA、Specman等)。此外,芯片銷售商還必須確保所采用的參考模型和驗證套件是在一個與客戶兼容的環(huán)境中執(zhí)行的(比如,測試場合應(yīng)該能夠使用客戶的軟件開發(fā)套件SDK以及客戶所用的仿真器)。
3.方法角度
在芯片集成之前,可以按照一個高置信度將靜態(tài)功能驗證和動態(tài)仿真結(jié)合起來用于驗證模塊級功能度。采用動態(tài)仿真能夠高效執(zhí)行系統(tǒng)級驗證,借助的方法是確定我們正在連續(xù)不斷地驗證功能空間的主要隅角。
首先執(zhí)行隨機仿真(以便在驗證的初始階段捕捉到大量的缺陷),并隨后對隨機仿真加以約束(以確定在測試計劃中所規(guī)定的測試空間已經(jīng)在器件上被完全覆蓋)的做法或許相對容易一些。應(yīng)考慮將約束驅(qū)動型驗證在功能覆蓋量度上進行細化。“功能覆蓋率”這一術(shù)語被用來描述一個對所覆蓋的功能空間進行量化的參數(shù),相反,“代碼覆蓋率”則被用來對已經(jīng)實現(xiàn)的設(shè)計被某一給定的測試套件所覆蓋的程度進行量化。定向仿真隨后可被用來在驗證周期的末端覆蓋隅角測試空間。
斷言和屬性可在靜態(tài)功能驗證期間的背景中起作用(在模塊級上),并可在動態(tài)仿真環(huán)境中被重用(在模塊和系統(tǒng)級上)。如果模塊將被轉(zhuǎn)變成IP,則它們也是有用的,因為斷言將在IP被重用時持續(xù)不斷地檢查其屬性。
評論