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