, ,
(中國(guó)電子科技集團(tuán)公司第三十八研究所, 安徽合肥 230088)
隨著半導(dǎo)體工藝的快速發(fā)展,以及“摩爾定律”所預(yù)言的晶體管增長(zhǎng)趨勢(shì),芯片規(guī)模、設(shè)計(jì)復(fù)雜度都在持續(xù)不斷迅速增大,片上系統(tǒng)(System on Chip, SoC)已成為主流的設(shè)計(jì)技術(shù)。為了縮短IC開發(fā)周期,目前的主流設(shè)計(jì)方法是采用軟件與硬件同時(shí)開發(fā)的手段,在實(shí)體硬件還沒有就位之前,軟件開發(fā)調(diào)試一般在系統(tǒng)仿真平臺(tái)上進(jìn)行。在項(xiàng)目早期構(gòu)建功能完備并支持源代碼級(jí)調(diào)試的全芯片仿真平臺(tái)能夠大幅提升目標(biāo)軟件的開發(fā)效率,對(duì)整個(gè)項(xiàng)目的順利完成以及芯片產(chǎn)品的迅速推廣具有重要意義。
使用完全基于Verilog HDL硬件描述語(yǔ)言的數(shù)字前端仿真平臺(tái)[1-4]可以保證系統(tǒng)的周期精確性與功能完整性,但存在仿真速度慢且無(wú)法實(shí)現(xiàn)源代碼級(jí)調(diào)試的缺點(diǎn)。只能通過(guò)指令級(jí)或者匯編級(jí)的調(diào)試發(fā)現(xiàn)問題再反向追溯到高級(jí)語(yǔ)言的源代碼,不僅調(diào)試難度大而且效率低下。
使用基于C/C++的純軟件仿真方法[5-8]建立的目標(biāo)機(jī)模型可以支持源代碼級(jí)調(diào)試且具有描述能力強(qiáng)、抽象層次豐富、仿真速度快等諸多優(yōu)勢(shì),但是在一個(gè)較大規(guī)模的全芯片系統(tǒng)中想要同時(shí)獲取所有子模塊對(duì)應(yīng)的軟件模型難度較大,在實(shí)際操作中幾乎很難滿足。另一方面,由于到目前為止,工業(yè)界IC設(shè)計(jì)還是廣泛采用基于硬件描述語(yǔ)言Verilog HDL,因此基于Verilog HDL的前端數(shù)字仿真IP庫(kù)相當(dāng)豐富。如果能夠有效地結(jié)合兩類不同的模型建立可源碼級(jí)調(diào)試的系統(tǒng)級(jí)仿真平臺(tái),則對(duì)于早期開展目標(biāo)機(jī)相關(guān)的操作系統(tǒng)程序及硬件驅(qū)動(dòng)程序都具有重要意義。
本文針對(duì)以上問題,首先在第1節(jié)介紹基于SystemC[9]的純軟件虛擬仿真方法并分析其特點(diǎn);第2節(jié)提出了一種基于VPI技術(shù)的可支持C語(yǔ)言源碼級(jí)調(diào)試的全芯片混合仿真方法并通過(guò)實(shí)際工程應(yīng)用證明其有效性;最后總結(jié)全文。
基于片上網(wǎng)絡(luò)的復(fù)雜SoC電子系統(tǒng)的設(shè)計(jì)需要使用先進(jìn)的系統(tǒng)級(jí)描述語(yǔ)言對(duì)其進(jìn)行描述。SystemC是由OSCI(Open SystemC Initiative)提出的一種基于C++的統(tǒng)一建模平臺(tái),其本質(zhì)是在C++的基礎(chǔ)上添加了硬件擴(kuò)展庫(kù)和仿真核,這使得SystemC可以在不同的抽象級(jí)別對(duì)復(fù)雜電子系統(tǒng)建模,解決了傳統(tǒng)C++語(yǔ)言在描述硬件時(shí)不具有并發(fā)性、時(shí)序概念等缺陷,從而可以在系統(tǒng)級(jí)用高級(jí)語(yǔ)言統(tǒng)一描述軟件和硬件行為。SystemC基本體系結(jié)構(gòu)框架如圖1所示。
SystemC中關(guān)鍵類的繼承關(guān)系如圖2所示,其最底層是一個(gè)節(jié)拍式仿真內(nèi)核,由sc_simcontext類封裝。其他常用的關(guān)鍵類型如下。
1) 模塊(sc_module)
一種層次化實(shí)體,可嵌套其他模塊和過(guò)程,一般一個(gè)完整的SystemC仿真系統(tǒng)可由大量模塊經(jīng)實(shí)例化后互聯(lián)組成。
2) 過(guò)程(sc_process)
用來(lái)描述模塊的具體功能,可由事件觸發(fā),多個(gè)過(guò)程可并行執(zhí)行,SystemC支持3種不同的過(guò)程類型:方法過(guò)程(sc_method、線程過(guò)程(sc_thread)及時(shí)鐘線程(sc_cthread)。
3) 接口(sc_interface)
定義了一組方法實(shí)現(xiàn)目標(biāo),但是不實(shí)現(xiàn)。
4) 通道(sc_channel)
實(shí)現(xiàn)了接口中定義的方法,分為基本通道和層次化通道。
5) 信號(hào)(sc_signal)
用來(lái)實(shí)現(xiàn)各個(gè)過(guò)程之間的通信,SystemC提供了多種信號(hào)格式來(lái)滿足從寄存器傳輸級(jí)(Register Transmit Level,RTL)到功能級(jí)等不同抽象級(jí)的模擬。
6) 事件(sc_event)
用來(lái)觸發(fā)各個(gè)過(guò)程的開始以及暫停,通常多個(gè)事件組成一個(gè)敏感列表(sensitive list)共同控制一個(gè)過(guò)程的狀態(tài)。
7) 時(shí)鐘(sc_clock)
時(shí)鐘在同步電路設(shè)計(jì)中是一個(gè)非常重要的角色,本質(zhì)上是一種特殊的信號(hào),為仿真過(guò)程提供了時(shí)間基準(zhǔn)。
由于SystemC中添加了專門用于硬件描述的類庫(kù)和仿真內(nèi)核,使之可以在抽象層次較低的RTL層次對(duì)系統(tǒng)進(jìn)行描述。尤其是SystemC支持延遲賦值這一硬件特殊行為,通過(guò)支持Δ延遲(delta-delay)來(lái)支持硬件信號(hào)的行為建模,Δ延遲是最小的仿真步驟,一個(gè)Δ周期包括許多估值 (evaluate)和更新(update)相,當(dāng)事件調(diào)用notify()時(shí),將在仿真環(huán)境的事件隊(duì)列中插入這個(gè)事件,用request_update()發(fā)出更新請(qǐng)求,在更新相時(shí),調(diào)用update()更新信號(hào)。
另外,由于SystemC是完全基于標(biāo)準(zhǔn)C++實(shí)現(xiàn)的,使得其對(duì)抽象層次較高的行為級(jí)、算法級(jí)的系統(tǒng)任務(wù)天然地具有非常強(qiáng)的描述能力,同時(shí)有大量成熟的軟件庫(kù)可供使用,也較容易實(shí)現(xiàn)支持源代碼級(jí)調(diào)試的調(diào)試器[10-12]。
目前使用完全基于SystemC的純軟件仿真方法所面臨的主要問題是基于SystemC建立的模型庫(kù)還不夠完善,很多面向工業(yè)級(jí)應(yīng)用的IP核依然缺乏;另一方面,由于歷史上Verilog HDL長(zhǎng)期在工業(yè)界的數(shù)字前端設(shè)計(jì)領(lǐng)域占主導(dǎo)地位,因此基于Verilog HDL設(shè)計(jì)開發(fā)的模型庫(kù)是相當(dāng)豐富的。
針對(duì)前文中對(duì)SystemC建模仿真方法的優(yōu)勢(shì)及劣勢(shì)的分析,本文提出一種基于VPI技術(shù)的全芯片混合仿真方法。
VPI(Verilog Procedural Interface)是第三代Verilog HDL與C語(yǔ)言過(guò)程調(diào)用接口,目前已經(jīng)成為IEEE 1364標(biāo)準(zhǔn)(IEEE Verilog HDL標(biāo)準(zhǔn))的一部分,其中定義了一組標(biāo)準(zhǔn)API接口用以實(shí)現(xiàn)Verilog與標(biāo)準(zhǔn)C之間的通信。利用此接口,一方面可以為Verilog硬件代碼添加額外的用C實(shí)現(xiàn)的系統(tǒng)函數(shù)以彌補(bǔ)Verilog行為級(jí)描述能力的不足;另一方面,可以在軟件代碼中根據(jù)需要直接以后門方式讀寫Verilog硬件代碼中的仿真部件(如reg,wire,memory等),VPI技術(shù)為軟硬件混合仿真提供了必要條件。
一些關(guān)鍵的VPI接口及其概要描述如表1所示。
表1 VPI中常用API概述
通過(guò)使用VPI技術(shù)可以實(shí)現(xiàn)全芯片級(jí)的軟硬件混合仿真平臺(tái)的搭建,將系統(tǒng)中復(fù)雜度最高、運(yùn)算量最集中的指令執(zhí)行模塊使用周期精確的軟件模型構(gòu)建,同時(shí)對(duì)其他缺乏周期精確軟件模型的模塊直接使用Verilog HDL數(shù)字電路模型。因?yàn)槟繕?biāo)機(jī)是由軟件實(shí)現(xiàn)的,因此自然地可以使用Socket編程方法實(shí)現(xiàn)本地Jtag Server進(jìn)程與遠(yuǎn)程軟件集成開發(fā)環(huán)境IDE(Integrated Development Environment )中運(yùn)行的Jtag Client進(jìn)程之間的通信,且由于使用了VPI技術(shù),因此軟硬件模型之間的通信一方面可以通過(guò)傳統(tǒng)的端口連接實(shí)現(xiàn),另一方面也可以通過(guò)VPI定義的API接口實(shí)現(xiàn),如圖3所示。
圖3中最左側(cè)模塊可認(rèn)為是有調(diào)試需求的指令執(zhí)行部件,如CPU,DSP等,因此使用SystemC建立其周期精確的模擬;最右側(cè)使用Verilog模型可能是因?yàn)槠滠浖@щy,或者已存在成熟的商用IP核;中間的模塊可以視為一個(gè)橋接功能模塊,一方面它與軟件模型之間通過(guò)TLM[13](Transaction Level Modeling,一種基于SystemC的事務(wù)級(jí)仿真框架)方式通信,通過(guò)C++函數(shù)調(diào)用接口nb_transport_bw/nb_transport_fw來(lái)傳遞被包裝成generic_payload(TLM中指定的數(shù)據(jù)幀格式)的數(shù)據(jù)幀,另一方面它通過(guò)sc_signal
“魂芯”多核DSP[14]是一款完全由中國(guó)電子科技集團(tuán)公司第三十八研究所自主研發(fā)的面向高性能電子應(yīng)用領(lǐng)域的通用DSP。由于該款芯片面向高端應(yīng)用,因此其支持多種高速外設(shè),而同時(shí)獲取或者構(gòu)建所有這些外設(shè)控制器的周期精確的軟件模型是不現(xiàn)實(shí)的,同時(shí)也沒有必要,而邏輯最復(fù)雜同時(shí)也是計(jì)算量最密集的計(jì)算內(nèi)核模塊其周期精確的軟件模型是可用的。基于以上事實(shí),在該款DSP的實(shí)際設(shè)計(jì)中使用了本文提出的基于VPI技術(shù)的混合仿真方法為其構(gòu)建了軟硬件混合仿真平臺(tái),該平臺(tái)的大致結(jié)構(gòu)如圖4所示。圖中的頂層是全芯片層,其中包含眾多的Verilog硬件模型,如AHB,Uart,RapidIO,PCIE等,而內(nèi)核計(jì)算模型則是由SystemC實(shí)現(xiàn)的周期精確的模型(其內(nèi)部實(shí)現(xiàn)了Jtag進(jìn)程),另外在內(nèi)核內(nèi)部中還嵌入了一個(gè)DMAC(DMA Controller)硬件電路模型,整個(gè)混合仿真平臺(tái)既保證了系統(tǒng)的完整性,同時(shí)還支持在遠(yuǎn)端IDE上進(jìn)行基于源代碼級(jí)的軟件開發(fā)。
由于該混合仿真平臺(tái)使用周期精確的軟件模型描述計(jì)算內(nèi)核,因此仿真速度大概是純硬件仿真速度的10~100倍(由目標(biāo)機(jī)運(yùn)行的應(yīng)用程序決定),同時(shí)由于此平臺(tái)包含了幾乎所有高速外設(shè)的Verilog HDL模型,因此它也是功能完備的。在芯片流片的窗口期該平臺(tái)支撐了操作系統(tǒng)、驅(qū)動(dòng)程序等目標(biāo)機(jī)相關(guān)生態(tài)軟件的開發(fā)、調(diào)試,為大幅縮短產(chǎn)品研發(fā)周期起到了關(guān)鍵作用。
具體的執(zhí)行效率對(duì)比如表2所示,第一項(xiàng)顯示了外設(shè)無(wú)關(guān)的程序在前仿平臺(tái)和混合仿真平臺(tái)在執(zhí)行效率方面的對(duì)比(執(zhí)行FFT算法),可以顯然地發(fā)現(xiàn)在完成同樣的仿真周期數(shù)的前提下,本文提出的混合仿真方法在執(zhí)行效率方面相比純RTL的前仿平臺(tái)提升了大約1~1.5個(gè)數(shù)量級(jí)。而第二項(xiàng)顯示了一種PCIE驅(qū)動(dòng)程序調(diào)試情景下的執(zhí)行效率對(duì)比(通過(guò)PCIE執(zhí)行片間DMA),由于存在內(nèi)核與外設(shè)RTL模型的周期級(jí)交互,因此混合仿真平臺(tái)的執(zhí)行效率有所下降,但仍然遠(yuǎn)遠(yuǎn)領(lǐng)先于純前仿平臺(tái),大約提升了0.6個(gè)數(shù)量級(jí)。
表2 純前仿平臺(tái)與VPI混合仿真平臺(tái)的執(zhí)行效率對(duì)比
在IC設(shè)計(jì)早期建立支持高級(jí)語(yǔ)言源碼級(jí)調(diào)試的全系統(tǒng)仿真平臺(tái)對(duì)于提升嵌入式軟件開發(fā)效率具有非常重要的意義。基于C++的SystemC仿真方法具有描述能力強(qiáng)、仿真速度快、可用軟件庫(kù)豐富等優(yōu)點(diǎn),但是目前工業(yè)界中大量使用的還是基于Verilog HDL的IP核,基于SystemC實(shí)現(xiàn)的周期精確的仿真模型相對(duì)還比較匱乏。在實(shí)際工程應(yīng)用中試圖搭建功能完備的純軟件仿真平臺(tái)難度較大,可能需要放棄系統(tǒng)的完整性,而系統(tǒng)功能完整性對(duì)于操作系統(tǒng)軟件以及硬件驅(qū)動(dòng)程序的開發(fā)是非常必要的。本文提出一種基于VPI技術(shù)的全芯片混合仿真方法,通過(guò)后門讀寫的方式完成軟件模型與硬件模型的交互,一方面保證了系統(tǒng)的完整性,同時(shí)支持多種源碼級(jí)調(diào)試手段。最后通過(guò)將該方法在一款實(shí)際DSP設(shè)計(jì)中的應(yīng)用說(shuō)明了本文提出方法是可行的、有效的。
另外,本文提出的混合仿真方法在執(zhí)行效率方面還有進(jìn)一步提升的空間。由于使用了VPI編程接口,因此使得系統(tǒng)軟硬件模塊的裁剪變得更加靈活和自由,一方面,可以在面向某些特定需求的仿真時(shí),根據(jù)需要裁減掉一些當(dāng)前場(chǎng)景下無(wú)關(guān)的大型復(fù)雜的硬件模型;另一方面,當(dāng)周期精確不再是系統(tǒng)必需的特征時(shí),可以使用TLM方法進(jìn)行行為級(jí)建模,進(jìn)而進(jìn)一步大幅提升執(zhí)行效率。以上是下一步研究的重點(diǎn)內(nèi)容。