本文闡述了當(dāng)今流行的驗(yàn)證技術(shù)(形式驗(yàn)證、隨機(jī)、定向、約束隨機(jī)、斷言、屬性檢查)和語言(SystemC、C/C++、SystemVerilog、Open-VERA、E等等),還探討了各種驗(yàn)證技術(shù)在數(shù)字ASIC傳統(tǒng)設(shè)計(jì)流程中的場(chǎng)合(應(yīng)采用何種技術(shù)和語言)和時(shí)機(jī)(設(shè)計(jì)者何時(shí)需要運(yùn)用某項(xiàng)特定的技術(shù)或語言)。
功能驗(yàn)證在設(shè)計(jì)周期中占了最大的一部分,這是一個(gè)人所共知的事實(shí)。然而,面對(duì)如此眾多用于緩解該問題的現(xiàn)有技術(shù),我們真正應(yīng)該采用的是哪一項(xiàng)(或哪幾項(xiàng))?得到的答案通常并不簡(jiǎn)單明了,而且往往令人感覺含混不清和成本昂貴!
抽象級(jí)越高,設(shè)計(jì)就越容易;同理,抽象級(jí)越高,就越容易犯較大的錯(cuò)誤。如果產(chǎn)生架構(gòu)缺陷,就有可能損害整個(gè)芯片,這與發(fā)生在邏輯門連接表級(jí)上的導(dǎo)線誤連接是截然不同的(后者可通過重新連線的方法得到修復(fù))。
以Verilog為例,它為設(shè)計(jì)者提供了一個(gè)較為簡(jiǎn)易的接口,以便在一個(gè)相當(dāng)抽象的等級(jí)上進(jìn)行設(shè)計(jì)。然而,如果設(shè)計(jì)者并不知曉在多個(gè)設(shè)計(jì)周期中獲得的語言的細(xì)微差別,那么就非常容易犯錯(cuò)。許多論文重點(diǎn)闡述了Verilog誤用的不良后果。當(dāng)設(shè)計(jì)曾經(jīng)是瓶頸時(shí),Verilog獨(dú)立地使設(shè)計(jì)生產(chǎn)率取得了指數(shù)性的提高(如采用原理圖捕獲),并首先推進(jìn)了復(fù)雜芯片的開發(fā)!在眾多的驗(yàn)證技術(shù)和語言、檢驗(yàn)成為瓶頸的今天,相同的爭(zhēng)議仍然存在。
驗(yàn)證瓶頸
EDA行業(yè)通過引入工具來幫助提升設(shè)計(jì)生產(chǎn)率,進(jìn)而達(dá)到縮短產(chǎn)品時(shí)間的目的,并最終實(shí)現(xiàn)設(shè)計(jì)時(shí)間的縮減。設(shè)計(jì)時(shí)間與硅片復(fù)雜性之間存在某種函數(shù)關(guān)系。硅片復(fù)雜性指的是工藝精細(xì)度調(diào)整以及新型材料或新型架構(gòu)的引入對(duì)器件互連的影響。在硅片結(jié)構(gòu)中擁有復(fù)雜性的能力將導(dǎo)致系統(tǒng)復(fù)雜性的形成(由于特征尺寸的縮小以及消費(fèi)者對(duì)增加功能的需求而在相同的面積之內(nèi)壓縮進(jìn)更多晶體管的能力)。
隨著設(shè)計(jì)方案構(gòu)筑過程中所集成的晶體管數(shù)量的指數(shù)性增加,計(jì)算時(shí)間或工程師數(shù)量的線性增加已不足以縮短設(shè)計(jì)時(shí)間。系統(tǒng)復(fù)雜性繼續(xù)按照摩爾定律增加,而功能復(fù)雜性(一個(gè)系統(tǒng)所具有的不同狀態(tài)的數(shù)量)的增長(zhǎng)速度則更加迅猛。為解決這一問題,EDA行業(yè)提出了通過自動(dòng)化來實(shí)現(xiàn)“設(shè)計(jì)抽象”(Design Abstraction)的概念。從能夠在多個(gè)電路層上捕獲設(shè)計(jì)的原理圖捕獲工具到基于語言的解決方案等均已面市。
這種追隨形勢(shì)需要的設(shè)計(jì)手法仍然是適當(dāng)?shù)。EDA界即將推出并給予支持的最新語言是SystemC和SystemVerilog,它們能夠解決一些由目前所采用的技術(shù)和工藝造成的系統(tǒng)復(fù)雜性問題。我們可以說,就目前的技術(shù)工藝而言,設(shè)計(jì)復(fù)雜性已經(jīng)得到了很好的理解,而且,設(shè)計(jì)瓶頸也因?yàn)椴捎肊DA工具所實(shí)現(xiàn)的生產(chǎn)率提高而在一定程度上得到了克服。
設(shè)計(jì)生產(chǎn)率的提升速度將繼續(xù)低于復(fù)雜性的增速,此時(shí)與之相關(guān)的瓶頸已并非設(shè)計(jì)時(shí)間,而是驗(yàn)證時(shí)間
由于下列原因所導(dǎo)致的設(shè)計(jì)抽象級(jí)的提高是形成驗(yàn)證瓶頸的罪魁禍?zhǔn)字弧?
1. 在一個(gè)較高的抽象級(jí)上進(jìn)行設(shè)計(jì)使得我們能夠輕松地構(gòu)筑高度復(fù)雜的功能。設(shè)計(jì)復(fù)雜性的這種增加接著會(huì)導(dǎo)致驗(yàn)證工作量幾乎翻番(如果設(shè)計(jì)者考慮增加鎖存器和邏輯門的數(shù)量,這就等于功能復(fù)雜性將加倍,而且其驗(yàn)證范圍也將因此翻番)。
2. 在設(shè)計(jì)、變換以及至終端產(chǎn)品的最終映射中采用較高的抽象級(jí)總會(huì)存在信息損失和解釋錯(cuò)誤的情況。比如,采用HDL級(jí)設(shè)計(jì)并將之變換為邏輯門級(jí)(映射至某一特定技術(shù))的綜合過程;在這一級(jí)上需要進(jìn)行驗(yàn)證,以保證所實(shí)施的變換正確無誤,而且設(shè)計(jì)內(nèi)容沒有丟失。提高抽象級(jí)還會(huì)帶來代碼解釋方面的問題,代碼解釋是用來在仿真過程中對(duì)設(shè)計(jì)進(jìn)行描述的,用于確保所編寫的代碼如實(shí)地反映了功能規(guī)范。
其他影響驗(yàn)證問題的因素包括:
1. 由于當(dāng)今設(shè)計(jì)的異類特性(比如硬件-軟件、模擬-數(shù)字的共存等)所導(dǎo)致的功能復(fù)雜性的增加;
2. 對(duì)較高的系統(tǒng)可靠性的要求迫使驗(yàn)證工作必須確保芯片級(jí)功能可在系統(tǒng)環(huán)境中圓滿地執(zhí)行,尤其是當(dāng)某個(gè)芯片級(jí)缺陷具有多重影響時(shí)更應(yīng)如此。
相關(guān)統(tǒng)計(jì)結(jié)果表明:驗(yàn)證問題是客觀存在的,并正在耗費(fèi)有關(guān)的公司的巨額資金。設(shè)計(jì)差錯(cuò)導(dǎo)致的芯片缺陷:在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進(jìn)行重新布線的設(shè)計(jì)當(dāng)中,有82%存在著設(shè)計(jì)差錯(cuò)。這意味著在驗(yàn)證過程中并未考慮一些極端場(chǎng)合,而且一直到最后的檢查之前,bug都會(huì)隱匿在設(shè)計(jì)之中。
規(guī)范誤差導(dǎo)致的芯片缺陷:在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進(jìn)行重新布線的設(shè)計(jì)當(dāng)中,有47%存在著規(guī)范不正確或不完整的情況。在由于邏輯和功能缺陷的緣故而導(dǎo)致需要進(jìn)行重新布線的設(shè)計(jì)當(dāng)中,有32%對(duì)規(guī)范進(jìn)行了改動(dòng)。
采用復(fù)用IP和外來IP所引發(fā)的問題:14%的缺陷芯片在復(fù)用單元或外來IP中存在bug。
重新布線的影響:重新布線有可能給公司帶來高達(dá)10萬美元的損失。此外,它還會(huì)推遲產(chǎn)品面市,并因采用這些缺陷芯片的系統(tǒng)所發(fā)生的故障而導(dǎo)致費(fèi)用的上揚(yáng)。
為了對(duì)付驗(yàn)證瓶頸問題可以:1.提高設(shè)計(jì)師的生產(chǎn)率:這一領(lǐng)域大有優(yōu)化空間。設(shè)計(jì)生產(chǎn)率已經(jīng)通過改善計(jì)算機(jī)性能、采用諸如微軟公司的軟件工具(如Excel)等個(gè)人工具而得到了提高。雖然它們?cè)诓东@測(cè)試和驗(yàn)證計(jì)劃中大有助益,但大部分時(shí)間卻花在了測(cè)試場(chǎng)合的編碼、運(yùn)行和調(diào)試上。2.提高驗(yàn)證生產(chǎn)率:這種方法明顯具有用于提升生產(chǎn)率的潛力。
為了提高驗(yàn)證生產(chǎn)率,EDA行業(yè)采用了一種與解決設(shè)計(jì)瓶頸問題相似的“抽象”概念。諸如Verilog和VHDL等高級(jí)語言被用來驗(yàn)證芯片;包括諸如任務(wù)、線程(分叉、連接)等以及諸如“while”等控制結(jié)構(gòu)。這提供了對(duì)數(shù)據(jù)的進(jìn)一步控制,以便在所有的功能隅角上實(shí)現(xiàn)設(shè)計(jì)的全面執(zhí)行。然而,這些構(gòu)件過去是不可綜合的,因此未被設(shè)計(jì)師用作實(shí)際設(shè)計(jì)代碼的一部分。
隨著復(fù)雜性的繼續(xù)提高,人們創(chuàng)建并引入了能夠在不同的抽象級(jí)上對(duì)復(fù)雜設(shè)計(jì)進(jìn)行驗(yàn)證的新型驗(yàn)證語言。伴隨著這些新型語言的問世又出現(xiàn)了對(duì)其提供支持的技術(shù)和工具。
驗(yàn)證與確認(rèn)(Validation)的比較
除了驗(yàn)證問題之外,芯片制造商還飽受確認(rèn)時(shí)間的困擾。Kropf將“確認(rèn)”定義為“通過檢查實(shí)現(xiàn)方案的工作行為來獲得對(duì)規(guī)范的信心的過程”。對(duì)驗(yàn)證與確認(rèn)的比較,觀點(diǎn)眾多。一種觀點(diǎn)是:“確認(rèn)用于保證這是一種正確的設(shè)計(jì),而驗(yàn)證則用于保證設(shè)計(jì)是正確的”。另一種觀點(diǎn)是:“驗(yàn)證是在硅片測(cè)試之前(Verilog/VHDL仿真等)進(jìn)行的,而確認(rèn)則是在硅片測(cè)試之后(在實(shí)驗(yàn)室中,在電路板上進(jìn)行硅片測(cè)試)進(jìn)行”。
不管是確認(rèn)還是驗(yàn)證,為了確保硅片滿足規(guī)范,有兩件事是必需做到的: 1)芯片規(guī)范得到了正確的解釋(一般是借助文檔資料,有時(shí)也采用建模的方法); 2)這種解釋被正確地捕獲和執(zhí)行(一般采用VHDL)、綜合到硅片之中、并被封裝為芯片。
本文將第二步視作驗(yàn)證,而把第一步看作確認(rèn)。圖1給出了被業(yè)界用來確保上述兩個(gè)步驟得到滿足的常見設(shè)計(jì)流程的概況。
視被執(zhí)行功能的復(fù)雜性的不同,可以跳過其中的某些步驟,也可以增加更多的步驟。例如,如果知道某個(gè)特定設(shè)計(jì)完全是面向硬件的,且不包括驅(qū)動(dòng)器或軟件,便可從抽象級(jí)3直接跳至抽象級(jí)1(無需進(jìn)行硬件-軟件折衷)。PLL(鎖相環(huán))設(shè)計(jì)似乎就是這樣的一個(gè)例子。
應(yīng)該注意,當(dāng)逐漸走向較低的抽象級(jí)時(shí),必須始終保持等效性,以確保最低的抽象級(jí)能夠滿足系統(tǒng)規(guī)范的要求。
當(dāng)今的驗(yàn)證技術(shù)和發(fā)展趨勢(shì)
1. 動(dòng)態(tài)功能驗(yàn)證
使用最為普遍的功能驗(yàn)證方法具有動(dòng)態(tài)特性。之所以將其冠名為“動(dòng)態(tài)”,原因在于輸入圖形/激勵(lì)信號(hào)是在一段時(shí)間內(nèi)(若干個(gè)時(shí)鐘周期)生成并應(yīng)用于設(shè)計(jì)的,而且,對(duì)應(yīng)的結(jié)果被收集起來并與一個(gè)參考/黃金模型進(jìn)行比較,以便與規(guī)范相符。
一個(gè)仿真器被用來計(jì)算所有信號(hào)的全部數(shù)值,并將規(guī)定的預(yù)期值與計(jì)算值加以比較。目前,業(yè)界可以選用的仿真器有兩種。
1. 基于周期的仿真器:該仿真器完全不理會(huì)時(shí)鐘內(nèi)部發(fā)生的事件,而是在每個(gè)周期中進(jìn)行一次信號(hào)評(píng)估。由于執(zhí)行時(shí)間較短,這類仿真器的運(yùn)行速度往往較快。





