形式驗證與斷言驗證
斷言與覆蓋性質之覆蓋率(Assertion & Cover-Property Coverage)
一條從不失敗的斷言令人安心——但它可能以沉默撒謊。若它所守護的情境在測試中從未真正發生,通過的斷言什麼也證明不了。這正是每條斷言都有夥伴的原因:「覆蓋性質(cover property)」。斷言說「這必須永遠為真」,覆蓋性質則說「請確保這個有趣的情況真的發生過」,例如「對同一位址的寫入與讀取相撞」。覆蓋率工具統計哪些覆蓋性質被命中,揭露那些從未受測的沉默斷言。
在模擬中,覆蓋性質量度你的隨機激勵是否觸及斷言所描述的角落案例——一條覆蓋率 0% 的斷言,是隻從沒遇過闖入者的看門狗。在形式驗證中,同一覆蓋性質更為強大:工具會嘗試「生成」一段抵達該情境的輸入序列;若它證明該情境「不可達」,往往就揭露了死邏輯或過度約束的環境。達成完整的斷言與覆蓋收斂——每條斷言皆獲證明、每個有意義的情境皆證實可達——是驗證簽核的關鍵里程碑。
cover property (@(posedge clk) wr && rd && (wr_addr == rd_addr));
一種常見的虛假安全感:測試平台回報「所有斷言皆通過」,但其中半數其實從未觸發,因為激勵從未造出它們的前提條件。務必在檢視斷言通過的同時檢查覆蓋性質的命中——空洞通過比沒有斷言更糟,因為它哄騙了你。
又稱
另見