天天看點

各種流行驗證技術在晶片設計流程中的應用

作者:Rangarajan (Sri) Purisai 上網時間:2005年01月01日

本文闡述了當今流行的驗證技術(形式驗證、随機、定向、限制随機、斷言、屬性檢查)和語言(SystemC、C/C++、SystemVerilog、Open-VERA、E等等),還探讨了各種驗證技術在數字ASIC傳統設計流程中的場合(應采用何種技術和語言)和時機(設計者何時需要運用某項特定的技術或語言)。

功能驗證在設計周期中占了最大的一部分,這是一個人所共知的事實。然而,面對如此衆多用于緩解該問題的現有技術,我們真正應該采用的是哪一項(或哪幾項)?得到的答案通常并不簡單明了,而且往往令人感覺含混不清和成本昂貴!

抽象級越高,設計就越容易;同理,抽象級越高,就越容易犯較大的錯誤。如果産生架構缺陷,就有可能損害整個晶片,這與發生在邏輯門連接配接表級上的導線誤連接配接是截然不同的(後者可通過重新連線的方法得到修複)。

以Verilog為例,它為設計者提供了一個較為簡易的接口,以便在一個相當抽象的等級上進行設計。然而,如果設計者并不知曉在多個設計周期中獲得的語言的細微差别,那麼就非常容易犯錯。許多論文重點闡述了Verilog誤用的不良後果。當設計曾經是瓶頸時,Verilog獨立地使設計生産率取得了指數性的提高(如采用原理圖捕獲),并首先推進了複雜晶片的開發!在衆多的驗證技術和語言、檢驗成為瓶頸的今天,相同的争議仍然存在。

驗證瓶頸

EDA行業通過引入工具來幫助提升設計生産率,進而達到縮短産品時間的目的,并最終實作設計時間的縮減。設計時間與矽片複雜性之間存在某種函數關系。矽片複雜性指的是工藝精細度調整以及新型材料或新型架構的引入對器件互連的影響。在矽片結構中擁有複雜性的能力将導緻系統複雜性的形成(由于特征尺寸的縮小以及消費者對增加功能的需求而在相同的面積之内壓縮進更多半導體的能力)。

随着設計方案構築過程中所內建的半導體數量的指數性增加,計算時間或工程師數量的線性增加已不足以縮短設計時間。系統複雜性繼續按照摩爾定律增加,而功能複雜性(一個系統所具有的不同狀态的數量)的增長速度則更加迅猛。為解決這一問題,EDA行業提出了通過自動化來實作“設計抽象”(Design Abstraction)的概念。從能夠在多個電路層上捕獲設計的原理圖捕獲工具到基于語言的解決方案等均已面市。

這種追随形勢需要的設計手法仍然是适當的。EDA界即将推出并給予支援的最新語言是SystemC和SystemVerilog,它們能夠解決一些由目前所采用的技術和工藝造成的系統複雜性問題。我們可以說,就目前的技術工藝而言,設計複雜性已經得到了很好的了解,而且,設計瓶頸也因為采用EDA工具所實作的生産率提高而在一定程度上得到了克服。

設計生産率的提升速度将繼續低于複雜性的增速,此時與之相關的瓶頸已并非設計時間,而是驗證時間

由于下列原因所導緻的設計抽象級的提高是形成驗證瓶頸的罪魁禍首之一。

1. 在一個較高的抽象級上進行設計使得我們能夠輕松地構築高度複雜的功能。設計複雜性的這種增加接着會導緻驗證工作量幾乎翻番(如果設計者考慮增加鎖存器和邏輯門的數量,這就等于功能複雜性将加倍,而且其驗證範圍也将是以翻番)。

2. 在設計、變換以及至終端産品的最終映射中采用較高的抽象級總會存在資訊損失和解釋錯誤的情況。比如,采用HDL級設計并将之變換為邏輯門級(映射至某一特定技術)的綜合過程;在這一級上需要進行驗證,以保證所實施的變換正确無誤,而且設計内容沒有丢失。提高抽象級還會帶來代碼解釋方面的問題,代碼解釋是用來在仿真過程中對設計進行描述的,用于確定所編寫的代碼如實地反映了功能規範。

其他影響驗證問題的因素包括:

1. 由于當今設計的異類特性(比如硬體-軟體、模拟-數字的共存等)所導緻的功能複雜性的增加;

2. 對較高的系統可靠性的要求迫使驗證工作必須確定晶片級功能可在系統環境中圓滿地執行,尤其是當某個晶片級缺陷具有多重影響時更應如此。

相關統計結果表明:驗證問題是客觀存在的,并正在耗費有關的公司的巨額資金。

設計差錯導緻的晶片缺陷:在由于邏輯和功能缺陷的緣故而導緻需要進行重新布線的設計當中,有82%存在着設計差錯。這意味着在驗證過程中并未考慮一些極端場合,而且一直到最後的檢查之前,bug都會隐匿在設計之中。

規範誤差導緻的晶片缺陷:在由于邏輯和功能缺陷的緣故而導緻需要進行重新布線的設計當中,有47%存在着規範不正确或不完整的情況。在由于邏輯和功能缺陷的緣故而導緻需要進行重新布線的設計當中,有32%對規範進行了改動。

采用複用IP和外來IP所引發的問題:14%的缺陷晶片在複用單元或外來IP中存在bug。

重新布線的影響:重新布線有可能給公司帶來高達10萬美元的損失。此外,它還會推遲産品面市,并因采用這些缺陷晶片的系統所發生的故障而導緻費用的上揚。

為了對付驗證瓶頸問題可以:1.提高設計師的生産率:這一領域大有優化空間。設計生産率已經通過改善計算機性能、采用諸如微軟公司的軟體工具(如Excel)等個人工具而得到了提高。雖然它們在捕獲測試和驗證計劃中大有助益,但大部分時間卻花在了測試場合的編碼、運作和調試上。2.提高驗證生産率:這種方法明顯具有用于提升生産率的潛力。

為了提高驗證生産率,EDA行業采用了一種與解決設計瓶頸問題相似的“抽象”概念。諸如Verilog和VHDL等進階語言被用來驗證晶片;包括諸如任務、線程(分叉、連接配接)等以及諸如“while”等控制結構。這提供了對資料的進一步控制,以便在所有的功能隅角上實作設計的全面執行。然而,這些構件過去是不可綜合的,是以未被設計師用作實際設計代碼的一部分。

随着複雜性的繼續提高,人們建立并引入了能夠在不同的抽象級上對複雜設計進行驗證的新型驗證語言。伴随着這些新型語言的問世又出現了對其提供支援的技術和工具。

驗證與确認(Validation)的比較

除了驗證問題之外,晶片制造商還飽受确認時間的困擾。Kropf将“确認”定義為“通過檢查實作方案的工作行為來獲得對規範的信心的過程”。對驗證與确認的比較,觀點衆多。一種觀點是:“确認用于保證這是一種正确的設計,而驗證則用于保證設計是正确的”。另一種觀點是:“驗證是在矽片測試之前(Verilog/VHDL仿真等)進行的,而确認則是在矽片測試之後(在實驗室中,在電路闆上進行矽片測試)進行”。

不管是确認還是驗證,為了確定矽片滿足規範,有兩件事是必需做到的:

1)晶片規範得到了正确的解釋(一般是借助文檔資料,有時也采用模組化的方法);

2)這種解釋被正确地捕獲和執行(一般采用VHDL)、綜合到矽片之中、并被封裝為晶片。

本文将第二步視作驗證,而把第一步看作确認。圖1給出了被業界用來確定上述兩個步驟得到滿足的常見設計流程的概況。

各種流行驗證技術在晶片設計流程中的應用

視被執行功能的複雜性的不同,可以跳過其中的某些步驟,也可以增加更多的步驟。例如,如果知道某個特定設計完全是面向硬體的,且不包括驅動器或軟體,便可從抽象級3直接跳至抽象級1(無需進行硬體-軟體折衷)。PLL(鎖相環)設計似乎就是這樣的一個例子。

應該注意,當逐漸走向較低的抽象級時,必須始終保持等效性,以確定最低的抽象級能夠滿足系統規範的要求。

當今的驗證技術和發展趨勢

1. 動态功能驗證

使用最為普遍的功能驗證方法具有動态特性。之是以将其冠名為“動态”,原因在于輸入圖形/激勵信号是在一段時間内(若幹個時鐘周期)生成并應用于設計的,而且,對應的結果被收集起來并與一個參考/黃金模型進行比較,以便與規範相符。

一個仿真器被用來計算所有信号的全部數值,并将規定的預期值與計算值加以比較。目前,業界可以選用的仿真器有兩種。

1. 基于周期的仿真器:該仿真器完全不理會時鐘内部發生的事件,而是在每個周期中進行一次信号評估。由于執行時間較短,這類仿真器的運作速度往往較快。

2. 基于事件的仿真器:這些仿真器捕獲事件(在時鐘内部或在時鐘的邊界上)并通過設計進行傳播,直到實作一個穩定狀态為止。

動态仿真的一個主要的缺點是,在一個限時仿真行程當中,隻能對晶片的典型(而不是所有可能的)工作特性進行驗證。造成這種情況的主要原因在于晶片是針對已知測試空間(而不是未知測試環境)進行測試的,采用的是定向測試法。EDA行業推出了諸如Open-VERA、E和SVL(SystemC Verification Library)等更加進階的驗證語言。這些語言引入了新的概念,比如限制随機激勵、随機激勵信号配置設定和電抗性測試台。伴随着這些語言的運用出現了一些用于對其進行解釋的工具,就本場合而言,它們有可能是VERA、Specman和OSCI核心(即CCSS)。

除了引入了随機化功能之外,新型驗證語言和工具還通過減少公司在構築各種用于激勵信号發生的測試場合/方案所花費的時間量而實作了生産率的提高。例如,測試方案可以采用最高的抽象級來編寫,并能夠通過采用功能強大的面向對象型結構而“擴充”至任何較低的抽象級。

當采用動态驗證時,設計者一般希望擁有一個以可量化項來覆寫和捕獲的功能空間的估計值:

1. 被驗證的代碼行的數量(行覆寫率);

2. 被驗證的邏輯表達式有多少?(表達式覆寫率)

3. 在一個FSM設計中達到了多少種狀态(FSM覆寫率);

4. 在一個仿真行程中進行雙向變換的端口和寄存器的數量(變換覆寫率);

5. 設計代碼中被覆寫的邏輯通路的數量(通路覆寫率);

這可以通過采用諸如代碼覆寫和lint等工具來實作。

設計者将“斷言”用作一個占位符,用來描述與某項設計相關聯的假設和工作特性(包括暫時的特性)。如果設計滿足或未滿足規範或假設,則斷言将會在一個動态仿真過程中被觸發。斷言也可在形式/靜态功能驗證環境中使用。

2. 混合功能驗證

在該方法中通常執行動态仿真,仿真結果被捕獲并用作靜态驗證的輸入。在靜态驗證期間,邏輯方程/符号通過設計進行傳播(而不象在動态仿真中那樣傳播的是數值)。這種手法雖然不如形式驗證詳盡周全,但卻可以被證明具有比純動态仿真更高的效率,因為它開始于動态仿真停止之時。

3.靜态功能驗證

在靜态功能驗證中,沒有向設計施加輸入激勵信号。而是将設計映射至一個采用BDD(雙擇判決圖)或其他數學表達式(它們規定了所有時間周期中的設計功能)來說明其功能的圖形結構上。利用這種圖形結構來證明或反駁屬性将能夠驗證這些數學表達式。這是通過确定數學結構中的沖突式(方法是順着或逆着信号流來傳遞數值)來完成的。

現有工具采用以下兩種方式來滿足靜态驗證市場的需求

各種流行驗證技術在晶片設計流程中的應用

1. 采用斷言:這些是在模型/設計自身當中規定并公式化的設計限制(運用諸如SystemVerilog、Open-VERA、Verilog、VHDL等設計/驗證語言)。

2. 采用屬性:這些通過采用一種屬性語言(比如PSL、Sugar)提供了屬性的規範。

4. 等效性驗證

為了确定邏輯門級表示與HDL實作是相同的,通過采用比對點并比較這些點之間的邏輯來執行一種所謂的“等效性檢查”。生成一種資料結構,并将其與相同輸入特性曲線條件下的輸出數值特性曲線進行比較。如果它們不同,則表示(在本場合為邏輯門和RTL)是不等效的。當其中一種表示經過了某種類型的變換時,等效性檢查有時是在兩個連接配接表(邏輯門級)或兩個RTL實作之間執行的(圖2)。

造成設計表示出現差異的一些實際原因如下:

1. 合成算法/啟發式法:根據對合成工具的限制條件(區域、時間、功率)的不同,合成工具将對邏輯運算進行優化,以推導出适當的邏輯門級表示。為此,合成工具将采用啟發式法和邏輯最小化算法。

2. 抽象級:有時可以采用HDL來實作設計,它有可能與設計者的意圖存在一定的差異,原因是語言的局限性,抑或是缺乏(或不具備)對合成工具解釋特定語言結構并将其變換為邏輯門級表示的方式進行預測的能力。

正确驗證方法的選擇标準

在準備将新技術引入自己的工具流程之前,晶片供應商應當考慮以下問題并做出适當的折衷。

1. 在某個特定的産品線中,我們是市場的領先者還是追随者?

2. CAD基礎設施、工具和方法是集中式的還是分布式的?

3. 新型驗證技術的評估是針對第一代産品進行的嗎?

4. 新型驗證技術對成本和産品面市時間的直接影響和間接影響是什麼?

5. 新型工具能否處理變動的設計能力?

6. 工具的易用性如何?

7. 可為新型工具提供什麼水準的文檔和支援?

8. 新型工具和方法與公司内部現有的工具和方法之間是否具有互操作性?

9. 新型工具的ROI(投資回報)是什麼(包括服務、教育訓練、咨詢、計算和人力資源)?

10. 新型工具能否支援處于多個不同地理位置的設計?

11. 對于有關公司而言,他們所需關注的最為重要的問題或許是:我們雇用的設計師和驗證工程師對新型工具是否有成見(設計師不願意學習和采用新技術)?

1.産品角度

主要從事存儲器晶片或存儲器密集型(而不是邏輯密集型)晶片生産的公司——比如SRAM和DRAM公司或許根本不需要進行大量的邏輯驗證。這些器件大多是定制的。雖然此類産品中有些規模會很大,但它們的邏輯複雜性并不高,因而不支援在公司内部配備大量邏輯驗證工具的計劃。不過,存儲器密集型設計提出了其他的挑戰,比如布線、工藝調整和功耗。

那些制造純ASIC晶片(其上不運作軟體)的公司可能無須進行硬體-軟體折衷,或者也許不必實施用于捕獲運作于硬體之上的軟體的測試。例如,隻具有硬體的SERDES(并串/串并變換器)晶片所要求的驗證和模組化方法與同時具有硬體和軟體的SoC是不同的。

對于擁有門類寬泛的産品線的大型公司來說,驗證方法必須包含不同産品的各種要求。

2.系統角度

過去,邏輯晶片供應商不負責對晶片是否滿足某一參考系統上的功能和性能要求進行驗證。如今的系統廠商在批量訂貨之前都要求晶片制造商進行系統參考驗證。這就要求晶片公司采用一種他們所不熟悉的附加抽象級來對晶片進行模組化和驗證。這需要架構模型、參考模型、制定複雜的應用級測試和精細的測試台配置。面對這些類型的難題,有關公司有兩種選擇,一是采用現有的語言、技術和方法(這樣做将耗費大量的時間和精力),另一種就是大量采用新技術(如VERA、Specman等)。此外,晶片銷售商還必須確定所采用的參考模型和驗證套件是在一個與客戶相容的環境中執行的(比如,測試場合應該能夠使用客戶的軟體開發套件SDK以及客戶所用的仿真器)。

3.方法角度

在晶片內建之前,可以按照一個高置信度将靜态功能驗證和動态仿真結合起來用于驗證子產品級功能度。采用動态仿真能夠高效執行系統級驗證,借助的方法是确定我們正在連續不斷地驗證功能空間的主要隅角。

首先執行随機仿真(以便在驗證的初始階段捕捉到大量的缺陷),并随後對随機仿真加以限制(以确定在測試計劃中所規定的測試空間已經在器件上被完全覆寫)的做法或許相對容易一些。應考慮将限制驅動型驗證在功能覆寫量度上進行細化。“功能覆寫率”這一術語被用來描述一個對所覆寫的功能空間進行量化的參數,相反,“代碼覆寫率”則被用來對已經實作的設計被某一給定的測試套件所覆寫的程度進行量化。定向仿真随後可被用來在驗證周期的末端覆寫隅角測試空間。

斷言和屬性可在靜态功能驗證期間的背景中起作用(在子產品級上),并可在動态仿真環境中被重用(在子產品和系統級上)。如果子產品将被轉變成IP,則它們也是有用的,因為斷言将在IP被重用時持續不斷地檢查其屬性。

作者: Rangarajan (Sri) Purisai

進階電氣設計工程師

網絡處了解決方案小組

賽普拉斯半導體公司

繼續閱讀