文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.190753
中文引用格式: 張靜,卜剛. 基于C_Model的UVM驗證平臺設計與實現(xiàn)[J].電子技術應用,2019,45(10):100-104.
英文引用格式: Zhang Jing,Bu Gang. Design and implementation of UVM verification platform based on C_Model[J]. Application of Electronic Technique,2019,45(10):100-104.
0 引言
近幾十年來,集成電路事業(yè)發(fā)展迅速,設計與工藝技術不斷發(fā)展,更多和更復雜的功能被集成到一塊芯片上。SoC的集成度和復雜度大大提高,在IC設計中就容易引入錯誤,所以驗證工作將變得艱巨。隨著IC設計規(guī)模的增大以及設計周期的壓縮,傳統(tǒng)驗證技術已經不能再滿足日益增長的驗證需求,驗證方法學應運而生,目前,UVM驗證方法學已經成為應用最廣泛的方法學。
本文目的在于為數(shù)字基帶處理單元中標簽發(fā)送鏈路的編碼模塊搭建一個適當?shù)?、完善的驗證平臺,用來驗證RTL代碼的正確與否。運用面向對象思想的UVM驗證方法學和C語言進行平臺的設計與實現(xiàn),它能有效地縮短驗證周期,提高驗證效率,加大芯片的面試可能性。
1 UVM驗證方法學
目前,主流的驗證方法學有VMM、OVM和UVM。UVM基于System Verilog語言,具有VMM、OVM等諸多驗證方法學的優(yōu)點,是一套高效、開源的驗證方法學。UVM由Accellera標準組織推出,并得到了三大主流EDA供應商支持。
通用驗證方法學(Universal Verification Methodology,UVM)是一個以SystemVerilog類庫為主體的驗證平臺開發(fā)框架,可以利用其可重用組件構建具有標準化層次結構和接口的功能驗證環(huán)境。
UVM平臺架構主要是由通用驗證組件(Universal Verification Component,UVC)構成。每個UVC都是功能完備、可配置、封裝好的驗證環(huán)境。根據(jù)UVC功能的不同,可分為接口UVC(Interface UVC)和模塊UVC(Module UVC)等。
由圖1可知構成UVM環(huán)境的常見組件類如下:
(1)uvm_driver類:是從uvm_sequencer中獲取事務(transaction),經過轉化在接口中對DUT進行時序激勵。diver類與sequencer類之間的通信就是為了獲取新的事務對象,這一操作通過pull方式實現(xiàn):
driver.seq_item_port.connect(sequencer.seq_item_export);
driver.rsp_port.connect(sequencer.rsp_export);
(2)uvm_monitor類:用來監(jiān)測數(shù)據(jù)。
(3)uvm_sequencer類:就像一個管道,從中傳送連續(xù)的激勵事務,并最終通過TLM端口送至driver一側。
(4)uvm_agent類:用來封裝一個driver、一個monitor和一個sequencer。
(5)reference_model:用于完成和DUT相同的功能。reference model的輸出被scoreboard接收,用于和DUT的輸出相比較。
(6)uvm_scoreboard:用來進行數(shù)據(jù)比對和報告。
(7)uvm_env:是一個結構化的容器,用來容納各組件。
(8)uvm_test:是驗證環(huán)境的唯一入口,只有通過它才能正常運轉uvm的phase機制。
2 DUT介紹
圖2中的DUT實現(xiàn)了FM0和Miller副載波調制編碼。在ISO/IEC18000-6C協(xié)議標準中,標簽發(fā)送鏈路主要采用是FM0編碼和Miller編碼。編碼方式的選擇由m[1:0]來決定,只有當m值為2′b00時才會選擇FM0編碼,m為2′b01、2′b10、2′b11時選擇Miller編碼。
FM0編碼是通過電平翻轉的方式來實現(xiàn)編碼,數(shù)據(jù)碼元-0和-1翻轉的次數(shù)不同。碼元-0在碼元周期中間會發(fā)生一次電平翻轉,而碼元-1只在每個碼元起始處發(fā)生電平翻轉。從圖3所示FM0編碼的狀態(tài)跳轉圖可以看出FM0編碼的碼元-0和-1的波形,而且在FM0編碼結束后需要在碼元數(shù)據(jù)的尾端添加結束標志,結束標志會以固定碼流來結束。碼元波形和結束符如圖4所示。
Miller編碼又稱為副載波調制編碼,也是通過電平翻轉的方式來實現(xiàn)編碼。編碼方式和狀態(tài)跳轉如圖5所示。
根據(jù)Miller編碼規(guī)則,按照m[1:0]值不同,每個數(shù)據(jù)可能被編碼成4位、8位16位碼元。如果m值為01,對應M值為2,每個數(shù)據(jù)編碼為4位碼元;m值為10,對應M值為4,每個數(shù)據(jù)編碼為8位碼元;m值為11,對應M值為8,每個數(shù)據(jù)編碼為16位碼元。Miller編碼序列如圖6所示,每個編碼序列分別對應M值為2、4、8。由圖可知數(shù)據(jù)編碼時,只有在數(shù)據(jù)-0和-0邊界電平不發(fā)生翻轉跳變以外其他數(shù)據(jù)邊界處都會發(fā)生電平的翻轉跳變。
與FM0編碼類似,Miller除了采用電平翻轉實現(xiàn)編碼外,編碼結束后在數(shù)據(jù)的尾部同樣需要添加結束標志。FM0采用固定碼流作為結束標志,即保持持續(xù)碼元電平。但是Miller編碼的結束標志相對會復雜一些,如圖7所示。
3 驗證架構
本文設計UVM平臺如圖8所示。
組件搭建描述:
(1)interface:聲明接口。
(2)transaction(數(shù)據(jù)包):繼承于uvm_sequence_item,利用隨機化和相關約束約束產生隨機數(shù)據(jù),創(chuàng)建兩個transaction對象,transaction_in在DUT輸入端輸入,transaction_out在DUT輸出與參考模型的輸出相比較。
(3)sequence類:繼承于uvm_sequence,加入objection機制來控制驗證平臺的關閉,利用repeat( )來控制執(zhí)行的次數(shù)。
(4)sequencer:繼承于uvm_sequencer,連接driver,實現(xiàn)數(shù)據(jù)的發(fā)送。
(5)driver類:繼承于uvm_driver,與sequencer連接,用來請求數(shù)據(jù)。
(6)monitor類:繼承于uvm_monitor,創(chuàng)建monitor_before和monitor_after,前者用來收集driver發(fā)送的數(shù)據(jù),后者用來監(jiān)測DUT的輸出,分別在monitor_after和monitor_before中設置covergroup用來收集功能覆蓋率。
(7)agent類:繼承于uvm_agent,創(chuàng)建i_agent和o_agent,前者用來封裝driver和monitor_before,后者用來封裝monitor_after,聲明并例化sequencer、driver、monitor,利用端口將它們連接起來。
(8)reference_model:繼承于uvm_component,將外部C_Model通過DPI調入,并將數(shù)據(jù)存儲,用來與monitor監(jiān)測到的DUT的輸出做比較。
設計FM0編碼的C_Model。模型輸入包括了m參數(shù)、data,輸出編碼后數(shù)據(jù)及編碼后的數(shù)據(jù)長度。首先需要將數(shù)據(jù)讀入模型,根據(jù)數(shù)據(jù)電平編碼。編碼算法主要設置一個變量data_tmp,在編碼開始時設置為1,如果是編碼-0,則輸出碼元~data_tmp和data_tmp,data_tmp值保持不變。如果是編碼-1,則輸出碼元~data_tmp和~data_tmp,data_tmp值取反。通過不斷更新data_tmp值來實現(xiàn)數(shù)據(jù)的編碼輸出,編碼完成后添加結束標識符。
設計Miller副載波調制編碼的C_Model,模型輸入包括了m參數(shù)、data,結合副載波調制類型和數(shù)據(jù)類型,將編碼后的數(shù)據(jù)及長度輸出,另外,由于Miller前同步碼最后一位碼元電平為低,因此其初始data_tmp應為0,結合m的值進行編碼,編碼完成后添加結束標識符。
(9)Scoreboard類:繼承于uvm_scoreboard,將monitor_after檢測到的輸出與reference_model得到的輸出做比較。
(10)env類:繼承于uvm_env,聲明并例化agent,reference_model,scoreboard,利用端口將它們連接起來。
(11)Test類:繼承于uvm_test,聲明并例化env,設置default_sequence來啟動sequence。
(12)Top模塊:聲明接口,實現(xiàn)DUT和平臺互連,設置時鐘信號。
4 仿真結果
環(huán)境搭建完畢后用QuestaSim進行仿真驗證,根據(jù)輸出的波形和驗證信息比較DUT功能的正確與否,并查看輸出的功能覆蓋率來檢測各功能點的實現(xiàn)狀況。
由圖9所示可以發(fā)現(xiàn),UVM計分板中顯示驗證通過,DUT的輸出和模型的輸出是一致的,DUT的設計滿足功能實現(xiàn)。
由圖10可知,m=0時,執(zhí)行FM0編碼,m=1時,即執(zhí)行miller編碼,每個數(shù)據(jù)分別編碼為2和4個碼元,由圖可知:m=0,data=3′b000,得到編碼后的數(shù)據(jù)為01010100,數(shù)據(jù)長度為8位,最后2位是結束標識符00,根據(jù)FM0編碼原則結果是正確的;而m=1,data=3′111,得到的編碼后數(shù)據(jù)為1001_0110_1001_0110,數(shù)據(jù)長度為16位,最后4位0110是結束標識符,根據(jù)miller編碼原則結果是正確的。
由圖11可知,m=2和3時,即執(zhí)行miller編碼,每個數(shù)據(jù)分別編碼為8和16個碼元,由圖可知:m=2,data=3′b110,得到編碼后的數(shù)據(jù)為1010_0101_0101_1010_1010_1010_1010_0101,數(shù)據(jù)長度為32位,最后8位是結束標識符1010_0101,根據(jù)miller編碼原則結果是正確的;而m=3,data=3′011,得到的編碼后數(shù)據(jù)為0101_0101_0101_0101_0101_0101_1010_1010_1010_1010_0101_0101_0101_0101_1010_1010,數(shù)據(jù)長度為64位,最后16位0101_0101_1010_1010是結束標識符,根據(jù)miller編碼原則結果也是正確的。
圖12是一個由覆蓋率驅動并且受約束的隨機分層測試平臺所產生的整個FM0、Miller編碼仿真波形圖,由圖可見,平臺跑了很多個testcase。
圖13描述此DUT的功能覆蓋率,F(xiàn)M0編碼以及Miller編碼的3種模式都覆蓋到了,各功能點的覆蓋率達到了100%。
5 結論
UVM驗證方法學作為目前主流的IC驗證方法學,盡管在前期搭建驗證平臺的的時間較長,但是執(zhí)行效率很高,可以縮短整個研發(fā)的驗證時間。本文介紹了基于DPI-C接口和UVM相結合的驗證環(huán)境,實現(xiàn)了C程序與基于UVM環(huán)境的接口對接,使用受約束的隨機激勵以及覆蓋率驅動,使驗證平臺中程序開發(fā)方便且調試方便,縮短了驗證周期,保證了驗證的完備性,有效地縮短了驗證周期,提高了驗證效率,加大了芯片的面試可能性。
參考文獻
[1] 張強.UVM實戰(zhàn)[M].北京:機械工業(yè)出版社,2014.
[2] 劉斌.芯片驗證漫游指南[M].北京:電子工業(yè)出版社,2018.
[3] 程剛,蔡敏.基于SystemVerilog的SoC功能驗證方法研究[J].科學技術與工程,2009(22):6814-6818.
[4] 克里斯·斯皮爾.SystemVerilog驗證[M].張春,譯.北京:科學出版社,2009.
[5] 徐偉俊,楊鑫,陳先勇,等.針對功能覆蓋率的驗證過程[J].中國集成電路,2007(7):58-62.
[6] 克里斯·斯皮爾.SystemVerilog驗證:測試平臺編寫指南[M].張春,麥宋平,趙益新,譯.北京:科學出版社,2009.
[7] 李璐,周春良,馮曦,等.基于DPI-C接口的可擴展SOC驗證平臺[J].電子設計工程,2018,26(4):136-140.
[8] Michael Keating.Reuse methodology manual for system-on-a-chip design[M].Third Edition.Kluwer Academic Publishers,2002.
作者信息:
張 靜,卜 剛
(南京航空航天大學 電子信息工程學院,江蘇 南京211106)