《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于C_Model的UVM驗(yàn)證平臺設(shè)計與實(shí)現(xiàn)
基于C_Model的UVM驗(yàn)證平臺設(shè)計與實(shí)現(xiàn)
2019年電子技術(shù)應(yīng)用第10期
張 靜,卜 剛
南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京211106
摘要: 隨著集成電路規(guī)模和復(fù)雜度的提高,其驗(yàn)證工作也日益復(fù)雜和重要,驗(yàn)證周期己經(jīng)達(dá)到甚至超過整個芯片設(shè)計周期的70%,因此,急需找到一種高效的驗(yàn)證方法,以便提高驗(yàn)證效率,增強(qiáng)驗(yàn)證平臺的可重用性?;赟ystemVerilog語言的 UVM 驗(yàn)證方法學(xué)可以有效提高驗(yàn)證效率,縮短驗(yàn)證周期。采用高層次的抽象模型C_Model作為參考模型接入UVM平臺,對數(shù)字基帶處理單元中標(biāo)簽發(fā)送鏈路的編碼模塊進(jìn)行驗(yàn)證,設(shè)計隨機(jī)和非隨機(jī)的testcase,通過driver和monitor驗(yàn)證組件來發(fā)送、監(jiān)測并收集數(shù)據(jù),包括硬件設(shè)計RTL代碼產(chǎn)生的數(shù)據(jù)和參考模型產(chǎn)生的數(shù)據(jù),然后將兩數(shù)據(jù)送入設(shè)計的UVM計分板模塊進(jìn)行比對,從而實(shí)現(xiàn)對RTL的功能驗(yàn)證,驗(yàn)證系統(tǒng)的優(yōu)劣可通過功能覆蓋率來體現(xiàn)。驗(yàn)證結(jié)果表明,UVM計分板中比對正確且功能覆蓋率達(dá)到了100%。
中圖分類號: TN402
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190753
中文引用格式: 張靜,卜剛. 基于C_Model的UVM驗(yàn)證平臺設(shè)計與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,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.
Design and implementation of UVM verification platform based on C_Model
Zhang Jing,Bu Gang
School of Electronic Information Engineering,Nanjing University of Aeronautics and Astronautics,Nanjing 211106,China
Abstract: As the scale and complexity of integrated circuits increase, the verification work becomes more and more complex and important. The verification cycle has reached or exceeded 70% of the entire chip design cycle. Therefore, it is urgent to find an efficient verification method to improve verification efficiency and enhance reusability of the verification platform. The UVM verification methodology based on the SystemVerilog language can effectively improve the verification efficiency and shorten the verification cycle. Therefore, this paper uses the high-level abstract model C_Model as the reference model to access the UVM platform, verify the encoding module of the tag transmission link in the digital baseband processing unit, design random and non-random testcase, and send it through the driver and monitor verification components. Monitor and collect data, including the data generated by the hardware design RTL code and the data generated by the reference model, and then send the two data to the designed UVM scoreboard module for comparison, thereby verifying the function of the RTL and verifying the pros and cons of the system. It can be reflected by functional coverage. The verification results show that the alignment is correct and the functional coverage reaches 100% in the UVM scoreboard.
Key words : SystemVerilog;UVM;C_Model;functional coverage

0 引言

    近幾十年來,集成電路事業(yè)發(fā)展迅速,設(shè)計與工藝技術(shù)不斷發(fā)展,更多和更復(fù)雜的功能被集成到一塊芯片上。SoC的集成度和復(fù)雜度大大提高,在IC設(shè)計中就容易引入錯誤,所以驗(yàn)證工作將變得艱巨。隨著IC設(shè)計規(guī)模的增大以及設(shè)計周期的壓縮,傳統(tǒng)驗(yàn)證技術(shù)已經(jīng)不能再滿足日益增長的驗(yàn)證需求,驗(yàn)證方法學(xué)應(yīng)運(yùn)而生,目前,UVM驗(yàn)證方法學(xué)已經(jīng)成為應(yīng)用最廣泛的方法學(xué)。

    本文目的在于為數(shù)字基帶處理單元中標(biāo)簽發(fā)送鏈路的編碼模塊搭建一個適當(dāng)?shù)?、完善的?yàn)證平臺,用來驗(yàn)證RTL代碼的正確與否。運(yùn)用面向?qū)ο笏枷氲腢VM驗(yàn)證方法學(xué)和C語言進(jìn)行平臺的設(shè)計與實(shí)現(xiàn),它能有效地縮短驗(yàn)證周期,提高驗(yàn)證效率,加大芯片的面試可能性。

1 UVM驗(yàn)證方法學(xué)

    目前,主流的驗(yàn)證方法學(xué)有VMM、OVM和UVM。UVM基于System Verilog語言,具有VMM、OVM等諸多驗(yàn)證方法學(xué)的優(yōu)點(diǎn),是一套高效、開源的驗(yàn)證方法學(xué)。UVM由Accellera標(biāo)準(zhǔn)組織推出,并得到了三大主流EDA供應(yīng)商支持。

    通用驗(yàn)證方法學(xué)(Universal Verification Methodology,UVM)是一個以SystemVerilog類庫為主體的驗(yàn)證平臺開發(fā)框架,可以利用其可重用組件構(gòu)建具有標(biāo)準(zhǔn)化層次結(jié)構(gòu)和接口的功能驗(yàn)證環(huán)境。

    UVM平臺架構(gòu)主要是由通用驗(yàn)證組件(Universal Verification Component,UVC)構(gòu)成。每個UVC都是功能完備、可配置、封裝好的驗(yàn)證環(huán)境。根據(jù)UVC功能的不同,可分為接口UVC(Interface UVC)和模塊UVC(Module UVC)等。

    由圖1可知構(gòu)成UVM環(huán)境的常見組件類如下:

dzyj1-t1.gif

    (1)uvm_driver類:是從uvm_sequencer中獲取事務(wù)(transaction),經(jīng)過轉(zhuǎn)化在接口中對DUT進(jìn)行時序激勵。diver類與sequencer類之間的通信就是為了獲取新的事務(wù)對象,這一操作通過pull方式實(shí)現(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ù)的激勵事務(wù),并最終通過TLM端口送至driver一側(cè)。

    (4)uvm_agent類:用來封裝一個driver、一個monitor和一個sequencer。

    (5)reference_model:用于完成和DUT相同的功能。reference model的輸出被scoreboard接收,用于和DUT的輸出相比較。

    (6)uvm_scoreboard:用來進(jìn)行數(shù)據(jù)比對和報告。

    (7)uvm_env:是一個結(jié)構(gòu)化的容器,用來容納各組件。

    (8)uvm_test:是驗(yàn)證環(huán)境的唯一入口,只有通過它才能正常運(yùn)轉(zhuǎn)uvm的phase機(jī)制。

2 DUT介紹

    圖2中的DUT實(shí)現(xiàn)了FM0和Miller副載波調(diào)制編碼。在ISO/IEC18000-6C協(xié)議標(biāo)準(zhǔn)中,標(biāo)簽發(fā)送鏈路主要采用是FM0編碼和Miller編碼。編碼方式的選擇由m[1:0]來決定,只有當(dāng)m值為2′b00時才會選擇FM0編碼,m為2′b01、2′b10、2′b11時選擇Miller編碼。

dzyj1-t2.gif

    FM0編碼是通過電平翻轉(zhuǎn)的方式來實(shí)現(xiàn)編碼,數(shù)據(jù)碼元-0和-1翻轉(zhuǎn)的次數(shù)不同。碼元-0在碼元周期中間會發(fā)生一次電平翻轉(zhuǎn),而碼元-1只在每個碼元起始處發(fā)生電平翻轉(zhuǎn)。從圖3所示FM0編碼的狀態(tài)跳轉(zhuǎn)圖可以看出FM0編碼的碼元-0和-1的波形,而且在FM0編碼結(jié)束后需要在碼元數(shù)據(jù)的尾端添加結(jié)束標(biāo)志,結(jié)束標(biāo)志會以固定碼流來結(jié)束。碼元波形和結(jié)束符如圖4所示。

dzyj1-t3.gif

dzyj1-t4.gif

    Miller編碼又稱為副載波調(diào)制編碼,也是通過電平翻轉(zhuǎn)的方式來實(shí)現(xiàn)編碼。編碼方式和狀態(tài)跳轉(zhuǎn)如圖5所示。

dzyj1-t5.gif

    根據(jù)Miller編碼規(guī)則,按照m[1:0]值不同,每個數(shù)據(jù)可能被編碼成4位、8位16位碼元。如果m值為01,對應(yīng)M值為2,每個數(shù)據(jù)編碼為4位碼元;m值為10,對應(yīng)M值為4,每個數(shù)據(jù)編碼為8位碼元;m值為11,對應(yīng)M值為8,每個數(shù)據(jù)編碼為16位碼元。Miller編碼序列如圖6所示,每個編碼序列分別對應(yīng)M值為2、4、8。由圖可知數(shù)據(jù)編碼時,只有在數(shù)據(jù)-0和-0邊界電平不發(fā)生翻轉(zhuǎn)跳變以外其他數(shù)據(jù)邊界處都會發(fā)生電平的翻轉(zhuǎn)跳變。

dzyj1-t6.gif

    與FM0編碼類似,Miller除了采用電平翻轉(zhuǎn)實(shí)現(xiàn)編碼外,編碼結(jié)束后在數(shù)據(jù)的尾部同樣需要添加結(jié)束標(biāo)志。FM0采用固定碼流作為結(jié)束標(biāo)志,即保持持續(xù)碼元電平。但是Miller編碼的結(jié)束標(biāo)志相對會復(fù)雜一些,如圖7所示。

dzyj1-t7.gif

3 驗(yàn)證架構(gòu)

    本文設(shè)計UVM平臺如圖8所示。

dzyj1-t8.gif

    組件搭建描述:

    (1)interface:聲明接口。

    (2)transaction(數(shù)據(jù)包):繼承于uvm_sequence_item,利用隨機(jī)化和相關(guān)約束約束產(chǎn)生隨機(jī)數(shù)據(jù),創(chuàng)建兩個transaction對象,transaction_in在DUT輸入端輸入,transaction_out在DUT輸出與參考模型的輸出相比較。

    (3)sequence類:繼承于uvm_sequence,加入objection機(jī)制來控制驗(yàn)證平臺的關(guān)閉,利用repeat( )來控制執(zhí)行的次數(shù)。

    (4)sequencer:繼承于uvm_sequencer,連接driver,實(shí)現(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中設(shè)置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調(diào)入,并將數(shù)據(jù)存儲,用來與monitor監(jiān)測到的DUT的輸出做比較。

    設(shè)計FM0編碼的C_Model。模型輸入包括了m參數(shù)、data,輸出編碼后數(shù)據(jù)及編碼后的數(shù)據(jù)長度。首先需要將數(shù)據(jù)讀入模型,根據(jù)數(shù)據(jù)電平編碼。編碼算法主要設(shè)置一個變量data_tmp,在編碼開始時設(shè)置為1,如果是編碼-0,則輸出碼元~data_tmp和data_tmp,data_tmp值保持不變。如果是編碼-1,則輸出碼元~data_tmp和~data_tmp,data_tmp值取反。通過不斷更新data_tmp值來實(shí)現(xiàn)數(shù)據(jù)的編碼輸出,編碼完成后添加結(jié)束標(biāo)識符。

    設(shè)計Miller副載波調(diào)制編碼的C_Model,模型輸入包括了m參數(shù)、data,結(jié)合副載波調(diào)制類型和數(shù)據(jù)類型,將編碼后的數(shù)據(jù)及長度輸出,另外,由于Miller前同步碼最后一位碼元電平為低,因此其初始data_tmp應(yīng)為0,結(jié)合m的值進(jìn)行編碼,編碼完成后添加結(jié)束標(biāo)識符。

    (9)Scoreboard類:繼承于uvm_scoreboard,將monitor_after檢測到的輸出與reference_model得到的輸出做比較。

    (10)env類:繼承于uvm_env,聲明并例化agent,reference_model,scoreboard,利用端口將它們連接起來。

    (11)Test類:繼承于uvm_test,聲明并例化env,設(shè)置default_sequence來啟動sequence。

    (12)Top模塊:聲明接口,實(shí)現(xiàn)DUT和平臺互連,設(shè)置時鐘信號。

4 仿真結(jié)果

    環(huán)境搭建完畢后用QuestaSim進(jìn)行仿真驗(yàn)證,根據(jù)輸出的波形和驗(yàn)證信息比較DUT功能的正確與否,并查看輸出的功能覆蓋率來檢測各功能點(diǎn)的實(shí)現(xiàn)狀況。

    由圖9所示可以發(fā)現(xiàn),UVM計分板中顯示驗(yàn)證通過,DUT的輸出和模型的輸出是一致的,DUT的設(shè)計滿足功能實(shí)現(xiàn)。

dzyj1-t9.gif

    由圖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位是結(jié)束標(biāo)識符00,根據(jù)FM0編碼原則結(jié)果是正確的;而m=1,data=3′111,得到的編碼后數(shù)據(jù)為1001_0110_1001_0110,數(shù)據(jù)長度為16位,最后4位0110是結(jié)束標(biāo)識符,根據(jù)miller編碼原則結(jié)果是正確的。

dzyj1-t10.gif

    由圖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位是結(jié)束標(biāo)識符1010_0101,根據(jù)miller編碼原則結(jié)果是正確的;而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是結(jié)束標(biāo)識符,根據(jù)miller編碼原則結(jié)果也是正確的。

dzyj1-t11.gif

    圖12是一個由覆蓋率驅(qū)動并且受約束的隨機(jī)分層測試平臺所產(chǎn)生的整個FM0、Miller編碼仿真波形圖,由圖可見,平臺跑了很多個testcase。

dzyj1-t12.gif

    圖13描述此DUT的功能覆蓋率,F(xiàn)M0編碼以及Miller編碼的3種模式都覆蓋到了,各功能點(diǎn)的覆蓋率達(dá)到了100%。

dzyj1-t13.gif

5 結(jié)論

    UVM驗(yàn)證方法學(xué)作為目前主流的IC驗(yàn)證方法學(xué),盡管在前期搭建驗(yàn)證平臺的的時間較長,但是執(zhí)行效率很高,可以縮短整個研發(fā)的驗(yàn)證時間。本文介紹了基于DPI-C接口和UVM相結(jié)合的驗(yàn)證環(huán)境,實(shí)現(xiàn)了C程序與基于UVM環(huán)境的接口對接,使用受約束的隨機(jī)激勵以及覆蓋率驅(qū)動,使驗(yàn)證平臺中程序開發(fā)方便且調(diào)試方便,縮短了驗(yàn)證周期,保證了驗(yàn)證的完備性,有效地縮短了驗(yàn)證周期,提高了驗(yàn)證效率,加大了芯片的面試可能性。

參考文獻(xiàn)

[1] 張強(qiáng).UVM實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2014.

[2] 劉斌.芯片驗(yàn)證漫游指南[M].北京:電子工業(yè)出版社,2018.

[3] 程剛,蔡敏.基于SystemVerilog的SoC功能驗(yàn)證方法研究[J].科學(xué)技術(shù)與工程,2009(22):6814-6818.

[4] 克里斯·斯皮爾.SystemVerilog驗(yàn)證[M].張春,譯.北京:科學(xué)出版社,2009.

[5] 徐偉俊,楊鑫,陳先勇,等.針對功能覆蓋率的驗(yàn)證過程[J].中國集成電路,2007(7):58-62.

[6] 克里斯·斯皮爾.SystemVerilog驗(yàn)證:測試平臺編寫指南[M].張春,麥宋平,趙益新,譯.北京:科學(xué)出版社,2009.

[7] 李璐,周春良,馮曦,等.基于DPI-C接口的可擴(kuò)展SOC驗(yàn)證平臺[J].電子設(shè)計工程,2018,26(4):136-140.

[8] Michael Keating.Reuse methodology manual for system-on-a-chip design[M].Third Edition.Kluwer Academic Publishers,2002.



作者信息:

張  靜,卜  剛

(南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京211106)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。