南京航空航天大學 范仁艷
中國科學院計算技術研究所 支 天
驗證是集成電路設計過程中的重要環節,目的是為了發現設計缺陷。驗證周期和驗證對象的復雜性成正比。在保證驗證質量的前提下,驗證效率也是驗證的重要指標。在基于UVM的傳統驗證環境中,driver、monitor、scoreboard等組件存在大量冗余重復代碼,編碼效率低,不易維護和管理,可復用性差,從而影響驗證效率。針對此問題,在UVM環境框架基礎之上,提出一種驗證接口封裝方法,達到一份代碼多方復用的效果,提高驗證效率。
集成電路IC(Integrated circuit)前端的開發通常是一個非常漫長的過程,需要經過前期的市場調研,中間的規格制定、方案開發,最后的代碼設計等眾多環節。驗證是保證設計代碼和最初的需求可以正確匹配的重要手段。驗證的目的是為了發現設計代碼的所有缺陷。
質量和效率是驗證需要兼顧的兩個重要指標。驗證質量可由驗證結束后是否存在遺漏缺陷衡量,驗證效率體現在完成一次驗證花費的時間。如何在保證驗證質量的前提下,盡可能的提高驗證效率是一個驗證過程中需要持續解決的難題。驗證的質量和效率體現在驗證的各個環節中,驗證的大致流程是:
(1)閱讀學習設計人員提供的設計文檔,進行提煉總結,輸出驗證功能點列表。功能點列表是否完備很大程度上決定了驗證質量。
(2)輸出驗證方案,主要包含驗證環境的框架結構,激勵、參考模型的實現方式,檢查機制等等。驗證方案是搭建驗證環境的重要參考,會直接影響驗證效率。
(3)搭建驗證環境,主要涉及各個組件的編碼。
(4)構造驗證用例,逐一進行驗證用例的驗證調試至所有用例驗證通過。
以上過程中,“驗證環境的搭建”占據了驗證人員的編碼時間的大部分時間。圖1所示是基于UVM方法學的驗證平臺框圖,從圖中可看出,驗證環境ENV(environment)中主要包含SQR(sequencer)、DRV(driver)、MON(monitor)、REF(reference model)以及SCB(scoreboard)等關鍵組件。SQR用于發送激勵至DRV;DRV和MON是直接和待驗設計DUV(Design Under Verification)交互的組件,DRV用于驅動激勵至DUV,MON用于采樣DUV輸入接口和輸出接口的數據,分為輸入MON和輸出MON;輸入MON采樣DUV輸入數據送至REF做運算,運算結果送至SCB和輸出MON采樣得到的DUV輸出結果進行比較。

圖1 UVM驗證框架圖

表1 常見UVM主要編碼示例

表2 常見UVM主要編碼示例
使用UVM驗證框架搭建驗證環境,存在兩個效率問題。
對于不同的DUV的驗證,都需要重新搭建環境,且需要在每個驗證環境中編碼所有組件,整體編碼效率低。實際上,整個驗證環境中,除去REF需要根據不同的DUV進行適配,其余所有組件在不同的驗證環境中都是承載相同的功能,編碼極其類似。表1展示了對于兩個不同的DUV各個組件的主要職責,其中DUV1的接口1、2、3為輸入接口;接口4、5為輸出接口;DUV2的接口1、2為輸入接口;接口3、4、5為輸出接口。從表中看出,對于DRV、MON和SCB三個組件,主要職責完全一樣,僅僅是交互的接口對象及數量不一樣。
在單個驗證環境中,DRV、MON、SCB三個組件同樣存在大量功能和編碼相似的“重復”代碼,導致單個組件編碼效率低,可維護性以及簡潔性差。表2列出的對于DUV1三個組件的偽碼情況證實了這一點。
為了解決上一章節的兩個問題,提出一種基于UVM的驗證接口封裝方法IFP(Interface Package),該方法將驗證環境中功能以及編碼類似的組件進行封裝,可大幅度提高單組件的可維護性、可靠性、可復用性,進而提高整體驗證環境的編碼效率。
IFP主要包含兩部分內容,第一部分是將與DUV交互的DRV、MON以及SQR組件封裝成一個單元agent。其中和驅動相關的行為均定義在DRV;和采樣相關的行為均定義在MON;SQR負責和DRV交互。單個agent支持兩種模式。一種是驅動模式,另一種是采樣模式。對于DUV的輸入接口,例化agent之后,配置模式為驅動模式。若agent工作在驅動模式下,agent例化SQR,DRV和MON,DRV從SQR中獲取事務型激勵,DRV將激勵驅動至DUV,MON采樣DUV輸入接口數據存儲在agent的內部的輸出端口output_port。對于DUV的輸出端口,例化agent之后,配置模式為采樣模式。若agent工作在采樣模式下,agent只例化MON,MON采樣輸出接口的數據,存儲至內部的output_port;同時agent會例化一個應答模塊rdy_model,用于響應輸出接口。所有響應模式均在rdy_model定義。第二部分是將所有比較規則與模式封裝成一個SCB,SCB例化在驗證環境中,一組輸出接口和一個SCB對應,例化時指定這組接口的比較模式即可。

圖2 兩個模塊簡易交互圖
圖2顯示的是兩個模塊A、B常見的簡易交互方式。模塊A輸出兩組數據if0和if1至模塊B,模塊B處理之后,返回兩組結果if2、if3至模塊A。對于模塊B來說,若是基于UVM搭建驗證環境,環境框圖如圖1所示。ENV中例化REF、SCB、in_agent、out_agent,in_agent中例化SQR、DRV、MON;out_agent例化MON。激勵生成器將產生的激勵發送至SQR,DRV從SQR中取得激勵驅動至所有的輸入接口;in_agent的MON為輸入MON,out_agent的MON為輸出MON,作用如前一章節介紹。SCB收集所有的REF的運算結果和DUV的運算結果,分別進行比較,輸出比較結果。若是使用IFP方法,模塊B搭建出來的驗證環境如圖3所示。該環境中例化了4份IFP、將4組接口信息作為參數分別傳遞至4份IFP,便可實現環境與DUT的所有交互。其中接口0、1設置的是驅動模式,接口2、3設置的是采樣模式。環境中還例化了兩個SCB,分別用于比較接口2、3。

圖3 IFP驗證環境框架圖
對比兩個環境,UVM環境DRV、MON、SCB中因為涉及多組接口驅動、采樣、比較,存在大量的類似重復代碼。在IFP環境中,通過定義一份IFP,之后在ENV中例化多份,然后參數傳遞接口信息的方式實現了一份代碼多次復用的效果,大大提高了環境的簡潔程度,提高了可維護性、編碼效率。若再考慮模塊A的環境,模塊B的環境定義好的IFP可繼續在模塊A中使用,設置成不同的模式即可。對于接口1和接口2,模塊A為采樣模式,模塊B為驅動模式;對于接口2和接口3,模塊A是驅動模式,模塊B則設置成采樣模式。實現了一個IFP兩個環境共用的目的,提高了代碼的重用率的同時,也提升了編碼效率。
在基于UVM的驗證框架中,單個驗證環境中的DRV、MON、SCB等組件代碼繁雜冗余,不易維護,編碼效率低;多個驗證環境之間的以上組件同樣功能相似,編碼相似。為了提高所有驗證環境的整體編碼效率,提出了一種接口封裝方法IFP,可大幅度提高驗證環境的可復用性,便于維護和管理。