基于RVM的層次化SoC芯片驗證平臺設計及應用
摘 要:本文以SIM卡控制模塊的功能驗證為例,介紹了運用Synopsys Vera驗證工具以及RVM驗證方法學(xué)快速高效地搭建高質(zhì)量驗證平臺的方法。文中詳細介紹了RVM驗證方法學(xué)以及RVM驗證平臺的結構。
關(guān)鍵詞:RVM;SoC;驗證平臺;可重用性;功能驗證
引言
隨著(zhù)SoC設計日趨復雜,驗證成為SoC設計過(guò)程中最關(guān)鍵的環(huán)節。本文介紹了Synopsys的RVM驗證方法學(xué),采用Vera硬件驗證工具以及OpenVera驗證語(yǔ)言建立目標模型環(huán)境,自動(dòng)生成激勵,完成自核對測試、覆蓋率分析等工作。通過(guò)建立層次化的可重用性驗證平臺,大大提高了驗證工程師的工作效率。文中以一個(gè)SIMC功能模塊的驗證為例,詳細介紹了RVM驗證方法學(xué)在SoC芯片驗證中的應用。
功能驗證
一個(gè)設計被綜合前,首先要對RTL描述進(jìn)行邏輯功能驗證,以確保模塊或芯片的功能正確性。通常,RTL級的功能驗證主要采用自底向上的驗證策略,可分為模塊級驗證和系統級驗證兩個(gè)階段。
傳統驗證方法大多是在信號級的接口上直接與待驗證設計(DUT)通信,即用激勵直接驅動(dòng)DUT的引腳,通過(guò)檢查接口信號的值和變化來(lái)達到驗證設計功能的目的。這種方法的抽象層次較低,驗證平臺的開(kāi)發(fā)與DUT的接口協(xié)議緊密相關(guān),使得驗證平臺的重用性較差。如果要做到一個(gè)驗證平臺可以驗證多個(gè)不同的DUT,必須將驗證平臺的抽象層次提高到事務(wù)級,而且應該構建層次化的結構,層與層之間具有一定的獨立性,改變底層并不會(huì )影響上層。
基于事務(wù)的驗證
所謂事務(wù)(Transaction)是指設計對象與事務(wù)處理器(Transactor)之間通過(guò)接口所做的一次數據傳輸。從硬件的角度來(lái)看,事務(wù)可看成作用在一個(gè)特定接口上的一組信號的集合單元。事務(wù)具有3個(gè)要素:起始時(shí)間、終止時(shí)間,以及所有與這個(gè)事務(wù)相關(guān)的信息。
基于事務(wù)的驗證工具讓用戶(hù)除了可以在信號/引腳級上進(jìn)行驗證,還可以在事務(wù)級上進(jìn)行驗證,從而提高了設計生產(chǎn)率。
基于事務(wù)驗證環(huán)境的基本要素
DUT:待驗證設計對象的RTL描述或門(mén)級描述。
事務(wù):在DUT和事務(wù)處理器之間通過(guò)接口在特定起止時(shí)間內的一次數據傳輸。事務(wù)能夠對信號波形進(jìn)行標識,表示相關(guān)的信號屬性,還可以標識錯誤。
事務(wù)處理器:也叫總線(xiàn)功能模型(BFM)。事物處理器可以表示事務(wù)所代表的信號變化,并與DUT通過(guò)接口進(jìn)行連接。一個(gè)典型的DUT往往具有不同的接口,因此一個(gè)驗證環(huán)境中具有不同的事務(wù)處理器以產(chǎn)生相關(guān)的測試向量對DUT進(jìn)行激勵。
測試例(Testcase):用來(lái)產(chǎn)生驗證DUT特定功能所需要的事務(wù)。
基于事務(wù)的驗證處理過(guò)程
測試例通過(guò)特定的事務(wù)來(lái)調用事務(wù)處理器的任務(wù),事務(wù)處理器按照DUT所遵循的協(xié)議對事務(wù)進(jìn)行處理,經(jīng)過(guò)處理后的事務(wù)通過(guò)連接DUT的接口輸入到DUT中,DUT對輸入的激勵進(jìn)行響應。DUT輸出的響應再轉換為事務(wù)的形式,這樣驗證平臺的自核對模塊就可以在事務(wù)級上對激勵和響應進(jìn)行核對,以檢查DUT的功能是否正確。
RVM層次化驗證方法學(xué)
RVM驗證方法學(xué)是一種層次化的驗證方法學(xué),它能把驗證的步驟分層進(jìn)行,將驗證工作提高到更高的抽象層次,即事務(wù)層。層次化的驗證方法使得驗證工程師只需關(guān)心DUT的輸入/輸出接口,而不必關(guān)心DUT內部的具體實(shí)現。
根據RVM方法學(xué),驗證工程師可以搭建出具有隨機測試、自動(dòng)檢錯核對、功能覆蓋等功能的層次化驗證平臺。這類(lèi)驗證平臺包含很多參考模型,每個(gè)模型可完成不同的功能。在搭建驗證平臺的過(guò)程中,還可以直接調用Synopsys提供的RVM基類(lèi)庫,其中定義了豐富的標準類(lèi)。利用RVM基類(lèi)以及面向對象的技術(shù)可以更方便地生成驗證平臺各個(gè)層次的模塊。
基于RVM的驗證平臺分成5層,每層完成獨立的功能,層與層通過(guò)接口互相連接。RVM驗證模型如圖1所示。
圖 1 RVM層次化驗證模型
信號層
信號層提供驗證平臺與DUT的信號級連接。驗證平臺通過(guò)信號層將上層產(chǎn)生的激勵驅動(dòng)到DUT中。具體實(shí)現時(shí),需要定義驗證平臺與DUT連接的虛端口,當DUT的接口改變時(shí),只需要修改驗證平臺虛端口中的信號,上層模塊不需要修改,方便整個(gè)驗證平臺的重用。
命令層
命令層將信號層的信號抽象為事務(wù),給高層提供DUT的接口與事務(wù)的轉換。命令層主要包括驅動(dòng)器模塊和監視器模塊,與上層模塊通過(guò)事務(wù)級通道連接,與下層模塊通過(guò)虛端口連接。驅動(dòng)器完成對DUT激勵的驅動(dòng)。監視器檢測DUT的輸出,將輸出反饋給上層模塊。
功能層
功能層模擬DUT的基本行為,將DUT的行為抽象為更高一級的事務(wù)。功能層中包括事務(wù)處理器模塊和自核對模塊。事務(wù)處理器模塊根據DUT所遵循的協(xié)議將上層產(chǎn)生的事務(wù)進(jìn)行處理,經(jīng)過(guò)事務(wù)處理器處理的事務(wù)通過(guò)事務(wù)級通道傳給下層。自核對模塊用于對比事務(wù)經(jīng)過(guò)DUT處理之后是否符合協(xié)議的要求,通常用于檢查DUT傳輸數據的正確性。
激勵產(chǎn)生層
激勵產(chǎn)生層用于產(chǎn)生對DUT的激勵事務(wù)。這一層包括產(chǎn)生器模塊,該模塊產(chǎn)生一系列的事務(wù)對象,通過(guò)事務(wù)級通道傳輸給下層。RVM支持兩種產(chǎn)生器: Atomic產(chǎn)生器,用于產(chǎn)生一組相似的事務(wù)對象; Scenario產(chǎn)生器,用于產(chǎn)生順序可控制的事務(wù)對象。
測試層
測試層用于對DUT的邏輯功能進(jìn)行驗證。這一層主要是用戶(hù)為了驗證DUT的邏輯功能而編寫(xiě)的不同測試例,在測試例中可以對各個(gè)模塊的限制條件進(jìn)行修改。通過(guò)對不同測試例運行結果的統計,可以查看DUT的功能覆蓋率,只有功能覆蓋率達到一定要求,才能夠認為該DUT已經(jīng)被完備的驗證通過(guò)。
SIMC模塊的功能驗證
SIMC是SIM卡控制器的簡(jiǎn)稱(chēng),通過(guò)SIMC可以在手機基帶處理芯片上外接SIM卡,實(shí)現數據的發(fā)送和接收。SIMC模塊連接在系統的APB總線(xiàn)上,ARM微控制器通過(guò)APB總線(xiàn)對SIMC進(jìn)行訪(fǎng)問(wèn)。該模塊主要包括波特率產(chǎn)生部分、接收數據的串并轉換部分、發(fā)送數據的并串轉換部分、發(fā)送FIFO的控制部分、接收FIFO的控制部分等。發(fā)送數據時(shí),SIMC模塊會(huì )將發(fā)送數據寄存器的數據先放到發(fā)送FIFO中,再將FIFO中的數據發(fā)送出去;接收數據時(shí),SIMC模塊將接收到的數據放到接收FIFO中,再由處理器從接收數據寄存器中讀取數據。如果接收數據后,判斷校驗位或停止位出錯,則數據不會(huì )被放入接收FIFO中,SIMC模塊的狀態(tài)寄存器會(huì )有相應的指示。
本文將以一款基帶處理芯片的SIMC為例,詳細介紹RVM驗證方法學(xué)的應用。其中DUT的RTL代碼用Verilog編寫(xiě),驗證平臺的代碼用OpenVera編寫(xiě)。OpenVera語(yǔ)言是一種新型的高階驗證語(yǔ)言(HLV)。用OpenVera編寫(xiě)的代碼中調用了RVM的基類(lèi)和庫函數,充分應用了面向對象技術(shù)。
SIMC模塊的RVM分層驗證平臺結構
SIMC模塊的驗證平臺利用Synopsys公司Vera驗證工具搭建,驗證平臺的搭建遵循RVM驗證方法學(xué),代碼的編寫(xiě)過(guò)程調用了RVM基類(lèi)庫。SIMC模塊驗證平臺結構如圖2所示。
圖 2 SIMC模塊RVM層次化驗證模型
信號層
信號層包括定義的虛端口,用于和SIMC模塊RTL代碼的接口相連。首先定義一個(gè)interface變量,該變量中定義的接口對應于SIMC模塊的接口信號,interface變量的定義語(yǔ)句中用hdl_node關(guān)鍵字和RTL代碼的接口信號相連。定義的虛端口再和interface中的信號綁定。
命令層
命令層包括ARM端的驅動(dòng)器和監視器、SIM卡端的驅動(dòng)器和監視器。ARM端的驅動(dòng)器模仿APB總線(xiàn),按照協(xié)議的規定對DUT進(jìn)行驅動(dòng),SIM卡端的驅動(dòng)器模仿一個(gè)SIM卡對DUT進(jìn)行驅動(dòng)。兩端的監視器檢測DUT的輸出數據和驅動(dòng)到DUT中的數據,將數據保存在自核對模塊中進(jìn)行比較,通過(guò)比較來(lái)檢查DUT傳輸數據是否正確。
編程實(shí)現時(shí),可以通過(guò)繼承RVM基類(lèi)庫中的rvm_xactor類(lèi)得到所需要的子類(lèi),在子類(lèi)的代碼中加入需要實(shí)現的功能。
功能層
功能層包括將SIM卡事務(wù)轉化為ARM事務(wù)的事務(wù)處理器、實(shí)現中斷服務(wù)功能的事務(wù)處理器、自核對模塊。編程實(shí)現時(shí),事務(wù)處理器可以通過(guò)繼承RVM基類(lèi)庫中的rvm_xactor得到,在子類(lèi)的代碼中加入需要實(shí)現的功能。自核對模塊用于比較DUT的激勵和響應是否符合要求。
激勵產(chǎn)生層
激勵產(chǎn)生層包括兩個(gè)Atomic產(chǎn)生器,兩個(gè)產(chǎn)生器是同一個(gè)類(lèi)的兩個(gè)對象。產(chǎn)生器為DUT產(chǎn)生隨機激勵,激勵封裝在一個(gè)事務(wù)中,通過(guò)事務(wù)通道傳到下層模塊中。兩端的產(chǎn)生器都是產(chǎn)生SIM卡事務(wù)的,ARM端有一個(gè)將SIM卡事務(wù)轉化為ARM事務(wù)的事務(wù)處理器來(lái)完成SIM卡事務(wù)向ARM事務(wù)的轉化。通過(guò)產(chǎn)生器可以隨機產(chǎn)生符合協(xié)議規范的激勵。編寫(xiě)代碼時(shí),產(chǎn)生器可以通過(guò)調用RVM的宏rvm_atomic_gen很方便地實(shí)現。
測試層
在測試層,用戶(hù)可以編寫(xiě)不同的測試例對DUT的功能進(jìn)行驗證。在測試例中,通過(guò)對約束的限制、環(huán)境類(lèi)的例化、配置類(lèi)的約束來(lái)實(shí)現對DUT的功能覆蓋,以達到100%的功能覆蓋率。
驗證平臺的重用
對單個(gè)模塊驗證完畢之后可以進(jìn)行系統級的驗證。根據RVM驗證方法學(xué)搭建的層次化驗證平臺可以被重用到系統級的驗證中。系統級驗證側重于檢查各模塊間的接口和數據交互是否符合設計規范,某些模塊級驗證的模塊可以被復用到系統級驗證中。對SIMC模塊來(lái)說(shuō),系統級驗證時(shí),ARM端的驅動(dòng)器、監視器以及激勵產(chǎn)生器都可以被APB總線(xiàn)代替,SIM卡端的各模塊可以繼續使用,達到重用的目的。
應用RVM驗證方法的注意事項與技巧
RVM驗證方法學(xué)由Synopsys公司提出,利用RVM驗證方法學(xué)首選的編程語(yǔ)言是OpenVera硬件驗證語(yǔ)言。筆者在應用RVM驗證方法學(xué)搭建驗證平臺過(guò)程中的一些技巧和注意事項歸納如下:
1、 驗證某個(gè)模塊前,首先要閱讀相關(guān)文檔,熟悉模塊的功能特性,然后搭建驗證平臺的基本框圖,選擇RVM的相關(guān)技術(shù),在驗證平臺基本框圖指導下編程實(shí)現。
2、 驗證平臺中功能覆蓋點(diǎn)的定義是驗證成敗的關(guān)鍵,驗證過(guò)程中利用RVM的覆蓋率驅動(dòng)技術(shù),分析所定義的覆蓋點(diǎn)的覆蓋情況,改善該驗證平臺,每個(gè)功能覆蓋點(diǎn)都必須被覆蓋到。
3、 RVM基類(lèi)庫提供了豐富的函數,但是Synopsys沒(méi)有開(kāi)放RVM基類(lèi)的源代碼,所以驗證代碼的編寫(xiě)過(guò)程中應隨時(shí)查閱RVM文檔,盡量使用RVM基類(lèi)提供的函數,而不是自己去重新開(kāi)發(fā)一個(gè)函數。
4、 RVM驗證平臺中各個(gè)模塊之間通信有很多種方法,可以用RVM的callbacks類(lèi),也可以使用雙通道等。
5、 RVM為驗證平臺中的進(jìn)程間通信提供了多種數據結構,例如semaphore、region、mailbox等,編程時(shí)應根據需要進(jìn)行選擇。 例如,在某一時(shí)刻有多個(gè)并行的進(jìn)程對同一個(gè)信號進(jìn)行驅動(dòng),仿真工具會(huì )停止仿真并打印出錯信息。解決的方法是應用semaphores數據結構,每個(gè)進(jìn)程得到semaphore才可以驅動(dòng)信號,對信號驅動(dòng)后再釋放semaphore供其他進(jìn)程使用。
6、 如果要打印信息,應使用rvm_log類(lèi)而不是printf()函數。rvm_log類(lèi)除了將信息打印出來(lái),還可以顯示出信息來(lái)源于驗證平臺中的哪個(gè)模塊以及該模塊的仿真時(shí)間,便于編程人員調試代碼。
7、 隨機激勵的產(chǎn)生不是真正意義上的隨機,而是一種偽隨機。編程人員在多次運行同一個(gè)測試例時(shí)應改變驗證平臺的隨機種子,可通過(guò)調用srandom()函數來(lái)實(shí)現。
結語(yǔ)
用RVM驗證方法學(xué)搭建的層次化驗證平臺將大大提高驗證環(huán)境的執行效率。RVM驗證方法學(xué)中的隨機測試技術(shù)可以在很短的時(shí)間內達到更高的功能覆蓋率,提高驗證工程師的工作效率,達到有效縮短驗證周期的目的。
參考文獻
1.[美]PeterPaterson.系統芯片(SOC)驗證方法與技術(shù)[M].孫海平,丁健譯.北京:電子工業(yè)出版社,2005. 16~20
2.張亞楠,申敏,游敏惠.基于RVM的可重用測試方法及應用[J].重慶郵電學(xué)院學(xué)報, 2006,18(3):303~306
2.Synopsys Inc. Reference Verification Methodology User Guild.http://www.synopsys.com/
評論