南京航空航天大學(xué) 范仁艷
中國科學(xué)院計算技術(shù)研究所 支 天
驗證是集成電路設(shè)計過程中的重要環(huán)節(jié),目的是為了發(fā)現(xiàn)設(shè)計缺陷。驗證周期和驗證對象的復(fù)雜性成正比。在保證驗證質(zhì)量的前提下,驗證效率也是驗證的重要指標。在基于UVM的傳統(tǒng)驗證環(huán)境中,driver、monitor、scoreboard等組件存在大量冗余重復(fù)代碼,編碼效率低,不易維護和管理,可復(fù)用性差,從而影響驗證效率。針對此問題,在UVM環(huán)境框架基礎(chǔ)之上,提出一種驗證接口封裝方法,達到一份代碼多方復(fù)用的效果,提高驗證效率。
集成電路IC(Integrated circuit)前端的開發(fā)通常是一個非常漫長的過程,需要經(jīng)過前期的市場調(diào)研,中間的規(guī)格制定、方案開發(fā),最后的代碼設(shè)計等眾多環(huán)節(jié)。驗證是保證設(shè)計代碼和最初的需求可以正確匹配的重要手段。驗證的目的是為了發(fā)現(xiàn)設(shè)計代碼的所有缺陷。
質(zhì)量和效率是驗證需要兼顧的兩個重要指標。驗證質(zhì)量可由驗證結(jié)束后是否存在遺漏缺陷衡量,驗證效率體現(xiàn)在完成一次驗證花費的時間。如何在保證驗證質(zhì)量的前提下,盡可能的提高驗證效率是一個驗證過程中需要持續(xù)解決的難題。驗證的質(zhì)量和效率體現(xiàn)在驗證的各個環(huán)節(jié)中,驗證的大致流程是:
(1)閱讀學(xué)習(xí)設(shè)計人員提供的設(shè)計文檔,進行提煉總結(jié),輸出驗證功能點列表。功能點列表是否完備很大程度上決定了驗證質(zhì)量。
(2)輸出驗證方案,主要包含驗證環(huán)境的框架結(jié)構(gòu),激勵、參考模型的實現(xiàn)方式,檢查機制等等。驗證方案是搭建驗證環(huán)境的重要參考,會直接影響驗證效率。
(3)搭建驗證環(huán)境,主要涉及各個組件的編碼。
(4)構(gòu)造驗證用例,逐一進行驗證用例的驗證調(diào)試至所有用例驗證通過。
以上過程中,“驗證環(huán)境的搭建”占據(jù)了驗證人員的編碼時間的大部分時間。圖1所示是基于UVM方法學(xué)的驗證平臺框圖,從圖中可看出,驗證環(huán)境ENV(environment)中主要包含SQR(sequencer)、DRV(driver)、MON(monitor)、REF(reference model)以及SCB(scoreboard)等關(guān)鍵組件。SQR用于發(fā)送激勵至DRV;DRV和MON是直接和待驗設(shè)計DUV(Design Under Verification)交互的組件,DRV用于驅(qū)動激勵至DUV,MON用于采樣DUV輸入接口和輸出接口的數(shù)據(jù),分為輸入MON和輸出MON;輸入MON采樣DUV輸入數(shù)據(jù)送至REF做運算,運算結(jié)果送至SCB和輸出MON采樣得到的DUV輸出結(jié)果進行比較。
圖1 UVM驗證框架圖
表1 常見UVM主要編碼示例
表2 常見UVM主要編碼示例
使用UVM驗證框架搭建驗證環(huán)境,存在兩個效率問題。
對于不同的DUV的驗證,都需要重新搭建環(huán)境,且需要在每個驗證環(huán)境中編碼所有組件,整體編碼效率低。實際上,整個驗證環(huán)境中,除去REF需要根據(jù)不同的DUV進行適配,其余所有組件在不同的驗證環(huán)境中都是承載相同的功能,編碼極其類似。表1展示了對于兩個不同的DUV各個組件的主要職責(zé),其中DUV1的接口1、2、3為輸入接口;接口4、5為輸出接口;DUV2的接口1、2為輸入接口;接口3、4、5為輸出接口。從表中看出,對于DRV、MON和SCB三個組件,主要職責(zé)完全一樣,僅僅是交互的接口對象及數(shù)量不一樣。
在單個驗證環(huán)境中,DRV、MON、SCB三個組件同樣存在大量功能和編碼相似的“重復(fù)”代碼,導(dǎo)致單個組件編碼效率低,可維護性以及簡潔性差。表2列出的對于DUV1三個組件的偽碼情況證實了這一點。
為了解決上一章節(jié)的兩個問題,提出一種基于UVM的驗證接口封裝方法IFP(Interface Package),該方法將驗證環(huán)境中功能以及編碼類似的組件進行封裝,可大幅度提高單組件的可維護性、可靠性、可復(fù)用性,進而提高整體驗證環(huán)境的編碼效率。
IFP主要包含兩部分內(nèi)容,第一部分是將與DUV交互的DRV、MON以及SQR組件封裝成一個單元agent。其中和驅(qū)動相關(guān)的行為均定義在DRV;和采樣相關(guān)的行為均定義在MON;SQR負責(zé)和DRV交互。單個agent支持兩種模式。一種是驅(qū)動模式,另一種是采樣模式。對于DUV的輸入接口,例化agent之后,配置模式為驅(qū)動模式。若agent工作在驅(qū)動模式下,agent例化SQR,DRV和MON,DRV從SQR中獲取事務(wù)型激勵,DRV將激勵驅(qū)動至DUV,MON采樣DUV輸入接口數(shù)據(jù)存儲在agent的內(nèi)部的輸出端口output_port。對于DUV的輸出端口,例化agent之后,配置模式為采樣模式。若agent工作在采樣模式下,agent只例化MON,MON采樣輸出接口的數(shù)據(jù),存儲至內(nèi)部的output_port;同時agent會例化一個應(yīng)答模塊rdy_model,用于響應(yīng)輸出接口。所有響應(yīng)模式均在rdy_model定義。第二部分是將所有比較規(guī)則與模式封裝成一個SCB,SCB例化在驗證環(huán)境中,一組輸出接口和一個SCB對應(yīng),例化時指定這組接口的比較模式即可。
圖2 兩個模塊簡易交互圖
圖2顯示的是兩個模塊A、B常見的簡易交互方式。模塊A輸出兩組數(shù)據(jù)if0和if1至模塊B,模塊B處理之后,返回兩組結(jié)果if2、if3至模塊A。對于模塊B來說,若是基于UVM搭建驗證環(huán)境,環(huán)境框圖如圖1所示。ENV中例化REF、SCB、in_agent、out_agent,in_agent中例化SQR、DRV、MON;out_agent例化MON。激勵生成器將產(chǎn)生的激勵發(fā)送至SQR,DRV從SQR中取得激勵驅(qū)動至所有的輸入接口;in_agent的MON為輸入MON,out_agent的MON為輸出MON,作用如前一章節(jié)介紹。SCB收集所有的REF的運算結(jié)果和DUV的運算結(jié)果,分別進行比較,輸出比較結(jié)果。若是使用IFP方法,模塊B搭建出來的驗證環(huán)境如圖3所示。該環(huán)境中例化了4份IFP、將4組接口信息作為參數(shù)分別傳遞至4份IFP,便可實現(xiàn)環(huán)境與DUT的所有交互。其中接口0、1設(shè)置的是驅(qū)動模式,接口2、3設(shè)置的是采樣模式。環(huán)境中還例化了兩個SCB,分別用于比較接口2、3。
圖3 IFP驗證環(huán)境框架圖
對比兩個環(huán)境,UVM環(huán)境DRV、MON、SCB中因為涉及多組接口驅(qū)動、采樣、比較,存在大量的類似重復(fù)代碼。在IFP環(huán)境中,通過定義一份IFP,之后在ENV中例化多份,然后參數(shù)傳遞接口信息的方式實現(xiàn)了一份代碼多次復(fù)用的效果,大大提高了環(huán)境的簡潔程度,提高了可維護性、編碼效率。若再考慮模塊A的環(huán)境,模塊B的環(huán)境定義好的IFP可繼續(xù)在模塊A中使用,設(shè)置成不同的模式即可。對于接口1和接口2,模塊A為采樣模式,模塊B為驅(qū)動模式;對于接口2和接口3,模塊A是驅(qū)動模式,模塊B則設(shè)置成采樣模式。實現(xiàn)了一個IFP兩個環(huán)境共用的目的,提高了代碼的重用率的同時,也提升了編碼效率。
在基于UVM的驗證框架中,單個驗證環(huán)境中的DRV、MON、SCB等組件代碼繁雜冗余,不易維護,編碼效率低;多個驗證環(huán)境之間的以上組件同樣功能相似,編碼相似。為了提高所有驗證環(huán)境的整體編碼效率,提出了一種接口封裝方法IFP,可大幅度提高驗證環(huán)境的可復(fù)用性,便于維護和管理。