天天看點

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和靜态形式(功能)驗證

12.1 ‘expect’

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和靜态形式(功能)驗證

                                                       圖12.1'expect'-基礎

 'expect'在程式塊中與'assert'具有相同的文法(而不是語義)。請注意,'expect'隻能在程式塊中使用。它不能像assert / property / sequence那樣在程式塊之外使用,但要記住,'assert'既可以在過程塊中使用,也可以在外部使用。那麼,'assert'和'expect'之間有什麼差別?

 'expect'是一個阻塞語句,而'assert'是一個非阻塞語句。阻塞意味着程式塊将等待'expect'序列完成(通過或失敗)。對于'assert'非阻塞意味着過程塊将觸發'assert'語句并繼續塊中的下一個語句。 “斷言”狀态将繼續與程式代碼并行執行。請注意,無論是在程式塊外還是在程式塊内,“assert”行為都是相同的。它總是在其自己的線程上與其餘的邏輯并行執行。

請參考圖12.1中的仿真日志。您注意到程式代碼等待“expect”完成(即阻止程式代碼的執行),并且隻有在完成'expect'時才執行後續的$display。圖12.2強調了“expect”語義的進一步細微差别。圖中的注釋是不言自明的。關鍵在于'expect'不會從前面的程式時鐘繼承時鐘。在它所期望的序列(或屬性)中需要一個明确的時鐘或者有自己聲明。

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和靜态形式(功能)驗證

                                                      圖12.2'expect'-錯誤條件

 12.2 'assume'和靜态形式(功能)驗證

第12章 ‘expect’和‘assume’12.1 ‘expect’ 12.2 'assume'和靜态形式(功能)驗證

                                                   圖12.3 'assume'和形式驗證

 這是一個有趣的運算符。 “assume”将屬性指定為環境的假設。什麼是環境? “假設”最有用的“環境”是靜态形式驗證。靜态形式是一種方法,通過這種方法,形式化算法可以執行輸入的所有可能的組合和順序可能性,以執行給定邏輯塊的所有可能的“邏輯錐”并檢查斷言是否成立。如果您沒有指定任何限制條件(例如對于5個輸入(a,b,c,d,e)塊),則在此類驗證期間,如果您未指定任何限制條件,如'assume'a = 0且b = 1)那麼靜态形式工具将嘗試在組合和時間(如果需要)域中探索5個輸入的所有可能組合。沒有任何通過“assume”提供的限制,靜态正式工具可能會遇到一種叫做“狀态空間爆炸”的情況。正如描述所暗示的,如果太多的輸入不受限制,工具可能會放棄。這就是'assume'陳述的出處。

那麼,它在仿真中的如何運作呢?圖12.3中的例子簡單地表明,如果屬性沒有‘assume’與之關聯,那麼它将像'斷言'一樣行事。如果與‘assune’關聯的屬性被發現為假,則仿真失敗。