国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于System Verilog的芯片模擬器設(shè)計與實現(xiàn)

2012-05-08 04:41王遠陳孟東陳冬劉楊齊鵬
電腦知識與技術(shù) 2012年7期

王遠 陳孟東 陳冬 劉楊 齊鵬

摘要:該文在對System Verilog與C語言的接口進行介紹的基礎(chǔ)上,詳細描述了兩者之間數(shù)據(jù)共享的基本方法,然后通過對一款示例芯片基本功能的分析,設(shè)計了芯片模擬器的四個基本接口函數(shù)并對其實現(xiàn)進行了簡要描述。通過該芯片模擬器設(shè)計與實現(xiàn)的介紹,可以從中了解System Verilog測試平臺下芯片模擬器實現(xiàn)的一般方法。

關(guān)鍵詞:System Verilog;芯片模擬器

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)07-1662-03

Design and Implementation of Chip Simulator Based on System Verilog

WANG Yuan1, CHEN Meng-dong1, CHEN Dong2, LIU Yang2, QI Peng2

(1.Jiangnan Institute of Computing Technology, Wuxi 214000, China; 2.65587 Army, Siping 136000, China)

Abstract: This paper introduces the interface between System Verilog and C, and describes the basic method of data sharing between two languages. Through the functional analysis of a sample chip, we design four interface functions of the chip simulator and describe their implementation. We can learn about the realization of chip simulator on System Verilog platform through this paper.

Key words: System Verilog; chip simulator

1概述

在當今百萬門級的ASIC設(shè)計中,驗證所占用的時間無疑成為縮短集成電路產(chǎn)品設(shè)計周期中的瓶頸。如何改進驗證方法,改善驗證手段,從而提高驗證效率,縮短驗證周期,是驗證人員乃至產(chǎn)品經(jīng)理們最關(guān)心的問題[1]。System Verilog結(jié)合了來自Verilog、VHDL、C++的概念,以及驗證平臺語言和斷言語言,將硬件描述語言HDL與現(xiàn)代的高層級驗證語言HVL結(jié)合了起來,使原本繁瑣費時的驗證工作變得相對簡單易行。與傳統(tǒng)的驗證方法相比,這種驗證方法大大提高了驗證工作的效率,縮短了驗證的周期,同時有力地保證了驗證的完備性。

同時,System Verilog提供了與其他語言的編程接口,可以通過和其他語言數(shù)據(jù)共享的方式進行相互交互,將驗證工作中的繁瑣復(fù)雜的功能交給軟件來實現(xiàn),提高驗證的效率和性能。這樣在芯片的驗證過程中,就可以通過數(shù)據(jù)共享將芯片的主要功能通過軟件來實現(xiàn),然后通過比對結(jié)果來驗證芯片功能的正確性。

2 System Verilog與C語言接口介紹

Verilog使用編程語言接口(PLI, Programming Language Interface)來跟C語言交互,相比之下System Verilog引入了直接編程接口(DPI, Direct Programming Interface),它能更加簡單的連接C、C++或者其他非Verilog編程語言[2]。

一旦聲明或者使用import語句“導(dǎo)入”了一個C子程序,就可以像調(diào)用System Verilog中的子程序一樣來調(diào)用它。import聲明定義了C任務(wù)和函數(shù)的原型,但使用的是System Verilog的數(shù)據(jù)類型,帶有返回值的C函數(shù)會被映射成一個System Verilog函數(shù),void類型的C函數(shù)則被映射成一個System Verilog任務(wù)或者void函數(shù)。導(dǎo)入的C子程序可以有多個參數(shù)或者沒有參數(shù),缺省情況下參數(shù)的方向是input,即數(shù)據(jù)從System Verilog流向C函數(shù),但是參數(shù)的方向也可以定義為output和inout。

通過DPI傳遞的每個變量都有兩個相匹配的定義,一個是System Verilog的,一個是C語言的,這里需要確保兩者使用的是兼容的數(shù)據(jù)類型。由于數(shù)據(jù)類型比較繁雜,為了說明兩者之間數(shù)據(jù)類型的對應(yīng)關(guān)系,以下就System Verilog和C語言之間的數(shù)據(jù)傳遞進行簡單介紹。

2.1數(shù)據(jù)類型映射

表1給出了System Verilog和C語言子程序輸入輸出之間數(shù)據(jù)類型的映射關(guān)系,C結(jié)構(gòu)類型在頭文件svdpi.h中定義,在使用時需要包含此頭文件。

在使用兩種語言進行對接交互的時候,函數(shù)參數(shù)和返回值的數(shù)據(jù)類型參照上表進行相應(yīng)轉(zhuǎn)換即可保證兩者的數(shù)據(jù)是兼容并可以互相通信使用的。

2.2開放數(shù)組

當需要在System Verilog和C之間共享數(shù)組的時候,可以采用反向工程的方式分析出數(shù)組在System Verilog中的存儲方式,而在C中根據(jù)數(shù)組的內(nèi)存映射方式進行操作。然而這種方式很容易出錯,一旦任何一個數(shù)組有變化,必須重新編寫代碼進行調(diào)試。在System Verilog中提供了“開放數(shù)組(open array)”來處理這種情況,這使得我們能夠編寫出可以操作任何大小數(shù)組的通用C代碼。在System Verilog中開放數(shù)組的查詢函數(shù)比較多,這里筆者就基本的開放數(shù)組的使用方法進行簡單介紹。

使用基本的開放數(shù)組在System Verilog和C程序之間傳遞數(shù)據(jù)時,在System Verilog中聲明相應(yīng)的C函數(shù),然后在C代碼中可以使用svOpenArrayHandle類型的句柄來引用此開放數(shù)組。該句柄指向一個含有字范圍等開放數(shù)組信息的結(jié)構(gòu),可以通過調(diào)用svGetArrayPtr等方法來獲取實際的數(shù)組元素,該函數(shù)返回一個void*類型的指針。

2.3復(fù)合類型

對于C和C++中比較復(fù)雜的類,就類屬性的內(nèi)存映射方式來講,兩種語言并不完全一致,不能直接共享對象。為了達到共享的目的,System Verilog測試平臺使用壓縮結(jié)構(gòu)來保存一個簡單的像素,使用類來封裝對像素的操作。通過使用壓縮和解壓縮的方法對兩種數(shù)據(jù)格式進行轉(zhuǎn)換,就可以使兩者共享符合類型的數(shù)據(jù)了。

3芯片模擬器的設(shè)計與實現(xiàn)

通過以上介紹,筆者針對芯片的整體架構(gòu)及功能,采用上述的System Verilog與C對接的方式對芯片模擬器整體架構(gòu)及主要功能模塊的設(shè)計和實現(xiàn)進行詳細說明。

3.1芯片模擬器整體架構(gòu)

在基于System Verilog與C對接的模擬器實現(xiàn)中,System Verilog作為整個驗證環(huán)境的平臺,將測試數(shù)據(jù)分別發(fā)送給芯片的硬件邏輯和芯片模擬器,然后收集兩者的數(shù)據(jù)輸出結(jié)果進行比較,以期判斷芯片邏輯的正確與否[3],具體的結(jié)構(gòu)如圖1所示。

圖1

其中,芯片模擬器采用軟件的方法實現(xiàn)了芯片邏輯需要驗證的功能,并根據(jù)整個驗證平臺的需要添加需要的輔助功能。為了更直觀的介紹芯片模擬器的設(shè)計和實現(xiàn),這里以筆者實現(xiàn)的一個簡單芯片模擬器為例進行說明。

此芯片的主要功能可以簡化為發(fā)送、接收數(shù)據(jù)以及配置芯片參數(shù)這三個簡單的功能,芯片模擬器的功能則是在這三個接口上對芯片的功能進行模擬實現(xiàn),然后比對相應(yīng)的數(shù)據(jù)是否正確。其中發(fā)送方向上對測試數(shù)據(jù)進行處理然后發(fā)送輸出,接收方向則從接收方向?qū)y試數(shù)據(jù)進行處理,配置芯片參數(shù)通過測試數(shù)據(jù)生成模塊將參數(shù)發(fā)送給芯片模擬器進行配置。需要注意的是,為了驗證芯片邏輯的正確與否,這里System Verilog平臺發(fā)送給芯片邏輯和芯片模擬器的數(shù)據(jù)必須是完全相同的,這樣才能保證通過結(jié)果比對得到的測試結(jié)果是有參考價值的。

通過以上分析,筆者將這三個主要功能分別進行實現(xiàn),其中發(fā)送和接收數(shù)據(jù)兩部分需要用到芯片參數(shù)配置部分所配置的芯片參數(shù),因而這里將芯片參數(shù)設(shè)定為全局參數(shù),方便芯片參數(shù)配置部分進行參數(shù)配置以及發(fā)送和接收數(shù)據(jù)時依照此參數(shù)進行數(shù)據(jù)處理。芯片參數(shù)配置設(shè)計一個單獨的接口方便進行參數(shù)配置,同時,為了驗證參數(shù)配置地是否正確,需要另外的接口來從全局參數(shù)中讀取芯片參數(shù)來驗證參數(shù)配置的正確性。發(fā)送數(shù)據(jù)方向設(shè)計一個接口來處理發(fā)送方向的數(shù)據(jù),這里需要用到芯片的參數(shù),通過以上的設(shè)計簡單的讀取全局芯片參數(shù)即可。接收數(shù)據(jù)方向同樣設(shè)計一個接口來處理接收方向的數(shù)據(jù),和發(fā)送方向類似,通過讀取全局芯片參數(shù)進行數(shù)據(jù)處理。芯片模擬器的整體結(jié)構(gòu)如圖2所示:

圖2

3.2配置接口

配置接口負責芯片參數(shù)的配置以及驗證所配置參數(shù)的正確性。由于需要配置的參數(shù)比較多,這里通過地址譯碼的方式來進行配置;同樣,讀取芯片參數(shù)時也需要相應(yīng)的地址來讀取所需的芯片參數(shù),基于此兩個函數(shù)的結(jié)構(gòu)就確定了。

配置芯片參數(shù)的函數(shù)接口如下:

int setReg(const svBitVecVal* addr, const svOpenArrayHandle data);

其中,返回值為1表示配置成功,返回0表示配置過程中出錯;參數(shù)addr表示所配置參數(shù)在地址列表中的地址,參數(shù)data則為相應(yīng)地址所配置的芯片參數(shù)值,這里data采用開放數(shù)組的方式來處理相應(yīng)數(shù)據(jù),為共享數(shù)據(jù)提供了便利[4]。為了能夠調(diào)用此函數(shù),在相應(yīng)的System Verilog代碼中需要導(dǎo)入此函數(shù),具體如下:

import“DPI-C”function int setReg(input bit [7:0] addr, input bit data[]);

讀取芯片參數(shù)的函數(shù)接口如下:

int getReg(const svBitVecVal* addr, const svOpenArrayHandle data);

類似函數(shù)setReg,返回值為1表示讀取參數(shù)成功,為0表示讀取失敗;參數(shù)addr表示要讀取參數(shù)的地址,data則是讀出的芯片參數(shù)。同樣,為了能夠調(diào)用此函數(shù),也需要在相應(yīng)的System Verilog代碼中導(dǎo)入此函數(shù),具體如下:

import“DPI-C”function int getReg(input bit [7:0] addr, output bit data[]);

這里需要注意的是此處data的數(shù)據(jù)方向為output,因為這里是讀取芯片參數(shù),data的數(shù)據(jù)空間需要在System Verilog中先分配好[5]。

3.3發(fā)送方向

發(fā)送方向和接收方向的數(shù)據(jù)處理是芯片最主要的功能,此部分需要按照芯片邏輯所設(shè)計的功能進行模擬實現(xiàn),這兩部分中所用到的芯片參數(shù)已通過讀取全局參數(shù)解決,其他部分只需用C語言來進行相應(yīng)功能的實現(xiàn)即可。具體的函數(shù)接口如下:

int send(const svOpenArrayHandle data, const svBitVecVal* type);

其中函數(shù)返回值為1表示發(fā)送方向數(shù)據(jù)處理完成并成功發(fā)送,0表示發(fā)送方向出錯;data即為需要處理的數(shù)據(jù),type表示待處理數(shù)據(jù)的數(shù)據(jù)類型。System Verilog中導(dǎo)入此函數(shù)的方式如下:

import“DPI-C”function send(input bit data[], input bit [2:0] type);

在進行數(shù)據(jù)處理時只需要在相應(yīng)的子函數(shù)中將data進行數(shù)據(jù)類型轉(zhuǎn)換,使其能夠在C語言中進行處理,這樣就可以使用軟件的方法對芯片功能進行模擬了。具體方法如下:

unsigned char* data_in = (unsigned char*)svGetArrayPtr(data);

通過函數(shù)將data轉(zhuǎn)換為C語言中的指針類型,這樣就可以通過指針訪問System Verilog中的數(shù)據(jù),實現(xiàn)System Verilog和C的數(shù)據(jù)共享,完成芯片相應(yīng)功能的模擬。

3.4接收方向

接收方向的數(shù)據(jù)處理和發(fā)送方向類似,函數(shù)接口如下:

int recv(const svOpenArrayHandle data);

其中函數(shù)返回值為1表示接收方向數(shù)據(jù)處理完成,0表示接收方向出錯;data即為接收的待處理數(shù)據(jù)。System Verilog中導(dǎo)入此函數(shù)的方式如下:

import“DPI-C”function recv(input bit data[]);

數(shù)據(jù)處理以及數(shù)據(jù)共享的實現(xiàn)和發(fā)送方向的處理類似,這里不再贅述。

4結(jié)論及下一步工作

本文首先介紹System Verilog和C語言之間數(shù)據(jù)交互的方法以及兩者互相調(diào)用子函數(shù)的方式,然后通過筆者以該方式實現(xiàn)的芯片模擬器為例進行詳細說明,以此方式來對整個芯片的功能進行驗證,具有一定的普遍性。通過這種方式實現(xiàn)的芯片模擬器比較靈活,并且實現(xiàn)起來相對硬件描述語言簡單,同時通過數(shù)據(jù)共享,能夠?qū)π酒δ艿母鱾€方面進行比較詳盡的模擬,在芯片驗證工作中具有非常出色的表現(xiàn)。

最后,需要指出,通過這種方式實現(xiàn)的芯片模擬器,在一些方面還存在著不足,在硬件更底層的模擬中還不能夠完全取代其他驗證方式;在一些比較特殊的情形中通過軟件來模擬比硬件描述語言更為復(fù)雜,這也是此方法的不足;另外,筆者實現(xiàn)的芯片模擬器在芯片功能模擬時模擬程度還不是非常精確,需要后續(xù)的改進和完善。

參考文獻:

[1]周卓.基于SV語言的802.11 MAC芯片邏輯驗證方案[J].現(xiàn)代電子技術(shù),2009(18).

[2] Chris Spear.System Verilog for Verification[M].Springer,2006.

[3] Janick Bergeron,Eduard Cerny,Alan Hunter,et al.System Verilog驗證方法學[M].夏宇聞,楊雷,陳先勇,等,譯.北京:北京航空航天大學出版社,2007.

[4]程剛,蔡敏.基于System Verilog的SoC功能驗證方法研究[J].科學技術(shù)與工程,2009(22).

[5]李磊,羅勝欽.基于VMM方法的SOC集成驗證[J].電子與封裝,2011,11(1).