新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > RVM驗證方法學(xué)在SoC芯片驗證中的應(yīng)用

RVM驗證方法學(xué)在SoC芯片驗證中的應(yīng)用

作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

引言

本文引用地址:http://2s4d.com/article/201706/349101.htm

  隨著SoC設(shè)計日趨復(fù)雜,驗證成為SoC設(shè)計過程中最關(guān)鍵的環(huán)節(jié)。本文介紹了Synopsys的,采用Vera硬件驗證工具以及建立目標(biāo)模型環(huán)境,自動生成激勵,完成自核對測試、覆蓋率分析等工作。通過建立層次化的可重用性驗證平臺,大大提高了驗證工程師的工作效率。文中以一個SIMC功能模塊的驗證為例,詳細(xì)介紹了在SoC芯片驗證中的應(yīng)用。

功能驗證

  一個設(shè)計被綜合前,首先要對RTL描述進(jìn)行邏輯功能驗證,以確保模塊或芯片的功能正確性。通常,RTL級的功能驗證主要采用自底向上的驗證策略,可分為模塊級驗證和系統(tǒng)級驗證兩個階段。

  傳統(tǒng)驗證方法大多是在信號級的接口上直接與待驗證設(shè)計(DUT)通信,即用激勵直接驅(qū)動DUT的引腳,通過檢查接口信號的值和變化來達(dá)到驗證設(shè)計功能的目的。這種方法的抽象層次較低,驗證平臺的開發(fā)與DUT的接口協(xié)議緊密相關(guān),使得驗證平臺的重用性較差。如果要做到一個驗證平臺可以驗證多個不同的DUT,必須將驗證平臺的抽象層次提高到事務(wù)級,而且應(yīng)該構(gòu)建層次化的結(jié)構(gòu),層與層之間具有一定的獨(dú)立性,改變底層并不會影響上層。

  基于事務(wù)的驗證

  所謂事務(wù)(Transaction)是指設(shè)計對象與事務(wù)處理器(Transactor)之間通過接口所做的一次數(shù)據(jù)傳輸。從硬件的角度來看,事務(wù)可看成作用在一個特定接口上的一組信號的集合單元。事務(wù)具有3個要素:起始時間、終止時間,以及所有與這個事務(wù)相關(guān)的信息。

  基于事務(wù)的驗證工具讓用戶除了可以在信號/引腳級上進(jìn)行驗證,還可以在事務(wù)級上進(jìn)行驗證,從而提高了設(shè)計生產(chǎn)率。

  基于事務(wù)驗證環(huán)境的基本要素

  DUT:待驗證設(shè)計對象的RTL描述或門級描述。

  事務(wù):在DUT和事務(wù)處理器之間通過接口在特定起止時間內(nèi)的一次數(shù)據(jù)傳輸。事務(wù)能夠?qū)π盘柌ㄐ芜M(jìn)行標(biāo)識,表示相關(guān)的信號屬性,還可以標(biāo)識錯誤。

  事務(wù)處理器:也叫總線功能模型(BFM)。事物處理器可以表示事務(wù)所代表的信號變化,并與DUT通過接口進(jìn)行連接。一個典型的DUT往往具有不同的接口,因此一個驗證環(huán)境中具有不同的事務(wù)處理器以產(chǎn)生相關(guān)的測試向量對DUT進(jìn)行激勵。

  測試?yán)?Testcase):用來產(chǎn)生驗證DUT特定功能所需要的事務(wù)。

  基于事務(wù)的驗證處理過程

  測試?yán)ㄟ^特定的事務(wù)來調(diào)用事務(wù)處理器的任務(wù),事務(wù)處理器按照DUT所遵循的協(xié)議對事務(wù)進(jìn)行處理,經(jīng)過處理后的事務(wù)通過連接DUT的接口輸入到DUT中,DUT對輸入的激勵進(jìn)行響應(yīng)。DUT輸出的響應(yīng)再轉(zhuǎn)換為事務(wù)的形式,這樣驗證平臺的自核對模塊就可以在事務(wù)級上對激勵和響應(yīng)進(jìn)行核對,以檢查DUT的功能是否正確。

  RVM層次化驗證方法學(xué)

  是一種層次化的驗證方法學(xué),它能把驗證的步驟分層進(jìn)行,將驗證工作提高到更高的抽象層次,即事務(wù)層。層次化的驗證方法使得驗證工程師只需關(guān)心DUT的輸入/輸出接口,而不必關(guān)心DUT內(nèi)部的具體實現(xiàn)。

  根據(jù)RVM方法學(xué),驗證工程師可以搭建出具有隨機(jī)測試、自動檢錯核對、功能覆蓋等功能的層次化驗證平臺。這類驗證平臺包含很多參考模型,每個模型可完成不同的功能。在搭建驗證平臺的過程中,還可以直接調(diào)用Synopsys提供的RVM基類庫,其中定義了豐富的標(biāo)準(zhǔn)類。利用RVM基類以及面向?qū)ο蟮募夹g(shù)可以更方便地生成驗證平臺各個層次的模塊。

  基于RVM的驗證平臺分成5層,每層完成獨(dú)立的功能,層與層通過接口互相連接。RVM驗證模型如圖1所示。

圖 1 RVM層次化驗證模型

  信號層

  信號層提供驗證平臺與DUT的信號級連接。驗證平臺通過信號層將上層產(chǎn)生的激勵驅(qū)動到DUT中。具體實現(xiàn)時,需要定義驗證平臺與DUT連接的虛端口,當(dāng)DUT的接口改變時,只需要修改驗證平臺虛端口中的信號,上層模塊不需要修改,方便整個驗證平臺的重用。

  命令層

  命令層將信號層的信號抽象為事務(wù),給高層提供DUT的接口與事務(wù)的轉(zhuǎn)換。命令層主要包括驅(qū)動器模塊和監(jiān)視器模塊,與上層模塊通過事務(wù)級通道連接,與下層模塊通過虛端口連接。驅(qū)動器完成對DUT激勵的驅(qū)動。監(jiān)視器檢測DUT的輸出,將輸出反饋給上層模塊。

  功能層

  功能層模擬DUT的基本行為,將DUT的行為抽象為更高一級的事務(wù)。功能層中包括事務(wù)處理器模塊和自核對模塊。事務(wù)處理器模塊根據(jù)DUT所遵循的協(xié)議將上層產(chǎn)生的事務(wù)進(jìn)行處理,經(jīng)過事務(wù)處理器處理的事務(wù)通過事務(wù)級通道傳給下層。自核對模塊用于對比事務(wù)經(jīng)過DUT處理之后是否符合協(xié)議的要求,通常用于檢查DUT傳輸數(shù)據(jù)的正確性。

  激勵產(chǎn)生層

  激勵產(chǎn)生層用于產(chǎn)生對DUT的激勵事務(wù)。這一層包括產(chǎn)生器模塊,該模塊產(chǎn)生一系列的事務(wù)對象,通過事務(wù)級通道傳輸給下層。RVM支持兩種產(chǎn)生器: Atomic產(chǎn)生器,用于產(chǎn)生一組相似的事務(wù)對象; Scenario產(chǎn)生器,用于產(chǎn)生順序可控制的事務(wù)對象。

  測試層

  測試層用于對DUT的邏輯功能進(jìn)行驗證。這一層主要是用戶為了驗證DUT的邏輯功能而編寫的不同測試?yán)跍y試?yán)锌梢詫Ω鱾€模塊的限制條件進(jìn)行修改。通過對不同測試?yán)\(yùn)行結(jié)果的統(tǒng)計,可以查看DUT的功能覆蓋率,只有功能覆蓋率達(dá)到一定要求,才能夠認(rèn)為該DUT已經(jīng)被完備的驗證通過。

  SIMC模塊的功能驗證

  SIMC是SIM卡控制器的簡稱,通過SIMC可以在手機(jī)基帶處理芯片上外接SIM卡,實現(xiàn)數(shù)據(jù)的發(fā)送和接收。SIMC模塊連接在系統(tǒng)的APB總線上,ARM微控制器通過APB總線對SIMC進(jìn)行訪問。該模塊主要包括波特率產(chǎn)生部分、接收數(shù)據(jù)的串并轉(zhuǎn)換部分、發(fā)送數(shù)據(jù)的并串轉(zhuǎn)換部分、發(fā)送FIFO的控制部分、接收FIFO的控制部分等。發(fā)送數(shù)據(jù)時,SIMC模塊會將發(fā)送數(shù)據(jù)寄存器的數(shù)據(jù)先放到發(fā)送FIFO中,再將FIFO中的數(shù)據(jù)發(fā)送出去;接收數(shù)據(jù)時,SIMC模塊將接收到的數(shù)據(jù)放到接收FIFO中,再由處理器從接收數(shù)據(jù)寄存器中讀取數(shù)據(jù)。如果接收數(shù)據(jù)后,判斷校驗位或停止位出錯,則數(shù)據(jù)不會被放入接收FIFO中,SIMC模塊的狀態(tài)寄存器會有相應(yīng)的指示。

  本文將以一款基帶處理芯片的SIMC為例,詳細(xì)介紹RVM驗證方法學(xué)的應(yīng)用。其中DUT的RTL代碼用Verilog編寫,驗證平臺的代碼用OpenVera編寫。OpenVera語言是一種新型的高階驗證語言(HLV)。用OpenVera編寫的代碼中調(diào)用了RVM的基類和庫函數(shù),充分應(yīng)用了面向?qū)ο蠹夹g(shù)。

  SIMC模塊的RVM分層驗證平臺結(jié)構(gòu)

  SIMC模塊的驗證平臺利用Synopsys公司Vera驗證工具搭建,驗證平臺的搭建遵循RVM驗證方法學(xué),代碼的編寫過程調(diào)用了RVM基類庫。SIMC模塊驗證平臺結(jié)構(gòu)如圖2所示。

圖 2 SIMC模塊RVM層次化驗證模型

  信號層

  信號層包括定義的虛端口,用于和SIMC模塊RTL代碼的接口相連。首先定義一個interface變量,該變量中定義的接口對應(yīng)于SIMC模塊的接口信號,interface變量的定義語句中用hdl_node關(guān)鍵字和RTL代碼的接口信號相連。定義的虛端口再和interface中的信號綁定。

  命令層

  命令層包括ARM端的驅(qū)動器和監(jiān)視器、SIM卡端的驅(qū)動器和監(jiān)視器。ARM端的驅(qū)動器模仿APB總線,按照協(xié)議的規(guī)定對DUT進(jìn)行驅(qū)動,SIM卡端的驅(qū)動器模仿一個SIM卡對DUT進(jìn)行驅(qū)動。兩端的監(jiān)視器檢測DUT的輸出數(shù)據(jù)和驅(qū)動到DUT中的數(shù)據(jù),將數(shù)據(jù)保存在自核對模塊中進(jìn)行比較,通過比較來檢查DUT傳輸數(shù)據(jù)是否正確。

  編程實現(xiàn)時,可以通過繼承RVM基類庫中的rvm_xactor類得到所需要的子類,在子類的代碼中加入需要實現(xiàn)的功能。

  功能層

  功能層包括將SIM卡事務(wù)轉(zhuǎn)化為ARM事務(wù)的事務(wù)處理器、實現(xiàn)中斷服務(wù)功能的事務(wù)處理器、自核對模塊。編程實現(xiàn)時,事務(wù)處理器可以通過繼承RVM基類庫中的rvm_xactor得到,在子類的代碼中加入需要實現(xiàn)的功能。自核對模塊用于比較DUT的激勵和響應(yīng)是否符合要求。

  激勵產(chǎn)生層

  激勵產(chǎn)生層包括兩個Atomic產(chǎn)生器,兩個產(chǎn)生器是同一個類的兩個對象。產(chǎn)生器為DUT產(chǎn)生隨機(jī)激勵,激勵封裝在一個事務(wù)中,通過事務(wù)通道傳到下層模塊中。兩端的產(chǎn)生器都是產(chǎn)生SIM卡事務(wù)的,ARM端有一個將SIM卡事務(wù)轉(zhuǎn)化為ARM事務(wù)的事務(wù)處理器來完成SIM卡事務(wù)向ARM事務(wù)的轉(zhuǎn)化。通過產(chǎn)生器可以隨機(jī)產(chǎn)生符合協(xié)議規(guī)范的激勵。編寫代碼時,產(chǎn)生器可以通過調(diào)用RVM的宏rvm_atomic_gen很方便地實現(xiàn)。

  測試層

  在測試層,用戶可以編寫不同的測試?yán)龑UT的功能進(jìn)行驗證。在測試?yán)校ㄟ^對約束的限制、環(huán)境類的例化、配置類的約束來實現(xiàn)對DUT的功能覆蓋,以達(dá)到100%的功能覆蓋率。

  驗證平臺的重用

  對單個模塊驗證完畢之后可以進(jìn)行系統(tǒng)級的驗證。根據(jù)RVM驗證方法學(xué)搭建的層次化驗證平臺可以被重用到系統(tǒng)級的驗證中。系統(tǒng)級驗證側(cè)重于檢查各模塊間的接口和數(shù)據(jù)交互是否符合設(shè)計規(guī)范,某些模塊級驗證的模塊可以被復(fù)用到系統(tǒng)級驗證中。對SIMC模塊來說,系統(tǒng)級驗證時,ARM端的驅(qū)動器、監(jiān)視器以及激勵產(chǎn)生器都可以被APB總線代替,SIM卡端的各模塊可以繼續(xù)使用,達(dá)到重用的目的。

  應(yīng)用RVM驗證方法的注意事項與技巧

  RVM驗證方法學(xué)由Synopsys公司提出,利用RVM驗證方法學(xué)首選的編程語言是OpenVera硬件驗證語言。筆者在應(yīng)用RVM驗證方法學(xué)搭建驗證平臺過程中的一些技巧和注意事項歸納如下:

  1、 驗證某個模塊前,首先要閱讀相關(guān)文檔,熟悉模塊的功能特性,然后搭建驗證平臺的基本框圖,選擇RVM的相關(guān)技術(shù),在驗證平臺基本框圖指導(dǎo)下編程實現(xiàn)。

  2、 驗證平臺中功能覆蓋點(diǎn)的定義是驗證成敗的關(guān)鍵,驗證過程中利用RVM的覆蓋率驅(qū)動技術(shù),分析所定義的覆蓋點(diǎn)的覆蓋情況,改善該驗證平臺,每個功能覆蓋點(diǎn)都必須被覆蓋到。

  3、 RVM基類庫提供了豐富的函數(shù),但是Synopsys沒有開放RVM基類的源代碼,所以驗證代碼的編寫過程中應(yīng)隨時查閱RVM文檔,盡量使用RVM基類提供的函數(shù),而不是自己去重新開發(fā)一個函數(shù)。

  4、 RVM驗證平臺中各個模塊之間通信有很多種方法,可以用RVM的callbacks類,也可以使用雙通道等。

  5、 RVM為驗證平臺中的進(jìn)程間通信提供了多種數(shù)據(jù)結(jié)構(gòu),例如semaphore、region、mailbox等,編程時應(yīng)根據(jù)需要進(jìn)行選擇。 例如,在某一時刻有多個并行的進(jìn)程對同一個信號進(jìn)行驅(qū)動,仿真工具會停止仿真并打印出錯信息。解決的方法是應(yīng)用semaphores數(shù)據(jù)結(jié)構(gòu),每個進(jìn)程得到semaphore才可以驅(qū)動信號,對信號驅(qū)動后再釋放semaphore供其他進(jìn)程使用。

  6、 如果要打


印信息,應(yīng)使用rvm_log類而不是printf()函數(shù)。rvm_log類除了將信息打印出來,還可以顯示出信息來源于驗證平臺中的哪個模塊以及該模塊的仿真時間,便于編程人員調(diào)試代碼。

  7、 隨機(jī)激勵的產(chǎn)生不是真正意義上的隨機(jī),而是一種偽隨機(jī)。編程人員在多次運(yùn)行同一個測試?yán)龝r應(yīng)改變驗證平臺的隨機(jī)種子,可通過調(diào)用srandom()函數(shù)來實現(xiàn)。

  結(jié)語

  用RVM驗證方法學(xué)搭建的層次化驗證平臺將大大提高驗證環(huán)境的執(zhí)行效率。RVM驗證方法學(xué)中的隨機(jī)測試技術(shù)可以在很短的時間內(nèi)達(dá)到更高的功能覆蓋率,提高驗證工程師的工作效率,達(dá)到有效縮短驗證周期的目的。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉