摘 要: 分析了SystemC的建模特性,提出了一種基于SystemC的系統(tǒng)級設(shè)計新模型,即從系統(tǒng)功能描述開始逐步細(xì)化,建立模型間通信抽象的事務(wù)模型,對抽象通信具體化,最后形成通信模型。以此為基礎(chǔ)進(jìn)行RTL級綜合,完成軟硬件協(xié)同設(shè)計。本方法應(yīng)用于一款導(dǎo)航芯片的設(shè)計,有效地縮短了研制周期,降低了開發(fā)成本,提高了系統(tǒng)設(shè)計質(zhì)量。
關(guān)鍵詞: 嵌入式系統(tǒng); 軟硬件協(xié)同設(shè)計; SystemC語言
隨著嵌入式技術(shù)的迅速發(fā)展和嵌入式系統(tǒng)在眾多領(lǐng)域中的廣泛應(yīng)用,特別是系統(tǒng)級芯片SoC 的誕生,嵌入式系統(tǒng)設(shè)計面臨許多新的問題。軟硬件協(xié)同設(shè)計是目前嵌入式系統(tǒng)設(shè)計的新方法,其方法依據(jù)系統(tǒng)目標(biāo)要求,通過綜合分析系統(tǒng)軟硬件功能及現(xiàn)有資源,最大限度地挖掘系統(tǒng)軟硬件之間的并發(fā)性,協(xié)同設(shè)計軟硬件體系結(jié)構(gòu),使得系統(tǒng)能工作在最佳狀態(tài)。因此,建立系統(tǒng)級模型對系統(tǒng)功能進(jìn)行抽象描述是實現(xiàn)軟硬件協(xié)同設(shè)計的關(guān)鍵。目前存在多種建模方法,但是都有其局限性,如采用UML語言建模,可以方便地進(jìn)行需求分析、系統(tǒng)功能描述,但UML不能對系統(tǒng)硬件進(jìn)行描述,無法精確和嚴(yán)格地描述模型的行為;采用C/C++等描述語言時,在設(shè)計細(xì)化階段,原始的C/C++描述必須手工轉(zhuǎn)換為VHDL或Verilog,容易產(chǎn)生不一致性,使系統(tǒng)綜合變得復(fù)雜。
SystemC建模語言是在C++的基礎(chǔ)上增加硬件擴(kuò)展庫和仿真內(nèi)核[1],不僅有支持硬件操作的信號、時序和接口,在不同抽象層次上對設(shè)計進(jìn)行建模,而且還可以通過仿真內(nèi)核搭建仿真平臺,對設(shè)計各階段進(jìn)行驗證。SystemC已經(jīng)成為事實上的系統(tǒng)級設(shè)計語言的標(biāo)準(zhǔn)。本文將討論SystemC的建模特性,并且提出一種基于SystemC的系統(tǒng)級軟硬件協(xié)同設(shè)計模型。
1 軟硬件協(xié)同設(shè)計方法
軟硬件協(xié)同設(shè)計是將軟件設(shè)計和硬件設(shè)計作為一個有機的整體進(jìn)行并行設(shè)計,是在系統(tǒng)目標(biāo)要求的指導(dǎo)下,通過綜合分析系統(tǒng)軟硬件功能及現(xiàn)有資源,最大限度地挖掘系統(tǒng)軟硬件之間的并發(fā)性,協(xié)同設(shè)計軟硬件體系結(jié)構(gòu),以便系統(tǒng)能夠工作在最佳狀態(tài)。其核心問題是在設(shè)計過程中如何協(xié)調(diào)軟件系統(tǒng)和硬件系統(tǒng)[2]。協(xié)同設(shè)計技術(shù)強調(diào)軟件和硬件設(shè)計開發(fā)是一個并行和相互反饋的過程,也就是使軟件設(shè)計和硬件設(shè)計作為一個整體并行設(shè)計,找到軟硬件的最佳結(jié)合點,使它們能夠以最有效的方式相互作用、相互結(jié)合,從而獲得滿足綜合性能指標(biāo)的最佳解決方案[3]。這種相互作用體現(xiàn)在設(shè)計過程中的各個階段和各個層次,設(shè)計過程充分實現(xiàn)了軟硬件的協(xié)同性。在軟硬件功能劃分時就考慮了現(xiàn)有的軟硬件資源,在軟硬件功能設(shè)計和仿真評價過程中,軟件和硬件是互相支持的,這就使得軟硬件功能模塊能夠在設(shè)計開發(fā)的早期互相結(jié)合,從而及早發(fā)現(xiàn)和解決系統(tǒng)設(shè)計中的問題,避免了在設(shè)計開發(fā)后期反復(fù)修改所帶來的一系列問題,有利于充分挖掘系統(tǒng)潛能、縮小體積、降低成本、提高整體性能。
軟硬件協(xié)同設(shè)計的基本思路如圖1所示。
軟硬件協(xié)同設(shè)計過程可以分為系統(tǒng)描述、系統(tǒng)設(shè)計、仿真驗證和綜合實現(xiàn)4個階段[4-5]。首先應(yīng)用獨立于任何硬件和軟件的功能性規(guī)格方法對系統(tǒng)進(jìn)行整體描述;然后對系統(tǒng)進(jìn)行軟硬件功能劃分,將系統(tǒng)行為劃分為簡單的行為模塊,并確定每個模塊的軟硬件實現(xiàn)方式;最后從抽象描述級進(jìn)行細(xì)化,直至每個模塊最終由基本虛元件組成,形成系統(tǒng)原型,接著在系統(tǒng)原型層與廠商提供的虛元件相匯合,完成設(shè)計的實現(xiàn)[2]。各個階段需要完成的工作如下[3,5]:
(1)系統(tǒng)描述:是用1種或多種描述語言對所要設(shè)計系統(tǒng)的功能和性能進(jìn)行全面描述,是建立系統(tǒng)軟硬件模型的過程。采用的方法包括有限態(tài)自動機、統(tǒng)一化規(guī)格語言或其他基于圖形表示工具,其作用是對系統(tǒng)需求統(tǒng)一表示,方便功能劃分和綜合。
(2)系統(tǒng)設(shè)計:可以分為軟硬件功能劃分和系統(tǒng)映射2個階段。軟硬件功能劃分就是要確定軟/硬件模塊分別要實現(xiàn)的系統(tǒng)功能。硬件能提供較好的性能,軟件則易于開發(fā)和修改,成本也較低。由于硬件模塊的可配置性、可編程性以及某些軟件功能的硬件化、固件化,導(dǎo)致軟硬件的界限已經(jīng)不是很明顯。此外,在進(jìn)行軟硬件功能劃分時,還要考慮市場可以提供的資源狀況、現(xiàn)有軟硬件資源、系統(tǒng)成本、開發(fā)時間等諸多因素。因此,軟硬件功能劃分是一個復(fù)雜的過程。系統(tǒng)映射是根據(jù)系統(tǒng)描述和軟硬件任務(wù)劃分的結(jié)果,分別選擇系統(tǒng)軟硬件模塊以及其接口的具體實現(xiàn)方法,并將其集成,最終確定系統(tǒng)的體系結(jié)構(gòu)。在整個細(xì)化過程中,應(yīng)多次進(jìn)行軟硬件協(xié)同驗證和協(xié)同仿真,及時發(fā)現(xiàn)細(xì)化中的錯誤。在完成軟硬件劃分后,要對系統(tǒng)的性能、靈活性等參數(shù)進(jìn)行預(yù)測,以評估軟硬件劃分,甚至功能劃分的合理性。如果劃分不合理,就需要重新進(jìn)行軟硬件劃分。劃分的目的主要是滿足系統(tǒng)速度、延遲、體積、成本等方面的要求,使整個系統(tǒng)獲得最好的功能和性能。劃分策略既可以采用人為劃分,也可以使用EDA工具自動劃分。
(3)仿真驗證:是檢驗系統(tǒng)設(shè)計正確性的過程,對設(shè)計結(jié)果的正確性進(jìn)行評估,以達(dá)到避免在系統(tǒng)實現(xiàn)過程中發(fā)現(xiàn)問題時再進(jìn)行反復(fù)修改的目的。
(4)綜合實現(xiàn):其過程是軟件、硬件系統(tǒng)的具體設(shè)計過程。設(shè)計結(jié)果經(jīng)過仿真驗證后,可按系統(tǒng)設(shè)計的要求進(jìn)行系統(tǒng)研制生產(chǎn),即按照前述工作的要求設(shè)計硬件軟件,并使其能夠協(xié)調(diào)一致地工作,而后再進(jìn)行各種試驗。
2 基于SystemC系統(tǒng)級新模型
SystemC作為系統(tǒng)級建模語言,提供了通道、接口和事件[6-7]的概念,用以描述通信和同步。同時SystemC也提供了動態(tài)事件敏感方法,滿足對消息傳遞響應(yīng)等系統(tǒng)級行為的建模要求。接口和通道的概念將通信和計算分開,提高了設(shè)計的重用性。
通道用來表示設(shè)計中的通信機制。在系統(tǒng)級設(shè)計中,模塊互連通常采用較復(fù)雜的總線機制,系統(tǒng)初始設(shè)計時,可以僅仿真總線功能而不描述具體實現(xiàn)細(xì)節(jié),此時可以用通道方便地描述通信機制。
接口定義了通道的訪問方法,如read( )、write( ),這些方法的實現(xiàn)由通道來完成。模塊及其進(jìn)程需要通過端口來訪問一個通道的接口,不同模塊的信號端口必須與通道接口綁定。
事件是一種基本的同步對象,主要用于模塊內(nèi)進(jìn)程間的同步。
系統(tǒng)級模型主要用于描述系統(tǒng)要實現(xiàn)的功能,系統(tǒng)級模型設(shè)計流程如圖2所示。首先對系統(tǒng)進(jìn)行純功能性結(jié)構(gòu)描述,然后建立描述抽象通信通道的事務(wù)模型,最后細(xì)化抽象通信通道形成通信模型。整個系統(tǒng)由一系列的模塊組成, 每個模塊包括許多并發(fā)的進(jìn)程, 進(jìn)程定義了模塊的功能, 進(jìn)程間通過通道進(jìn)行通信。
各模型介紹如下:
(1)功能模型:是系統(tǒng)純功能的抽象模型,是設(shè)計流程的入口,主要目的是為了描述、驗證系統(tǒng)功能。在功能模型中,sc_module的層次性只是反映了系統(tǒng)的功能,不涉及時間概念。功能模型由SystemC的Event和Wait來進(jìn)行同步。
(2)事務(wù)模型:事務(wù)建模的主要任務(wù)是利用SystemC進(jìn)行功能模型相應(yīng)的通信抽象,實現(xiàn)通信機制。事務(wù)模型是SystemC系統(tǒng)級模型中的重要概念。一個系統(tǒng)的事務(wù)模型一般具有如下基本特征:
?、俟δ苣K通過抽象通信通道進(jìn)行通信。
?、谒械耐ㄐ哦际鞘聞?wù)(數(shù)據(jù)交換)。
?、弁ㄟ^功能調(diào)用而不是對信號賦值來執(zhí)行事務(wù)。
SystemC中,通道、接口和事件可方便地進(jìn)行系統(tǒng)事務(wù)級的建模。事務(wù)級模型是有時間的模型(Timed Model),對于各個功能模塊可以賦予運行時間,以便進(jìn)行系統(tǒng)的仿真反饋、驗證和進(jìn)一步的綜合。
(3)通信模型:通信模型中,抽象的通信事務(wù)被實際的通信通道所代替。通信模型定義了系統(tǒng)的結(jié)構(gòu)框架,包括各功能模塊及其之間的連接。系統(tǒng)計算被映射到功能模塊上,系統(tǒng)通信被映射到各通信通道上。SystemC擁有接口和通道等,支持基于接口的設(shè)計方法,可以方便地進(jìn)行通信細(xì)化過程。從事務(wù)模型到通信模型的細(xì)化過程可分為如下步驟:
?、偻ǖ兰?xì)化(Channel Refinement):抽象的通信通道被實際的通信協(xié)議所代替,通過協(xié)議通道的接口,協(xié)議通道對外提供最基本的由協(xié)議所支持事務(wù)的方法。
?、谶m配器插入(Adapter Insert):因為通道插入通信協(xié)議后接口已經(jīng)改變了,必須在模塊和協(xié)議通道間插入適配器來完成接口之間的轉(zhuǎn)換。適配器相當(dāng)于協(xié)議層上的應(yīng)用層,利用協(xié)議通道提供的協(xié)議接口來實現(xiàn)模塊間的數(shù)據(jù)通信。
?、蹍f(xié)議內(nèi)連(Protocol Inline):通信最終被內(nèi)連到功能模塊中。用來包含應(yīng)用層和協(xié)議層方法的適配器通道被內(nèi)連進(jìn)模塊內(nèi)部,使抽象端口消失,模塊通過相應(yīng)端口連接到總線線路上。
在設(shè)計一種導(dǎo)航芯片的過程中,采用軟硬件協(xié)同設(shè)計方法進(jìn)行設(shè)計,有效地降低了設(shè)計成本,提高了設(shè)計成功率。該芯片主要功能是接收衛(wèi)星信號后完成數(shù)據(jù)提取,將有用的數(shù)據(jù)信息傳至處理器,由處理器進(jìn)行導(dǎo)航處理。
設(shè)計采用SystemC為整個系統(tǒng)建模,其模型如圖3所示。系統(tǒng)主要分為4個部分:數(shù)字變頻器、維特比譯碼器、數(shù)據(jù)提取和數(shù)據(jù)處理。衛(wèi)星信號進(jìn)入導(dǎo)航芯片后首先完成數(shù)字變頻,成為可處理的數(shù)字信號,然后對信號進(jìn)行維特比譯碼,根據(jù)處理器指定要求提取相關(guān)數(shù)據(jù)并完成數(shù)據(jù)處理,形成有效的導(dǎo)航數(shù)據(jù)。
下面給出系統(tǒng)模型的部分SystemC代碼。
sc_main函數(shù)作為主函數(shù)在頂層例化整個系統(tǒng)的每一個硬件模塊并綁定。sc_signal定義頂層的各種信號線,用來連接各模塊的輸入輸出信號線并用來跟蹤各模塊輸入輸出端口信號變化。sc_clock定義并生成系統(tǒng)的時鐘信號,用來同步仿真時每一個模塊內(nèi)觸發(fā)的事件,sc_trace用來跟蹤信號的變化,并以標(biāo)準(zhǔn)的格式輸出到跟蹤文件。
在相應(yīng)的SystemC文件中可以使用sc_module定義各個模塊。以數(shù)字變頻器模塊為例,下面是該模塊的部分SystemC代碼。
sc_module用于聲明模塊,然后定義端口數(shù)據(jù)類型。sc_method方法使得對每一個敏感信號的觸發(fā)都進(jìn)行處理,其作用相當(dāng)于Verilog中的always方法,sensitive_pos聲明敏感信號觸發(fā)方式。
系統(tǒng)設(shè)計時根據(jù)系統(tǒng)級模型描述功能,同時為模型建立Testbench(仿真測試文件)驗證系統(tǒng)方案是否可行,然后使用VC ++6.0和Modelsim進(jìn)行功能仿真,接著按照系統(tǒng)工作原理進(jìn)行軟硬件劃分。軟件實現(xiàn)部分采用C++語言描述,同時為硬件部分建立SystemC行為級模型,具體過程:(1)在系統(tǒng)級模型基礎(chǔ)上對計算單元進(jìn)行詳細(xì)描述和通信組件細(xì)化;(2)在SystemC可綜合子集的范圍內(nèi)對代碼進(jìn)行約束,形成RTL級模型;(3)將RTL級電路進(jìn)行綜合,生成Verilog文件,將此文件導(dǎo)入ISE中,對代碼進(jìn)行約束,包括時間約束、引腳約束、時鐘頻率約束等;(4)進(jìn)行邏輯綜合、優(yōu)化和布局布線,得到二進(jìn)制配置文件(bit); (5)將配置文件加載到測試板的FPGA(Xilinx公司Virtex4系列FPGA XC4VLX40-10FFG668C)中,驗證是否可以實現(xiàn)導(dǎo)航芯片的功能。如果性能不滿足要求可以重新建模,進(jìn)行軟硬件劃分調(diào)整,直至滿足系統(tǒng)要求。在整個設(shè)計過程中,Testbench始終未改變,這樣可以保證系統(tǒng)在被不斷完善的過程中不會引入新的錯誤,使系統(tǒng)始終符合設(shè)計要求。經(jīng)測試,采用基于SystemC的軟硬件協(xié)同設(shè)計模型進(jìn)行導(dǎo)航芯片設(shè)計比傳統(tǒng)設(shè)計方案節(jié)省了30%的時間。
軟硬件協(xié)同設(shè)計方法是一種新的嵌入式系統(tǒng)設(shè)計方法,它消除了傳統(tǒng)的嵌入式系統(tǒng)開發(fā)方法——“先硬件后軟件”的弊端,使得嵌入式系統(tǒng)設(shè)計質(zhì)量得以提高,能夠提前進(jìn)行系統(tǒng)性能評估,驗證系統(tǒng)設(shè)計方案,大大縮短了系統(tǒng)的研制周期。
SystemC語言是一種系統(tǒng)級描述語言,它的產(chǎn)生促進(jìn)了軟硬件協(xié)同設(shè)計技術(shù)的發(fā)展。本文描述了SystemC語言在系統(tǒng)開發(fā)各個階段的建模特性,提出系統(tǒng)級設(shè)計新模型。該模型采用逐步細(xì)化流程描述系統(tǒng)功能,為系統(tǒng)軟硬件協(xié)同設(shè)計提供了系統(tǒng)級模型,相對于傳統(tǒng)設(shè)計方案更加靈活、有效,縮短了開發(fā)周期,降低了開發(fā)成本,提高了系統(tǒng)設(shè)計質(zhì)量。
參考文獻(xiàn)
[1] 張志杰. 林濤.基于SystemC的軟硬件協(xié)同驗證[J].今日電子,20079(2):49-52.
[2] 熊光澤,詹瑾瑜.嵌入式系統(tǒng)軟/硬件協(xié)同設(shè)計技術(shù)綜述 [J].計算機應(yīng)用,2006,26(4):757-760.
[3] 徐思剛,桑楠.基于SystemC的軟硬件協(xié)同設(shè)計[J].湖北民族學(xué)院學(xué)報(自然科學(xué)版),2004,22(1):65-68.
[4] 潘新祥,胡習(xí)霜,韓立宏.軟硬件協(xié)同設(shè)計分析[J].指揮控制與仿真,2008,30(3):117-119.
[5] 王少平,王京謙,錢瑋.嵌入式系統(tǒng)的軟硬件協(xié)同設(shè)計[J].嵌入式與單片機,2005,193(2):83-84.
[6] 劉強.基于SystemC的系統(tǒng)級芯片設(shè)計方法研究[EB/OL]. http://www.eepw.com.cn/article/83115.htm. 2008-05-27.
[7] SystemC介紹[EB/0L].http://www.chinaitpower.com/2005September/201800.html. 2005-09-13.