《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于UVM和Matlab搭建的DVB-S編碼調(diào)制系統(tǒng)驗(yàn)證平臺(tái)
基于UVM和Matlab搭建的DVB-S編碼調(diào)制系統(tǒng)驗(yàn)證平臺(tái)
電子技術(shù)應(yīng)用2016年第1期
李 皓,蘇秀紅
中國(guó)工程物理研究院 總體工程研究所,四川 綿陽(yáng)621900
摘要: 提出了一種用于測(cè)試一個(gè)DVB-S編碼調(diào)制系統(tǒng)的功能驗(yàn)證平臺(tái)。該平臺(tái)使用高級(jí)驗(yàn)證方法學(xué)(Universal Verification Methodology,UVM)搭建了驗(yàn)證平臺(tái)的主要結(jié)構(gòu),并在驗(yàn)證平臺(tái)中使用外接Matlab作為復(fù)雜數(shù)字信號(hào)處理的參考模型。介紹了功能驗(yàn)證平臺(tái)的主要結(jié)構(gòu)和組件的設(shè)計(jì),詳細(xì)介紹了UVM通過(guò)直接編程接口(Direct Programming Interface,DPI)以C++為橋梁與Matlab連接的設(shè)計(jì)方法。通過(guò)實(shí)際仿真驗(yàn)證比較,使用這種方法搭建的聯(lián)合平臺(tái)比純硬件語(yǔ)言Verilog語(yǔ)言搭建的仿真驗(yàn)證平臺(tái)在驗(yàn)證時(shí)間上縮短了近50%,避免了對(duì)復(fù)雜信號(hào)處理驗(yàn)證模型的硬件語(yǔ)言設(shè)計(jì),提高了針對(duì)復(fù)雜信號(hào)處理系統(tǒng)驗(yàn)證平臺(tái)的搭建效率。
關(guān)鍵詞: UVM Matlab C DVB-S 功能驗(yàn)證
中圖分類號(hào): TN4
文獻(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.
A DVB-S coding and modulation systems functional verification platform based on UVM and Matlab
Li Hao,Su Xiuhong
Institute of Systems Engineering,China Academy of Engineering Physics,Mianyang 621900,China
Abstract: In this contribution, we present a function verification platform for DVB-S coding and modulation system. The main structure of the platform is based on the Universal Verification Methodology(UVM), and the Matlab code is used in the complex signal processing reference model. Along with the structure and modules, we describe the method for connecting the UVM platform and the Matlab via Direct Programming Interface(DPI) particularly. The simulation proves that our approach save near 50% simulation time comparing with the pure Verilog platform. In addition, this approach avoids designing complex signal processing reference model with Verilog and improves the designing efficiency for complex signal processing verification platform.
Key words : UVM;Matlab;C++;DVB-S;functional verification;co-simulation

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所示。

wdz1-t1.gif

    根據(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所示。

wdz1-t2.gif

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所示。

wdz1-t3.gif

    除了在典型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í)間。

wdz1-t4.gif

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.

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