• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      王遠(yuǎn) 陳孟東 陳冬 劉楊 齊鵬

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

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

      中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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概述

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

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

      2 System Verilog與C語(yǔ)言接口介紹

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

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

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

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

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

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

      2.2開(kāi)放數(shù)組

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

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

      2.3復(fù)合類(lèi)型

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

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

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

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

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

      圖1

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

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

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

      圖2

      3.2配置接口

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

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

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

      其中,返回值為1表示配置成功,返回0表示配置過(guò)程中出錯(cuò);參數(shù)addr表示所配置參數(shù)在地址列表中的地址,參數(shù)data則為相應(yīng)地址所配置的芯片參數(shù)值,這里data采用開(kāi)放數(shù)組的方式來(lái)處理相應(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);

      類(lèi)似函數(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ù)方向?yàn)閛utput,因?yàn)檫@里是讀取芯片參數(shù),data的數(shù)據(jù)空間需要在System Verilog中先分配好[5]。

      3.3發(fā)送方向

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

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

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

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

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

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

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

      3.4接收方向

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

      int recv(const svOpenArrayHandle data);

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

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

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

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

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

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

      參考文獻(xiàn):

      [1]周卓.基于SV語(yǔ)言的802.11 MAC芯片邏輯驗(yàn)證方案[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驗(yàn)證方法學(xué)[M].夏宇聞,楊雷,陳先勇,等,譯.北京:北京航空航天大學(xué)出版社,2007.

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

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

      茶陵县| 瑞昌市| 高淳县| 郧西县| 眉山市| 大新县| 德保县| 南靖县| 浙江省| 临武县| 邹平县| 义乌市| 晋城| 宣武区| 吉安市| 泰来县| 塔河县| 商丘市| 西安市| 稷山县| 邓州市| 定边县| 佛坪县| 沅江市| 南投市| 明星| 且末县| 进贤县| SHOW| 滁州市| 沁源县| 连南| 南昌市| 大城县| 界首市| 大埔区| 莱阳市| 扬中市| 达拉特旗| 黄龙县| 九龙坡区|