文獻標識碼: A
文章編號: 0258-7998(2013)05-0128-04
隨著集成電路制造工藝技術水平不斷進步,芯片設計規模越來越大,驗證所花費的時間占據了整個產品設計周期的70%,而且隨著設計復雜度的提高呈指數性增加[1]。芯片一次流片的成功率從很大程度上取決于功能驗證是否充分[2]。因此,驗證已經成為制約芯片開發的瓶頸問題。
傳統的驗證平臺主要依賴驗證人員觀察波形的方法進行驗證,驗證效率低,不能滿足當今驗證規模的需求。VMM驗證方法學[3]的出現極大程度上提高了驗證的效率,進而出現了一批借鑒VMM驗證方法學的驗證平臺[4-7],如參考文獻[4]所設計的驗證平臺就采用了VMM驗證技術。但是其設計的驗證平臺只產生了隨機激勵,驗證時僅使用隨機激勵很難測試到電路的邊界情況,而且驗證過程收斂性差。
為了快速定位設計中的問題及邊界情況,同時提高驗證效率,本文擬采用System Verilog語言,根據VMM驗證方法學中的分層設計思想,搭建一個可重用的驗證平臺,以求同時提供定向測試、受約束的隨機測試和錯誤激勵測試。
1 平臺框架
驗證平臺可分為4層,即測試層、建立層、事務層和物理層,如圖1所示。
(1)物理層:包括被測設計模塊(DUT)集合和電路模型。
電路模型用來與被測代碼進行比較,以實現自檢驗的驗證。采用Verilog語言或者System Verilog語言模擬與設計代碼等價的功能。
(2)事務層:包括激勵產生器、監視器、和覆蓋率統計器等。
激勵產生器的主要功能是驅動DUT和電路模型的接口信號。本平臺的激勵產生器能夠產生定向測試向量、錯誤測試向量和受約束的隨機向量。
監視器的主要功能是監視DUT和電路模型輸出的信號,并對兩者進行比較。當DUT的輸出信號和電路模型的輸出信號不一致時,仿真可能被強迫結束,同時打印出當時出錯的時間和出錯的信號名稱及內容。
覆蓋率統計器的主要功能是根據激勵產生器產生的測試向量、DUT輸出信號以及覆蓋點的要求統計出電路功能的覆蓋概率。覆蓋點是一種有效的驗證機制[8],它的編寫根據具體的測試對象而定,可以對單個信號進行功能覆蓋率統計,也可以統計多個信號的交叉覆蓋率。
以上介紹了事務的類型,根據不同的測試需求可以創建各種平臺所需的事務,如隨機事務、各種回調函數事務等。
(3)建立層:包括驗證框架的建立和電路初始配置。
驗證框架建立的主要功能是利用事務層的各種事務構建出整個平臺的框架。包括平臺環境的配置及參數的設定;激勵產生器和監視器的句柄定義和對象聲明;與覆蓋率相關的回調函數類的句柄定義和對象聲明;激勵產生器和監視器與回調函數的通信建立。本平臺還研發了面向通信交換設備的配置軟件和專用的圖形界面。
(4)測試層:包括配置文件和測試用例。
在平臺搭建好之后,測試層的主要功能是提供定向測試的測試實例和與DUT相關的一些配置信息。例如對高性能路由器轉發單元進行驗證時,需要通過微機接口對轉發單元進行配置,不同的配置參數DUT將會提供不同的功能。本文設計開發了面向定向測試的數據塊/包的軟件輔助工具。測試人員可以使用輔助工具來產生所需要的數據。
2 通信交換設備驗證平臺
2.1 交換功能介紹
本文假定所測試的交換設備具有N個輸入/輸出端口,這里N通常是2的整數次冪,考慮到內部復用,這N個端口可以映射到k組總線,每m=N/k個端口分時復用一組總線,k<N,而且通常也是一個2的整數次冪。交換設備可以接受數據塊(如ATM cell)或者數據包(如IP packet),根據數據包的類型、包長、優先級、源端口、目的端口以及其他參數和等信息,通過相應的流量控機制決定數據包或數據塊是否被轉發傳送。交換設備還要負責轉發存儲管理,將信息數據存入到基于輸出端口的緩存隊列中等待調度;同時,在隊列不空的情況下,根據網絡中鏈路的忙/閑狀態,通過一定的調度算法,采用分時復用的方法,依次從不同的輸出端口調度出一個數據包發送到網絡中。
2.2 驗證平臺
驗證平臺需要按照數據包/塊格式的要求提供各種不同類型、包長、優先級、源端口和目的端口,以及包含其他參數和配置的網絡數據包,同時能夠根據各個端口輸出的數據包個數計算出該端口的速率,以此來產生鏈路的忙/閑狀態,模擬配置規定的速率和其他要求。
根據層次化結構,并結合交換設備的功能,對驗證平臺進行了詳細的設計。
(1)物理層:DUT采用Verilog語言編寫,電路模型采用System Verilog編寫,編寫過程不是設計的重點,所以這里不再進行敘述。
(2)事務層:根據功能描述可知,如果要從端口處進行驗證,本驗證平臺需要N個激勵產生器,用于產生來自N個輸入端口的數據包/塊,還需要N個監視器來觀察N個輸出端口的數據包/塊。如果要從總線處進行驗證,則需要k個激勵產生器和k個監視器用于監視來自電路模型和DUT的k組總線上的輸出數據。這里,每個激勵產生器需要模仿m=N/k個端口及其速率,每個監視器需要記錄m個端口的輸出。同時還需要一個覆蓋率統計器用于統計激勵產生器產生的所有情況下的數據包。
①激勵產生器:將激勵產生器定義為一個類,該類的屬性包含了虛接口的定義、待發送包的隊列定義、激勵發生器編號和回調函數隊列定義等,此外還包含了運行方法、定向測試、隨機測試、端口速率配置方法、定向包入隊方法、定向包驅動方法、隨機包產生方法、隨機包入隊方法、隨即包驅動方法和丟棄概率計算方法等。
其中定向測試的測試流程如圖2所示。
首先調用端口速率配置方法對所有N個端口的速率進行配置,然后調用定向包/塊入隊方法,根據測試層的測試實例進行定向包/塊的入隊操作。按照發送時序要求將定向包依次驅動到DUT的輸入端口上,直到發送完所有的定向包,并觸發隨機包產生事件,然后宣告定向測試結束。測試中在包與包或者塊與塊之間引入了受約束的隨機時延。隨機時延的范圍采用輔助工具進行配置。在測試層不僅能使用隨機數據,還能使用隨機時延,從而最大限度地驗證被測電路的功能和時延正確性,保證了被測模塊的魯棒性。
隨機測試流程如圖3所示。首先為每個端口或者總線設置一個數據結構和包/塊的隊列。產生的數據包/塊先被送入相應的隊列。然后為每個輸入端口的隊列預存入一個數據包,等待隨機事件被觸發。當隨機事件被觸發后,程序分為兩個分支:分支一用于產生隨機數據包并進行入隊操作;分支二用于調用回調函數,產生錯誤指示信號,根據錯誤指示信號丟棄該包、或者發送錯誤的數據信息、又或者正常發送該包。當發送完一個數據包后再次調用回調函數進行覆蓋率的統計;最后判斷是否結束隨機測試,如果結束,則退出測試。否則重復上述操作。分支一和分支二之間通過事件進行同步通信。
②監視器:監視器的類結構與激勵產生器相近,其中包含了屬性(虛接口的定義、監視器編號、回調函數隊列等)和方法(數據結果比較、端口速率計算)。數據結果比較方法將DUT和行為模型的有效輸出數據信號進行比較,如果輸出結果不一致,則可能停止仿真,并打印出當前仿真的時間和錯誤數據信息;如果輸出結果一致,則調用回調函數進行覆蓋率的統計。端口速率計算方法的主要功能是統計每個端口輸出的數據包,根據數據包個數產生相應的鏈路空/閑指示信號。
③覆蓋率統計器:覆蓋率統計器的類結構與激勵產生器的類有所不同,其結構由屬性、方法和覆蓋組構成。屬性主要是為進行覆蓋率統計而定義的一些中間變量;方法為進行覆蓋率統計準備數據,這些數據涉及到相應的覆蓋點,并調用采樣函數,進行覆蓋率統計操作;覆蓋組由多個覆蓋點組成,首先定義多個獨立的覆蓋點。然后根據具體的情況將這些獨立的覆蓋點進行交叉覆蓋率計算定義,如cross packet_type、packet_dport等。
(3)建立層:建立層定義為一個類,該類由屬性和方法構成。屬性包含了m個激勵產生器和m個監視器的句柄定義、m組總線的虛接口定義、覆蓋率類的句柄聲明等。其方法包含了建造方法、DUT配置方法和運行方法。其中建造方法用于對m個激勵產生器和m個監視器進行對象聲明,同時將回調函數壓入激勵產生器和監視器的回調函數隊列中。DUT配置方法的主要功能是按照微機接口時序利用測試層提供的配置文件,對電路進行初始配置。運行方法主要的功能是啟動m個激勵產生器和m個監視器的線程,這里采用fork join_none語句實現。
(4)測試層:按照數據包的格式要求編寫定向測試向量文件,同時提供電路的各種配置參數文件。
最終搭建好的驗證平臺如圖4所示。
3 驗證結果和分析
本文的驗證平臺搭建在Sysnopsys公司的VCS仿真平臺上,使用了DVE環境。運行結果如圖5所示。可以看出本平臺能夠按照DUT輸入數據信號的要求產生正確的輸入信號,并能夠按照一定的概率產生錯誤的數據。同時,當DUT和電路模型輸出的數據不一致時,驗證平臺能夠強行停止仿真過程,并打印錯誤信息。該錯誤信息包括了錯誤信號及錯誤信號產生的時刻等,這些信息能夠幫助設計人員快速地定位錯誤,從而提高驗證效率。
最后在覆蓋率結果的引導下,通過增加覆蓋點以及修改隨機信號約束條件和產生隨機信號的權重值,最終功能覆蓋率能夠達到100%。
采用System Verilog語言,借鑒VMM層次化的驗證技術,設計了一個可重用的驗證平臺。與其他的驗證平臺相比,該可重用驗證平臺能夠提供多種形式的激勵,包括定向測試激勵、受約束的隨機測試以及錯誤激勵;采用了一套十分有效的算法來產生激勵并真實地模仿配置好的端口設施;能產生隨機數據和受約束的隨機時延,模仿真實的環境,對被測模型進行完備的驗證。
同時采用了自動對比結果技術。構建不同設計對象的驗證平臺時,在不修改本驗證平臺框架的情況下,僅需修改功能覆蓋率類中的覆蓋點和激勵產生器中的一些方法,新的驗證平臺即可搭建而成。與采用純手工編寫測試向量的驗證技術相比較,本文設計的驗證平臺極大地提高了驗證效率,縮短了設計周期。
參考文獻
[1] 閆沫,張媛.基于System Verilog語言的設計驗證技術[J].現代電子技術,2008,31(6):8-11.
[2] 馬寧,李玲,田澤,等. ARINC659總線協議芯片的仿真驗證[J].計算機技與發展,2010,20(1):205-208.
[3] 張春,麥宋平,趙益新. System Verilog驗證[M].北京:科學出版社,2009.
[4] 劉兆勇, 王進祥, 李清波. 基于VMM的外部存儲器接口驗證[J].微處理機, 2009(4):1-4.
[5] 段乘超,徐金甫. 基于VMM構件可重用驗證平臺[J]. 現代電子技術,2011,34(8):127-129.
[6] 林健,楊志家.利用VMM建立基于事務的層次化驗證平臺[J].微計算機信息,2010,26(4-2):97-98.
[7] 段青亞,黃士坦,靳榮利,等. SoC自動化驗證方法的研究與實現[J].吉林大學學報:信息科學版, 2010,28(3):231-237.
[8] KEAVENEY M, MCMAHON A, O’KEEFFE N, et. al. The development of advanced verification environments using system verilog[C]. The 16th Irish System and Signals Conference. ISSC2008, Galway, Ireland,2008.