DC綜合及仿真驗證和DFT測試

       綜合技術是提高設計產能的一個很重要的技術,沒有綜合技術的發展就不可能用HDL實現電路的設計,因爲HDL開始是用來供電路仿真建模使用的,到了後來才把其中一部分子集作爲可綜合的語言,也就是RTL CODE。很多人入門都用HDL做設計,就以爲HDL就只是用來做設計的,沒有看到HDL最初始的一面,所以在驗證時,就無法用好HDL另外一部分強大的功能。有時間還是可以看看Writing Testbench這本書,增強對HDL語言在驗證方面作用的瞭解,也是提高對HDL認識很好的補充。
       這裏以Design Compiler爲例子講解綜合的過程。
       首先,綜合就要必須要用綜合庫,這個你可以向廠家要,綜合庫可以通過.lib這個庫文件轉變成.db綜合庫,這個過程可以在DesignCompiler裏面用實現。
       綜合庫裏面有什麼內容呢?.db 是無法閱讀的,.lib是可以閱讀的,裏面有庫的基本參數的單位,庫運行的條件,各種參數,最重要的是兩個部分,一個是WLM-Wire Load Model,一個Gate的定義(輸入輸出,功能,時序參數,面積等等);這只是StandarCell的庫,另外還有其他庫,如RAM,DSP的綜合庫,都以.db的形式存在。        
      綜合需要三種輸入,一個是代碼,一個是綜合庫,一個是綜合腳本 script。
      綜合腳本主要包括了一下內容,對綜合工具環境的配置,對綜合對象外部環境的設置(operation condiction),對WLD的設置,對綜合對象的時序的約束,綜合策略,綜合優化,綜合報告和輸出。
      綜合技術的研究可以追溯到20世紀60年代,IBM公司T.J.Watson研究中心開發ALERT系統,將寄存器傳輸級算法描述轉化成邏輯級的結構實現;20世紀70年代,綜合技術發展迅速,但主要致力於較低層次的邏輯綜合和版圖綜合;20世紀80年代中期,專用集成電路的廣泛應用,要求芯片設計大規模、高性能、短週期,大大推動了從算法級設計描速向寄存器傳輸級設計描述轉換的高層次綜合技術。
      邏輯綜合負責將寄存器傳輸級的結構描述轉化爲邏輯層的結構描述,以及將邏輯層的結構描述轉化爲電路的結構描述。在數字IC設計領域常用的EDA綜合工具中,最權威的要算Synopsys公司提供的綜合工具。Synopsys公司提供的Design Compiler(DC)是業界流行的、功能強大的邏輯綜合工具。用戶只需要輸入設計規格的HDL描述和時間約束,就可能得到較爲優化的門級綜合網表。此外,DC還集成了功能強大的靜態時序分析引擎,並支持與後端佈局佈線工具交互工作。     
      從某種意義而言,綜合就是將設計的HDL描速轉化爲門級網表的過程。Synopsys公司提供的綜合工具DC把綜合分爲三個步驟進行:synthesis=translation+mapping+optimization。Translation是指把設計的HDL描述轉化爲 GTECH庫元件組成的邏輯電路;GTECH庫是Synopsys公司提供的通用的、獨立於工藝的元件庫。Mapping是指將GTECH庫元件映射到某一特定的半導體工藝庫上,此時的電路網表包含了相關的工藝參數。Optimization是根據設計者設定的時延、面積、線負載模型等綜合約束條件對電路網表進一步優化的過程。從綜合工具的使用流程來看,綜合包括綜合環境的設置,綜合約束,綜合優化,綜合與後端流程等。
      綜合約束用來設定電路綜合的目標,它包括設計環境約束、時間約束和麪積約束。
      設計環境約束指的是用來描述設計在工作時的溫度、電壓、驅動、負載等外部條件的一系列屬性。基本的環境設置內容包括工作條件、負載模型、系統接口驅動或扇出能力等設置。這些屬性約束在電路綜合時是必須的,如果用戶沒有進行顯示的說明,則DC在綜合的時候會採用默認值。
      時間約束內容包括定義時鐘、定義時鐘網絡的時間約束和時序路徑時間約束設定,以及非同步設計的時間約束等。瞭解延遲的計算是定義恰如其分的時間約束的關鍵。 Synopsys公司支持幾種延遲模型:一是CMOS通用的延遲模型,二是CMOS分段的線性延遲模型,三是非線性的查表延遲模型。深亞微米的設計,前兩種模型並不常用,非線性的延遲模型以輸入的遷越時間和輸出電容負載爲參變量計算延遲的時間值,其結果以表格的形式列出供DC查找.
      面積約束和時間約束之間是一對矛盾且需要折中的關係,DC綜合默認爲時間約束比面積約束擁有更高的優先級。DC優化時默認不進行面積優化,如果你關注於芯片的面積,可以使用set_max_area命令設定面積的約束,使得DC完成時序約束之後繼續進行面積優化。 在設定綜合約束之後,一般並不馬上進行綜合優化。因爲對於一個較大的設計來說,綜合一次時間很長。因此,綜合前確認綜合約束命令是否正確添加到設計中時很有必要的,可以減少由於綜合約束不正確重新綜合優化的風險,減少綜合反覆的時間。檢查綜合約束設置的命令有 report_design, report_port –verbose, report_clock [-skew], report_constraints, report_timimg_requirement 等。
      許多版圖工具只接受Verilog或EDIF格式的綜合網表作爲輸入。在綜合後提供Verilog格式的網表送給後端的版圖工具,IC工程師還必須對綜合的網表做好一下處理:
1.徹底解決多次例化同一子模塊的問題
2.修正設計中部分連線的命名以簡化綜合網表
3.刪除整個設計中懸空的端口
4.確保每個實例化單元的引腳都是可見
5.避免網表中存在assign語句、傳輸門和三態連線的定義
6.避免網表中存在不必要的門控時鐘或門控復位信號
7.避免網表中引用的實例化名不存在對應的實現邏輯
      在綜合之後,我們還得對綜合後的網表進行門級仿真,在門級仿真上Synopsys公司提供的VCS仿真工具在服務器上運行的速度是比較快的。門級仿真過程中還有一步就是帶時序反標的時序仿真,通過DC或者PT寫出SDF文件,在網表中將邏輯延遲和線延遲反標入電路中,模擬更加真實的情況。
      功能仿真及驗證
      驗證的目的視爲了保證設計實現提供的功能特性是正確的,是與設計規範中定義的功能特性保持一致。驗證的目的在於證明設計沒有錯誤。然而事實上驗證只能證明某些設計錯誤存在或者不存在,驗證是一個窮舉設計中可能存在的錯誤的過程。業界中存在着相當度的驗證手段和驗證的策略,其中主要的驗證手段可以粗略地劃分爲功能仿真技術、靜態時序分析技術、形式驗證技術等。
      功能仿真與調試
      功能仿真是設計驗證的主要形式。從仿真的抽象層次來看,包括基於事件(event based)的仿真,基於時鐘週期(cycle based)的仿真,基於事務交易(tansaction based)的仿真。
     基於事件的仿真器把輸入激勵的變化認爲是事件的觸發,每一個仿真時間仿真器處理一個事件觸發,根據事件觸發的內容對整個設計重新計算直到一個仿真穩態出現爲止。基於事件觸發的仿真特點是同時覆蓋了設計的功能和時序模型,仿真結果精確,它非常容易探測到設計中的毛刺電路,尤其適用於異步電路的仿真。
     基於時鐘週期的仿真在一個時鐘週期那沒有時間的概念,它只在時鐘的上升沿或下降沿進行觸發,每一個時鐘週期的時間對電路計算一次。
     基於事務交易的仿真以數據包、圖形、語音等對象作爲直接的仿真激勵而不在是添加到設計引腳的激勵波形。
     功能驗證的方法主要有三種:黑盒法、白盒法和灰盒法。
     架構測試環境在軟件仿真過程稱作“writing testbenches”。Testbench通常是指這樣的代碼,它對設計進行恰當的配置、產生測試激勵盒有選擇性地觀察地響應。Testbench一般用硬件描述語言Verilog HDL或VHDL實現,也可以包含C語言或者C++語言產生地激勵數據加上PLI,現在業界還有專門地驗證語言Vera和Specman E。
     靜態時序分析簡稱STA(Static Timming Analysis),它提供了一種針對大規模門級電路進行時序驗證的有效方法。它指需要更具電路網表的拓撲,就可以檢查電路設計中所有路徑的時序特性,測試電路的覆蓋率理論上可以達到100%,從而保證時序驗證的完備性;同時由於不需要測試向量,所以STA驗證所需時間遠小於門級仿真時間。但是,靜態時序分析也有自己的弱點,它無法驗證電路功能的正確性,所以這一點必須由RTL級的功能仿真來保證,門級網表功能的正確性可以用門級仿真技術,也可以用後面講到的形式驗證技術。值得注意的是,靜態時序分析只能有效地驗證同步時序的正確性,對於大部分設計重可能包含地異步電路的時序驗證,則必須通過門級仿真來保證其時序的正確性。由此我們可以得出這樣子的結論:靜態時序分析和門級時序仿真是從不同的側重點來分析電路以保證電路的時序正確,它們是相輔相成的。
     Synopsys公司的Prime time時序分析的工具,對設計電路進行以下幾種分析:
1.從主要的輸入端口到電路中所有觸發器
2.從觸發器到觸發器
3.從觸發器到主要輸出端口
4.從主要的輸出端口到主要的輸出端口
      靜態時序分析工具把整個設計電路打散成上述四種類型的時序路徑,分析不同路徑的時序信息,得到建立時間和保持時間的計算結果。當然還有另外幾條路徑:如 gated clock,DFF復位端的,具體可以參見PrimeTime的手冊。  
      形式驗證是一種靜態的驗證手段,它根據電路靜態地判斷兩個設計在功能上是否等價,常用來判斷一個設計在修改前和修改後其功能是否保持一致。它運行時無需測試向量,但是必須有一個參照設計和一個待驗證的設計。參照設計時設計者認爲功能上完備無缺的設計,理論上它可以用高級語言如C,C++實現的,也可以是用集成電路的建模語言systemC,或者驗證語言vera或SpecmanE實現的;但是就實現而言,多數形式驗證過程中參照設計就是我們的RTL設計,一般用verilog或VHDL實現的。
       當RTL級或FPGA功能仿真驗證結束後,傳統的IC設計流程需要完成一下幾次門級仿真:綜合後門級仿真;DFT之後的門級仿真;佈局佈線之後的門級仿真等,如果設計很大或者電路很複雜,往往需要龐大的測試向量來驗證設計的功能及時序是否正確,這就使得我們花費在門級仿真的時間隨着電路規模的增直線上升。
       形式驗證在ASIC設計流程中猶如一個迭代算法,其最初的輸入是RTL設計,每次比較,都將上一次比較後的設計(第n-1次)作爲參照設計處理之後的結果(第n次)進行比較,之所以這麼做,是基於以下考慮:
1.形式驗證工具開始比較前,首先在兩個設計中找到一一對應的比較點。
2.如果一個設計改動太大,改變前後的功能是完全一致的,但如果形式驗證工具無法找到適合的比較點,也會認爲這兩個設計不等價。        形式驗證在 ASIC設計流程中主要應用在以下幾個方面:RTL-RTL的對比,RTL-GATE的對比,GATE-GATE的對比。採用形式驗證進行RTL與RTL 的比較,可以在較短的時間內驗證並保證代碼修改的過程中沒有引入功能性的錯誤;進行RTL與GATE的對比,是驗證源代碼與綜合之後的門級網表是否等價,以保證綜合過程中不會出現任何錯誤;進行GATE與GATE的對比,主要是發生在驗證插入DFT後的電路網表在功能上是否一致;生成時鐘樹前後的電路網表在功能上是否一致;佈局佈線前後的電路網表在功能上是否一致等。 
      可測試設計與可測性分析(DFT)            
      什麼是DFT,爲什麼要做DFT。
      可測試性技術(Design For Testability-DFT)就是試圖增加電路中信號的可控制性和可觀測性,以便及時經濟地測試芯片是否存在物理缺陷,使用戶拿到良好的芯片。其中包括Ad Hoc技術和結構化設計技術。目前,任何高集成度IC設計系統都採用結構化設計技術,其中主要掃描技術和內建自測兩種技術。
      一個電路的測試性問題應兩個方面:
1.由外部輸入信號來控制電路中的各個節點的電平值,稱爲可控制性。
2.從外部輸出端觀測內部故障地難易程度,稱爲可觀測性
     掃描技術是指電路中的任一狀態移進或移出的能力,其特點使測試數據的串行化。比較常使用的是全掃描技術和邊界掃描技術。全掃描技術是將電路中的所有觸發器用特殊設計的具有掃描功能的觸發器代替,使其在測試時鏈接成一個或幾個移位寄存器,這樣,電路分成了可以進行分別測試的純組合電路和移位寄存器,電路中的所有狀態可以直接從原始輸入和輸出端得到控制和觀察。這樣子的電路將時序電路的測試生成簡化成組合電路的測試生成,由於組合電路的測試生成算法目前已經比較完善,並且在測試自動化生成方面比時序電路的測試生成容易得多,因此大大降低了測試生成的難度。
     對於存儲器模塊的測試一般由生產廠家提供專門的BIST電路,通過BIST電路可以方便地對存儲單元地存取功能進行測試,所謂的BIST電路是指把測試電路做到IC裏面,利用測試電路固有的能力自行執行一個測試存儲器的程序。另外MBIST還可以解決RAM SHADOW的問題提高芯片的可測試性。
      爲什麼要做DFT呢?因爲我們的設計,也就是RTL到GDSII交出去的只是一個版圖,最後芯片需要生產織造是在foundry做的,也就是廠家根據你提供的數據GDSII做成芯片。這個流程過程中可能出現缺陷,這個缺陷可能是物理存在的,也可能是設計當中的遺留問題導致的,另外一方面在封裝的過程也可能出現缺陷。爲了保證我們的芯片能夠不存在物理上的缺陷,所以就要做DFT。也就是說,你交給foundry一個加法器的GDSII,他在做的過程和封裝的時候都可能引入缺陷;拿到這個加法器芯片你怎麼知道,裏面的一個與門,廠家給你做的就是一個正常工作的與門呢?你怎麼知道廠家做好的加法器的dier在封裝之後引腳就能正常輸入呢?一句話,就是通過DFT!如何做DFT呢,就是上面提到的拉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章