[SV]使用斷言(Assertion)的優點

                           使用斷言(Assertion)的優點

 

        朋友們,這次我決定寫關於斷言的文章。我個人認爲斷言是非常方便和非常有用的資產,當我們談論功能驗證時,即在給定的RTL設計中發現缺陷;確保驗證完整性。它是一種令人驚歎的驗證技術,用較少的代碼提供瞭如此多的好處。如果你閱讀了我之前關於斷言的文章《關於斷言的基礎知識》,我們在這裏討論了一個斷言示例,並與相應的Verilog代碼進行了比較。在這裏,讓我們討論將斷言作爲驗證過程的一部分的其他許多優點。

 

一、斷言有助於縮短調試時間

        在一個典型的設計中,我們有狀態元素,如Flops, Combo logic, fifo(先進先出),FSM(有限狀態機),計數器等。如果我們假設這個設計包含典型設計通常具有的RTL缺陷,那麼我們對主要輸入應用刺激,並觀察主要輸出的響應。假設測試失敗,我們通常會怎麼做?我們開始調試意味着從主要輸出開始進行回溯跟蹤。我們需要繼續深入設計,直到找到失敗的根本原因。最後,我們解決了問題,但要找到問題的根源需要很長時間。這種方法通常被稱爲黑盒測試,但重要的是,可觀察性在這種方法中也是黑盒測試。

        現在讓我們假設,我們在設計中圍繞不同的邏輯元素插入斷言,並且在模擬期間斷言失敗。通過斷言,可以直接在源代碼中觀察到內部錯誤的根本原因。仿真時間。因此,插入斷言之後,我們可以說我們現在正在使用白盒可觀察性進行黑盒測試。這裏的底線是斷言可以幫助改進設計內部的可觀察性,從而縮短調試時間。

 

二、斷言有助於縮短覆蓋的時間

        在我們的設計中,我們想要確保所有的空間和時間條件都被提供的刺激所覆蓋或運用,並且事物都按照設計的規範運行。斷言覆蓋特性有助於提供關於各種設計元素(如fifo、FSMs、計數器)的報告或覆蓋狀態。此外,對於主要輸入、主要輸出和模塊間通信的臨時行爲需求,cover也非常有用。

 2.1、讓我們舉一個例子來說明cover是如何有用的:

        讓我們假設我們爲FIFO full條件編寫了一個斷言,但是對於當前的一組刺激,這個斷言永遠不會觸發。我們可以假設一切正常,因爲在模擬日誌文件中沒有斷言失敗。但是,如果所提供的刺激從未觸發FIFO full條件,情況又會如何呢?在這種情況下,分析斷言覆蓋特性生成的報告將向我們展示給定刺激所覆蓋的內容和未覆蓋的內容。它肯定會幫助我們縮短時間,以涵蓋設計的所有預期場景。

 

三、對跨時鐘域(CDC)邏輯的斷言支持

        現在,我們幾乎找不到單時鐘的設計,大多數今天的設計是基於多時鐘域的。當跨越不同的時鐘域時,使用多個時鐘斷言屬性對於數據完整性檢查非常有幫助。

 

四、斷言可重用性

       如果在開發斷言時考慮到意圖,那麼斷言可以在多個項目中重用。衆所周知,可重用性是節省時間和精力的一個重要因素。爲未來項目而努力。可以通過以下兩種方式編寫斷言,以提高斷言的可重用性:

       第一種方法是儘可能地實現參數化斷言。如果使用參數化,現在爲16位總線編寫的斷言可以在將來的設計中爲32位總線重用。

       第二種方法是在RTL設計之外實現斷言模型,並將其作爲單獨的實體進行維護。可以很容易地將這些斷言(使用bind特性)綁定到RTL,使設計和斷言代碼保持分離。它易於維護,最重要的是,如果使用適當的指導方針進行編碼,它是可重用的。

 

五、斷言總是打開的

       這意味着除非我們關閉斷言,否則斷言總是活動的。我們在測試套件中添加的測試用例或創建的新刺激配置越多,活動斷言就總是能夠監視針對新刺激的設計行爲。

 

六、斷言與仿真/加速度

       由於斷言合成現在已經成熟,這意味着斷言在模擬期間非常有用。由於我們知道DUT被放置在仿真盒內的硅上,因此相關的斷言也可以隨着設計一起放置在仿真盒內。有了這種支持,在模擬運行中,與模擬相比運行得非常快,通常需要大量時間的調試可以更快地完成。

 

七、斷言支持全局嚴重性級別

        斷言支持全局嚴重性級別,例如$error、$fatal、$warning等。因此,它有助於在模擬中維護統一的錯誤報告機制或結構。

 

 

八、斷言支持全局打開/關閉

       斷言支持全局打開/關閉機制,例如$dumpon/$dumpoff。它有助於以一種更簡單的方式維護代碼,而不是用開/關條件包裝每個斷言。

 

九、斷言對於靜態形式驗證非常有用

       現在,天靜態形式驗證日益流行。斷言是關鍵元素,它定義了作爲正式驗證技術一部分的設計的假設和預期行爲。

       靜態形式驗證不需要像在仿真中那樣在設計的主要輸入端應用任何動態向量,但是EDA工具的內部算法生成內部流量來檢查包含的斷言。確保設計的正確性。由於形式驗證是對從邏輯錐中導出的代數方程進行的,因此邏輯錐中可能有許多輸入,這些輸入可能具有已知值,例如1或0。這些已知的值是使用斷言assume特性分配的,這樣,正式的工具執行輸入時的排列和組合就會更少,並通過有意義的努力產生建設性的結果。

 

十、一種語言和多種用法

       斷言又稱爲SVA (SystemVerilog斷言)是這樣一種語言,它以多種方式爲設計的驗證方面做出貢獻。斷言斷言功能通過設計檢查和形式化驗證(沒有動態向量的技術)工作,斷言覆蓋功能支持功能性覆蓋檢查,並假設功能滿足用於形式化驗證的設計約束。

       它清楚地表明,SVA是一種語言,它在支持約束隨機驗證(CRV)、靜態形式驗證(SFV)和仿真/加速方面具有許多方面和優點。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章