驗證的主要目的:就是檢查時間模型是否滿足時間要求,是否實現了時間所需的功能。對於整合電路來說,具體就是在時間需求規定的激勵下,電路是否產生了符合功能要求的輸出;以及在設計需求規定的條件下,電路是否完成正常的功能。
以RTL級設計為模擬對象的前模擬,主要是驗證電路的邏輯功能,訊號的跳變是瞬時完成的,因此只能在功能上證明設計的正確性,而無法證明在實際電路中邏輯功能仍然正確。
門級模擬是對RTL代碼綜合并布局布線後產生的門級網表進行時序模擬,是引入了邏輯延時時間的模擬。在後模擬階段,模擬的過程中引入了線上和門級的延時,重點是驗證在引入了實際時延之後系統功能是否正確,以避免因時延問題而導致系統時序功能的錯誤。
我們知道,當RTL級功能模擬或FPGA驗證結束之後,傳統的IC設計流程需要完成以下幾次門級模擬:綜合之後的門級模擬、DFT之後的門級模擬、布局布線之後的門級模擬等。如果設計很大或者電路很複雜,往往需要龐大的測試向量來驗證設計的功能及時序是否正確,這就使得我們花費在門級模擬的時間會隨著電路規模的增大而直線上升。
那麼,可不可以用形式驗證(Formal Verification)和靜態時序分析(Static Timing Analysis)來代替動態後模擬呢?讓我們先簡單瞭解一下形式驗證和靜態時序分析。
形式驗證是一種靜態驗證手段,它根據電路結構靜態地判斷兩個設計在功能上是否等價,常用來判斷一個設計在修改前和修改後其功能是否保持一致。它運行時無須測試向量,但是必須有一個參照設計和一個待驗證的設計。參照設計是設計者認為功能上完備無缺的設計,理論上它可以是用進階語言如C,C++實現的,也可以是用整合電路的建模語言SystemC,但就現實而言,多數形式驗證過程中的參照設計就是我們的RTL設計,一般是用verilog或VHDL實現的。
靜態時序分析簡稱STA ,它提供了一種針對大規模門級電路進行時序驗證的有效方法。它只需要根據電路網表的拓撲,就可以檢查電路設計中所有路徑的時序特性,測試路徑的覆蓋率理論上可以達到100%,從而保證時序驗證的完備性;同時由於不需要測試向量,所以STA驗證所需時間遠小於門級模擬的時間。當然,靜態時序分析也有自己的弱點,它只能有效地驗證同步時序電路的正確性,而無法驗證電路功能的正確性,對於大部分設計中可能包含的非同步電路的時序驗證,則必須通過門級模擬來保證其時序的正確性。
對於上面的問題,我們的答案是模論兩可的。
其實不是後仿不需要,只是這可能花的時間太多,所以人們想用形式驗證+STA代替。但是這種方法還是有漏洞的,因為STA只檢查邊沿timing,而形式驗證只看register和combination的抽象功能。後仿在下面三種情況是必要的:非同步邏輯設計部分、ATPG向量驗證和初始化狀態驗證。另外,後仿產生的VCD檔案還可以做功耗分析。
現在通常的策略是:採用形式驗證手段來保證門級網表在功能上與RTL設計保持一致,配合靜態時序分析工具保證門級網表的時序,對於全同步的設計,甚至可以不做門級模擬;對於存在非同步電路的設計,也只需要針對非同步電路進行極少的門級仍真工作。這無疑會加快設計進度,加快產品上市時間。