文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.01.002
中文引用格式: 李皓,蘇秀紅. 基于UVM和Matlab搭建的DVB-S編碼調(diào)制系統(tǒng)驗(yàn)證平臺(tái)[J].電子技術(shù)應(yīng)用,2016,42(1):15-18.
英文引用格式: Li Hao,Su Xiuhong. A DVB-S coding and modulation systems functional verification platform based on UVM and Matlab[J].Application of Electronic Technique,2016,42(1):15-18.
0 引言
隨著信號(hào)處理系統(tǒng)日益復(fù)雜,數(shù)字芯片的功能驗(yàn)證已經(jīng)成為了影響芯片上市時(shí)間和成本的關(guān)鍵。然而信號(hào)處理芯片的系統(tǒng)級(jí)驗(yàn)證仍面臨著諸多挑戰(zhàn)。盡管在測(cè)試驗(yàn)證領(lǐng)域已經(jīng)發(fā)展出了很多自動(dòng)驗(yàn)證方法,但是目前在驗(yàn)證復(fù)雜信號(hào)處理算法時(shí),多數(shù)仍需要使用人工添加測(cè)試用例的方法進(jìn)行驗(yàn)證,耗費(fèi)了大量人力物力。
驗(yàn)證信號(hào)處理算法的難點(diǎn)主要集中在如何使用合適的方法搭建高效的參考模型。
信號(hào)處理系統(tǒng)中一般包含大量復(fù)雜的數(shù)學(xué)算法,使用硬件語(yǔ)言實(shí)現(xiàn)這些算法的驗(yàn)證工作往往需要豐富的經(jīng)驗(yàn)與技巧。如果使用硬件語(yǔ)言SystemVerilog來(lái)對(duì)這些算法進(jìn)行驗(yàn)證,即便不考慮對(duì)驗(yàn)證工程師經(jīng)驗(yàn)與技巧的要求,也應(yīng)注意到使用硬件語(yǔ)言SystemVerilog來(lái)實(shí)現(xiàn)這些復(fù)雜算法很可能會(huì)使用與被測(cè)件相近的設(shè)計(jì)思路,產(chǎn)生類似的錯(cuò)誤,從而遺漏一些致命錯(cuò)誤。正是考慮到這一點(diǎn),本文提出了一種使用class="innerlink" href="http://ihrv.cn/tags/Matlab" title="Matlab" target="_blank">Matlab軟件與高級(jí)驗(yàn)證方法學(xué)(Universal Verification Methodology,UVM)聯(lián)合搭建的功能驗(yàn)證平臺(tái)。利用UVM提供的直接編程接口(Direct Programming Interface,DPI)在驗(yàn)證平臺(tái)中通過(guò)C++連接Matlab,實(shí)現(xiàn)信號(hào)處理系統(tǒng)中復(fù)雜的算法部分的驗(yàn)證,從而大幅提高了驗(yàn)證平臺(tái)開發(fā)效率以及平臺(tái)的復(fù)用性,加快了仿真驗(yàn)證時(shí)間。
1 DVB-S編碼調(diào)制系統(tǒng)
數(shù)字視頻廣播(Digital Video Broacasting)是歐洲電信標(biāo)準(zhǔn)協(xié)會(huì)(European Telecommunications Standards Institute,ETIS)制訂的關(guān)于數(shù)字電視衛(wèi)星業(yè)務(wù)中幀結(jié)構(gòu)、信道編碼和調(diào)制的標(biāo)準(zhǔn)[1],被包括我國(guó)在內(nèi)的絕大多數(shù)國(guó)家和地區(qū)所采用。該標(biāo)準(zhǔn)針對(duì)衛(wèi)星數(shù)字多節(jié)目電視以及高清電視節(jié)目在固定衛(wèi)星業(yè)務(wù)和廣播衛(wèi)星業(yè)務(wù)的一次發(fā)送和二次轉(zhuǎn)發(fā)作出的規(guī)定,其調(diào)制方式采用四位移相鍵控(Quaternary Phase Shift Keying,QPSK),并采用基于卷積碼和RS(Reed-Solomon)碼的級(jí)聯(lián)糾錯(cuò)編碼。根據(jù)ETSI的ETS 300 421的規(guī)定,DVB-S的編碼調(diào)制原理框圖如圖1所示。
根據(jù)DVB-S標(biāo)準(zhǔn)規(guī)定并結(jié)合實(shí)際使用時(shí)對(duì)參數(shù)的配置以及數(shù)據(jù)實(shí)時(shí)監(jiān)測(cè)的需求,DVB-S的編碼調(diào)制系統(tǒng)結(jié)構(gòu)框圖如圖2所示。
2 UVM驗(yàn)證平臺(tái)
2.1 驗(yàn)證平臺(tái)概述
本平臺(tái)的驗(yàn)證是系統(tǒng)級(jí)的功能驗(yàn)證,主要目的是確保DVB-S編碼調(diào)制系統(tǒng)電路設(shè)計(jì)與功能規(guī)范定義功能吻合。在DVB-S編碼調(diào)制系統(tǒng)電路外圍搭建UVM驗(yàn)證平臺(tái),采用受約束的隨機(jī)測(cè)試方法將激勵(lì)施加到被測(cè)件的輸入,最后通過(guò)輸出進(jìn)行自動(dòng)比較,檢查是否正確,同時(shí)也要查看覆蓋率是否達(dá)到了目標(biāo)要求,如果沒(méi)有達(dá)到,應(yīng)該開發(fā)新的有效驗(yàn)證場(chǎng)景,通過(guò)迭代完成驗(yàn)證收斂[2]。其代碼覆蓋率和功能點(diǎn)覆蓋率要求均為100%。平臺(tái)使用的UVM庫(kù)版本為1.1c,Matlab版本為2008b。
2.2 基于UVM的驗(yàn)證平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
2.2.1 驗(yàn)證平臺(tái)結(jié)構(gòu)
通用驗(yàn)證方法學(xué)UVM是基于SystemVerilog開發(fā)的一套開源類庫(kù),起源于OVM驗(yàn)證方法學(xué)[3]。UVM類庫(kù)中定義了一系列的標(biāo)準(zhǔn)類,并結(jié)合標(biāo)準(zhǔn)接口、Factory 機(jī)制、Phase機(jī)制、分層結(jié)構(gòu)以及面向?qū)ο蟮脑O(shè)計(jì)思想使整個(gè)平臺(tái)具有靈活配置、可重用、可擴(kuò)展升級(jí)等優(yōu)點(diǎn)[4]。本文提出的驗(yàn)證平臺(tái)成功地應(yīng)用于DVB-S編碼調(diào)制系統(tǒng)的仿真驗(yàn)證,其最主要的特點(diǎn)就是將Matlab與UVM相融合,從而解決了僅用硬件語(yǔ)言難以驗(yàn)證的復(fù)雜數(shù)字處理算法。該驗(yàn)證平臺(tái)的結(jié)構(gòu)如圖3所示。
除了在典型UVM驗(yàn)證平臺(tái)結(jié)構(gòu)之外,本驗(yàn)證平臺(tái)在參考模型(Reference model)中增加了外部接口連接到Matlab程序,對(duì)相應(yīng)數(shù)據(jù)進(jìn)行處理。
2.2.2 驗(yàn)證平臺(tái)頂層組件設(shè)計(jì)
本驗(yàn)證平臺(tái)中的頂層主要是連接頂層Test_top和環(huán)境類Environment。在Test_top中主要完成6個(gè)主要功能:被測(cè)件的例化,測(cè)試環(huán)境(主要指環(huán)境類)的例化,接口的例化,被測(cè)件、測(cè)試環(huán)境和接口之間的相互連接,整個(gè)測(cè)試環(huán)境時(shí)鐘和復(fù)位的產(chǎn)生,驗(yàn)證平臺(tái)的啟動(dòng)。
在環(huán)境類(Environment)中,主要完成5項(xiàng)工作:例化代理類,例化參考模型,例化記分板,連接以上三個(gè)部分,完成驗(yàn)證平臺(tái)的通用設(shè)置。在驗(yàn)證平臺(tái)中,組件在環(huán)境類中的相互鏈接通過(guò)UVM中的fifo鏈接,這樣可以方便地實(shí)現(xiàn)各組件間的異步接收。環(huán)境類處于驗(yàn)證平臺(tái)的頂層,因此在環(huán)境類中同時(shí)也完成了一些與整個(gè)驗(yàn)證平臺(tái)相關(guān)的設(shè)置工作,如設(shè)置平臺(tái)可接受的最大錯(cuò)誤數(shù)量,信息輸出等級(jí)等。
2.2.3 測(cè)試組件的設(shè)計(jì)
測(cè)試組件是驗(yàn)證平臺(tái)的最重要也是核心設(shè)計(jì),完成了驗(yàn)證平臺(tái)的主要功能。其主要設(shè)計(jì)思想是盡可能地將對(duì)被測(cè)件單一功能項(xiàng)測(cè)試的組件進(jìn)行封裝,使組件能夠盡可能少地依賴外部控制。主要包括7類關(guān)鍵組件:
(1)代理(agent):測(cè)試組件的頂層。由于DVB-S編碼調(diào)制系統(tǒng)的輸入輸出關(guān)系相對(duì)簡(jiǎn)單,因此在本驗(yàn)證平臺(tái)中只使用了一個(gè)agent對(duì)測(cè)試組件進(jìn)行封裝。agent主要完成sequencer、驅(qū)動(dòng)器(driver)、監(jiān)視器(monitor)的例化和連接。
(2)驅(qū)動(dòng)器(driver):主要實(shí)現(xiàn)驗(yàn)證平臺(tái)向被測(cè)件間輸出的接口協(xié)議。在這里事物級(jí)的數(shù)據(jù)流將被轉(zhuǎn)換為比特流,還有一個(gè)重要功能是將正在發(fā)送數(shù)據(jù)放到uvm_analysis_port端口上,供驗(yàn)證平臺(tái)使用。在本驗(yàn)證平臺(tái)中主要有兩個(gè)driver,分別是向參數(shù)寄存器組發(fā)送參數(shù)的driver_parameter以及發(fā)送串行數(shù)據(jù)的driver_data。
(3)監(jiān)視器(monitor):主要實(shí)現(xiàn)驗(yàn)證平臺(tái)接收被測(cè)件輸出的接口協(xié)議。這里將輸出總線上的比特流轉(zhuǎn)換為數(shù)據(jù)幀放到uvm_analysis_port,供驗(yàn)證平臺(tái)使用。在本驗(yàn)證平臺(tái)中也設(shè)置了兩個(gè)監(jiān)視器monitor_data和monitor_source,用來(lái)分別監(jiān)視輸出的數(shù)據(jù)流以及對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行讀取。
(4)transaction類:是傳入數(shù)據(jù)的主要載體。在驗(yàn)證平臺(tái)中,共設(shè)置了3個(gè)不同的transaction類,用于發(fā)送參數(shù)和原始數(shù)據(jù)的transaction_source,用于接收結(jié)果的transaction_data以及后面將提到的transaction_case。
(5)sequence類:主要功能是將測(cè)試用例傳來(lái)的測(cè)試場(chǎng)景轉(zhuǎn)換為transaction中數(shù)據(jù)。在本驗(yàn)證平臺(tái)中sequence類主要將測(cè)試用例傳來(lái)的參數(shù)傳入Matlab程序,并由Matlab產(chǎn)生真正的原始數(shù)據(jù)寫入到transaction_source中。
(6)參考模型(reference model):主要是模擬被測(cè)件的行為,通過(guò)uvm_blocking_get_port接收驅(qū)動(dòng)器driver_parameter和driver_data傳來(lái)的數(shù)據(jù),并將這些數(shù)據(jù)傳入Matlab進(jìn)行處理,然后將處理結(jié)果通過(guò)uvm_analysis_port傳給記分板。
(7)記分板(scoreboard):主要功能是比對(duì)參考模型和被測(cè)件產(chǎn)生的數(shù)據(jù),以確定是否存在問(wèn)題。記分板(scoreboard)通過(guò)uvm_blocking_get_port接收來(lái)自監(jiān)視器monitor_data、monitor_source以及參考模型的數(shù)據(jù)。
2.3 C++、Matlab接口的設(shè)計(jì)
2.3.1 UVM驗(yàn)證平臺(tái)與C++的接口
SystemVerilog提供了方便的DPI接口來(lái)連接C++代碼,只需SV文件中進(jìn)行簡(jiǎn)單的聲明并在腳本中進(jìn)行相應(yīng)的編譯鏈接即可以使用[5]。在本驗(yàn)證平臺(tái)中首先在參數(shù)文件中加入了對(duì)計(jì)算函數(shù)compute的聲明如下:
import "DPI-C" context task compute(input int data[S_NUM], output int I[NUM], output int Q[NUM]);
然后在model_data中直接調(diào)用函數(shù)compute。在驗(yàn)證平臺(tái)中C++與驗(yàn)證平臺(tái)的接口主要是用于將驗(yàn)證平臺(tái)與Matlab程序相連接,因此沒(méi)有用到復(fù)雜的功能,僅僅是將數(shù)據(jù)以合適的類型傳入。這樣設(shè)計(jì)的目的是有效利用用于原理驗(yàn)證的Matlab仿真程序。盡管Matlab仿真程序的運(yùn)行效率遠(yuǎn)低于C++程序,但相對(duì)于HDL的仿真來(lái)說(shuō),這個(gè)效率問(wèn)題往往可以忽略,而且Matlab仿真程序擁有的多種算法資源加快了驗(yàn)證平臺(tái)的搭建。
2.3.2 C++與Matlab的接口
下面以compute函數(shù)為例說(shuō)明在C++中調(diào)用Matlab函數(shù)的過(guò)程。其中函數(shù)聲明如下。
int compute(const svOpenArrayHandle source_bit,svOpenArrayHandle data_i, const svOpenArrayHandle data_q)
在函數(shù)中,首先使用以下代碼啟動(dòng)Matlab,其中頭文件engine.h可在Matlab的安裝目錄下找到。
…
#include "engine.h"
Engine *ep;
engSetVisible(ep, 0);
…
使用自建函數(shù)input_arry將UVM傳入C++的數(shù)據(jù)data進(jìn)一步變換格式傳入Matlab中成為數(shù)據(jù)x代碼如下:
input_arry (ep, x, S_NUM , data);
其中自建函數(shù)input_arry如下:
void input_arry(Engine *ep, char *name, int num, const svOpenArrayHandle data_in)
{
/*
* 輸入: ep,打開matlab的句柄
* num,數(shù)組長(zhǎng)度
* name,寫入matlab的變量名
* data_in,寫入的向量
* 輸出:無(wú)
*/
int *input_i;
double *input_d= new double[num];;
mxArray *input = NULL;
input_i=(int *) svGetArrayPtr(data_in);
for(int i=0;i<num; i++)
{
input_d[i] = (double)input_i[i];
}
input = mxCreateDoubleMatrix(1, num, mxREAL);//數(shù)據(jù)格式生成
memcpy((void *)mxGetPr(input),(void *)input_d,num*sizeof(input_d[0]));//數(shù)據(jù)轉(zhuǎn)換
engPutVariable(ep, name, input);//向matlab寫數(shù)據(jù)
mxDestroyArray(input);
}
從Matlab到C++的轉(zhuǎn)換程序與此過(guò)程類似,僅作反向處理即可,這里就不再討論。最后將C++代碼編譯為動(dòng)態(tài)鏈接庫(kù)(dll)文件compute.dll,然后在腳本文件加入vsim-sv_lib./TestBench/c/compute即可完成整個(gè)連接過(guò)程。
3 測(cè)試結(jié)果與分析
仿真驗(yàn)證用例運(yùn)行完成后,對(duì)代碼進(jìn)行了回歸測(cè)試并對(duì)覆蓋率進(jìn)行統(tǒng)計(jì)?;貧w測(cè)試后代碼覆蓋率的統(tǒng)計(jì)結(jié)果為,DUT的代碼覆蓋率為99.72%,分支覆蓋率為98.63%。剩余未覆蓋到的情況如default語(yǔ)句很難覆蓋到,并對(duì)這種情況進(jìn)行了人工代碼走查。因此達(dá)到上述代碼覆蓋率百分比的情況可以認(rèn)為滿足了目標(biāo)覆蓋率要求。
UVM與Matlab聯(lián)合仿真驗(yàn)證平臺(tái)和完全使用硬件語(yǔ)言編寫的仿真驗(yàn)證平臺(tái)的仿真驗(yàn)證時(shí)間對(duì)比如圖4。從圖中可以看出使用純硬件語(yǔ)言驗(yàn)證平臺(tái)的測(cè)試用例平均運(yùn)行時(shí)間為5.192 4小時(shí),而使用UVM與Matlab聯(lián)合仿真驗(yàn)證平臺(tái)測(cè)試用例平均運(yùn)行時(shí)間為2.646 6小時(shí),平均節(jié)約了近50%的時(shí)間。
4 總結(jié)
本文采用基于UVM和Matlab聯(lián)合搭建的仿真驗(yàn)證平臺(tái)對(duì)DVB-S編碼調(diào)制系統(tǒng)進(jìn)行了功能驗(yàn)證,高效快速地達(dá)到了覆蓋率要求。該平臺(tái)與純硬件語(yǔ)言仿真驗(yàn)證平臺(tái)相比節(jié)約了近50%仿真驗(yàn)證時(shí)間,而且可以使用Matlab中成熟的工具箱對(duì)各種數(shù)字處理算法進(jìn)行編程,極大地降低了驗(yàn)證平臺(tái)開發(fā)難度,節(jié)約了開發(fā)時(shí)間并且提高了平臺(tái)的復(fù)用性。
文中構(gòu)建的平臺(tái)結(jié)構(gòu)移植性強(qiáng),對(duì)其他類似的信號(hào)處理系統(tǒng)驗(yàn)證開發(fā)具有非常大的借鑒意義。通過(guò)對(duì)UVM與Matlab聯(lián)合仿真環(huán)境的運(yùn)用,顯著提高了仿真驗(yàn)證效率,為復(fù)雜數(shù)字處理SoC驗(yàn)證提供了一條有意義的途徑。
參考文獻(xiàn)
[1] ETSI.EN 300 421.Digital Video Broacasting(DVB).Framing structure,channel coding and modulation for 11/12GHz satellite services[S].1997.
[2] 鐘文楓.SystemVerilog與功能驗(yàn)證[M].北京:機(jī)械工業(yè)出版社,2010:5-7.
[3] Accdlera.Universal verification methodology 1.1 user′s guide[M].Cadence Design Systems Inc.,Mentor Graphics Corp.,Synopsys Inc.,2011,5:2
[4] 田勁,王小力.基于UVM驗(yàn)證方法學(xué)的AES模塊級(jí)驗(yàn)證[J].微電子學(xué)與計(jì)算機(jī),2012(8).
[5] Chris Spear.System verilog for verification[M].Synopsys Inc.,2008:329.