摘要:新型復(fù)雜的系統(tǒng)集成電路芯片(soc)常常應(yīng)用于網(wǎng)絡(luò)環(huán)境中,因此需要對(duì)其所處網(wǎng)絡(luò)環(huán)境建模與仿真,這意味著要能夠?qū)π酒瑫r(shí)進(jìn)行網(wǎng)絡(luò)建模和傳統(tǒng)的系統(tǒng)級(jí)的建模。本論文介紹了一種時(shí)序的建模與仿真方法,它集成了系統(tǒng)建模語(yǔ)言(systemc)和網(wǎng)絡(luò)仿真環(huán)境(ns-2),使用這種集成建模與仿真環(huán)境可以顯著地加速具有網(wǎng)絡(luò)通信需求的芯片的設(shè)計(jì)過(guò)程。
1 引言
現(xiàn)代系統(tǒng)集成電路芯片(soc)對(duì)通信能力的需求逐漸增加,通常要求設(shè)備能隨意接人、可自由移動(dòng)或者在非友好環(huán)境下工作或可接人周圍網(wǎng)絡(luò)環(huán)境。對(duì)于集成電路芯片而言,由于片上總線架構(gòu)對(duì)其性能有重要影響,此時(shí)系統(tǒng)的通信議題顯得至關(guān)重要。根據(jù)半導(dǎo)體技術(shù)藍(lán)圖的報(bào)告[1],對(duì)于65nm以下的技術(shù)而言,由于電源和時(shí)延的問題,在復(fù)雜度高的芯片上要保持全局時(shí)鐘的有效同步是不可能的。通常采用的是全局異步、局部同步的辦法,即gals[2],這時(shí)不同的時(shí)鐘模塊之間就像網(wǎng)絡(luò)里不同的計(jì)算機(jī)之間一樣通信,由此而引入了面向網(wǎng)絡(luò)的片上架構(gòu)。
因此對(duì)具有網(wǎng)絡(luò)通信需求的系統(tǒng)集成電路進(jìn)行建模時(shí),可以考慮:系統(tǒng)的一部分在傳統(tǒng)的系統(tǒng)級(jí)、面向硬件的環(huán)境里建模,而網(wǎng)絡(luò)應(yīng)用部分則在網(wǎng)絡(luò)建模工具里描述。通過(guò)這種方式,可以獲得集成電路系統(tǒng)在與網(wǎng)絡(luò)環(huán)境交互時(shí)的初步反饋,并在下一改進(jìn)級(jí)別上對(duì)系統(tǒng)模型進(jìn)行改善。但是,這么做必須首先保證網(wǎng)絡(luò)仿真器和系統(tǒng)仿真器在時(shí)間上*同步,即兩個(gè)仿真器有相同的時(shí)間觀念,并且它們之間能夠以雙工方式交互數(shù)據(jù)。與*通過(guò)系統(tǒng)級(jí)描述的模型相比,只要同步負(fù)荷不重,新的仿真方式將可以加速系統(tǒng)建模。
另一個(gè)議題是仿真器之間的數(shù)據(jù)交互格式。網(wǎng)絡(luò)仿真器通常使用抽象數(shù)據(jù)類型來(lái)描述包、幀、消息,而不是使用數(shù)據(jù)的比特模式。集成電路則至少在低改進(jìn)級(jí)上需要比特?cái)?shù)據(jù)接口,這樣就有必要增加一些轉(zhuǎn)換接口。
使用同時(shí)具備網(wǎng)絡(luò)仿真和集成電路系統(tǒng)建模環(huán)境的工具可以顯著地加速網(wǎng)絡(luò)設(shè)備的設(shè)計(jì),并且可以在短時(shí)間內(nèi)產(chǎn)生相應(yīng)的測(cè)試臺(tái)。使用這種工具的另一個(gè)好處是,它可以驗(yàn)證、校驗(yàn)集成電路芯片的通信結(jié)構(gòu),從而使其協(xié)議棧達(dá)到網(wǎng)絡(luò)仿真器高層描述的參考協(xié)議棧的水準(zhǔn)。
本文介紹了以下兩種仿真器的集成仿真框架[12]:系統(tǒng)級(jí)仿真器systemc[4],網(wǎng)絡(luò)仿真器ns-2[5]為了提供良好的效率,集成在內(nèi)核級(jí)上進(jìn)行,它支持仿真器間的時(shí)序同步。
2 仿真環(huán)境
集成不同的仿真環(huán)境在計(jì)算機(jī)輔助設(shè)計(jì)領(lǐng)域即是的協(xié)仿真議題。文獻(xiàn)[7,8]提出了幾種不同的協(xié)仿真框架。它們之間的主要區(qū)別在于協(xié)仿真器所針對(duì)的抽象級(jí)別(事務(wù)級(jí)、指令級(jí)、rtl級(jí))和仿真器間同步所采用的通信原語(yǔ)。
文獻(xiàn)凹利用matlab來(lái)對(duì)整個(gè)系統(tǒng)進(jìn)行建模(包括網(wǎng)絡(luò)和硬件),然而,這種模型不能直接用來(lái)生成相應(yīng)的硬件。文朗10)則*利用c++來(lái)對(duì)一個(gè)adsl調(diào)制解調(diào)器建模,這種方式使驗(yàn)證設(shè)備時(shí)要模擬復(fù)雜的網(wǎng)絡(luò)環(huán)境變得很困難。文獻(xiàn)[11)則直接將設(shè)備與真實(shí)的網(wǎng)絡(luò)相連,沒有用任何網(wǎng)絡(luò)模型。以上的解決方案都沒有有效地集成系統(tǒng)級(jí)仿真和網(wǎng)絡(luò)仿真。
本文介紹的方法依賴于兩個(gè)的仿真環(huán)境:systemc和ns-2。systemc能夠在不同的抽象級(jí)別用c++庫(kù)來(lái)搭建系統(tǒng)模型,ns—2則是一種非常流行的網(wǎng)絡(luò)協(xié)議和算法分析仿真工具。ns—2基于兩種編程語(yǔ)言:c++和otcl,后者使得仿真內(nèi)核(用c++語(yǔ)言而寫)和仿真配置得以分離。
所提及的兩個(gè)仿真器都是基于事件驅(qū)動(dòng)引擎的:它們以非遞減時(shí)序的方式來(lái)安排事件的執(zhí)行。所不同的是事件的語(yǔ)義。在systemc里面,事件是和硬件相關(guān)實(shí)體(比如信號(hào)、端口)相的。systemc支持時(shí)鐘純粹是概念性的,它僅被用來(lái)定義事件的時(shí)間間隔。在ns—2里,事件是和通信信道的異步變化(比如發(fā)送或接收一個(gè)包)相關(guān)聯(lián)的。
2.1 仿真器交互
在設(shè)計(jì)集成仿真框架時(shí),有兩個(gè)主要議題影響集成方案并且定義仿真的語(yǔ)義。首先,也是zui重要的是,仿真器如何緊密地協(xié)同工作。解決方案包括在仿真器間建立通信機(jī)制(直接消息傳遞或共享內(nèi)存接口)直至*的系統(tǒng)內(nèi)核集成。其次,仿真器在哪一個(gè)抽象級(jí)上進(jìn)行交互。解決方案從包級(jí)別的接口到低級(jí)上的信令而不盡相同。
要解決上述兩個(gè)議題,首先需要對(duì)ns—2和systemc的特性有深入的了解。這兩個(gè)仿真器都將目標(biāo)描述視作是一個(gè)分層次的實(shí)體,其層次等級(jí)與不同的抽象層和仿真中的數(shù)據(jù)操縱粒度相。 ns—2將網(wǎng)絡(luò)描述視作是分層的,類似協(xié)議棧的實(shí)體,它包括四個(gè)不同等級(jí)的實(shí)體:鏈路、節(jié)點(diǎn)、代理和應(yīng)用。這和協(xié)議棧中的數(shù)據(jù)鏈路、網(wǎng)絡(luò)、傳輸和應(yīng)用層各自相。特別地,代理代表產(chǎn)生和消費(fèi)網(wǎng)絡(luò)層的包的終端,并且,代理可以對(duì)傳輸協(xié)議原語(yǔ)提供支持。在systemc里,抽象層和初始規(guī)范的精煉有關(guān),本文直接以傳統(tǒng)的協(xié)議層來(lái)標(biāo)識(shí)。
在仿真集成電路網(wǎng)絡(luò)應(yīng)用系統(tǒng)時(shí),zui直接的集成方式,這里,ns—2的代理與systemc的網(wǎng)絡(luò)層相互通信。這種方案只強(qiáng)調(diào)兩個(gè)層之間的消息交互以及一些消息轉(zhuǎn)換接口,但是,系統(tǒng)間的任何同步都需要額外的消息通過(guò)用戶api接口來(lái)傳遞,這使得通信負(fù)荷過(guò)重,而且,連續(xù)的時(shí)間同步并不容易達(dá)到,因?yàn)榇藭r(shí)時(shí)間都是由系統(tǒng)內(nèi)核管理的,要獲得時(shí)間信息也就意味著要與本地的內(nèi)核進(jìn)行交互。
一種在系統(tǒng)內(nèi)核級(jí)上基于消息傳遞的集成方案。這種方案看起來(lái)似乎更加有效,因?yàn)橄⒔换ビ谙到y(tǒng)內(nèi)核之間。但是如圖中分離的兩條時(shí)間軸所示,這種方案不能解決時(shí)間自動(dòng)同步的問題。
本文所提出的方案。兩個(gè)內(nèi)核緊密結(jié)合在一起(注意zui外面的虛線框)。僅管仍是基于消息傳遞的,但是相關(guān)仿真時(shí)間的同步變得更加容易,這種方案比前述兩種方案更加。
3 內(nèi)核同步
保持仿真器間在時(shí)間上的同步是非常重要的。事實(shí)上,要保證每個(gè)仿真器里的仿真時(shí)間的一致性是比較容易的,難點(diǎn)在于當(dāng)仿真器間數(shù)據(jù)交互時(shí)也要保證時(shí)間上的一致性。下面將介紹這個(gè)問題相關(guān)的實(shí)現(xiàn)細(xì)節(jié)。
3.1 基本時(shí)間同步
兩個(gè)仿真器之間通過(guò)周期性交互信息來(lái)保持全局時(shí)間的一致性。在執(zhí)行時(shí),擁有較小時(shí)間的仿真器優(yōu)先執(zhí)行,此時(shí)另一仿真器則置為阻塞狀態(tài)。
仿真時(shí)間的同步的偽代碼。啟動(dòng)同步的仿真器首先執(zhí)行第2行的初始化工作,之后從遠(yuǎn)端的另一仿真內(nèi)核得到仿真時(shí)間tn(第3行),一旦獲得tk2,它將tk2與本地的仿真時(shí)間tk1,作比較(第4行),如果本地時(shí)間小于遠(yuǎn)端的時(shí)間,說(shuō)明仿真器當(dāng)前滯后了,于是當(dāng)前處于就緒狀態(tài)的事件先被執(zhí)行(第5行)。而后,調(diào)度隊(duì)列里下一事件對(duì)應(yīng)的時(shí)間tnext k1披發(fā)送到遠(yuǎn)端的仿真器以便于同步(第6行)。相反,如果仿真器當(dāng)前時(shí)間比遠(yuǎn)端時(shí)間大,則仿真器將當(dāng)前仿真時(shí)間tk1發(fā)送到另一仿真器,而后掛起(第7行)。以上操作在整個(gè)仿真期間重復(fù)執(zhí)行(第8行)。
3.2 處理數(shù)據(jù)交互
同步方案已經(jīng)可以正常工作,但是在大多數(shù)情況下,仿真器間需要數(shù)據(jù)交互,而數(shù)據(jù)序列的時(shí)間也必須保持一致性。這就意味著要修改內(nèi)核的數(shù)據(jù)結(jié)構(gòu),使得事件和與事件相關(guān)的數(shù)據(jù)相分離。由于ns-2和systemc都是基于事件驅(qū)動(dòng)的,因而它們的結(jié)構(gòu)都比較典型:具備一個(gè)傳統(tǒng)的就緒隊(duì)列,這個(gè)隊(duì)列里是準(zhǔn)備就緒、可以執(zhí)行的事件,調(diào)度器會(huì)以時(shí)序上非遞減的方式,從這個(gè)隊(duì)列里挑選出相應(yīng)事件來(lái)執(zhí)行。
同步中的五個(gè)基本實(shí)體。兩個(gè)仿真器都擁有一個(gè)等待隊(duì)列,該隊(duì)列里包含了正在等待數(shù)據(jù)條件來(lái)驅(qū)動(dòng)的那些事件,這與傳統(tǒng)操作系統(tǒng)里的方案很相似:就緒進(jìn)程和等待一些事件完成(比如i/o請(qǐng)求,資源變?yōu)榭臻e)的進(jìn)程是分開的。
進(jìn)程隊(duì)列外覆器是就緒隊(duì)列和等待隊(duì)列與內(nèi)核的界面接口。然而,進(jìn)程隊(duì)列外覆器對(duì)等待隊(duì)列的處理與對(duì)另外兩個(gè)數(shù)據(jù)交互實(shí)體的操作是緊密相關(guān)的。當(dāng)從通信信道接收到一個(gè)數(shù)據(jù)的時(shí)候,數(shù)據(jù)隊(duì)列管理器便將它置人數(shù)據(jù)隊(duì)列里。每一個(gè)目標(biāo)實(shí)體都有一個(gè)自己的數(shù)據(jù)隊(duì)列。等待隊(duì)列里的進(jìn)程正在等待一些數(shù)據(jù)相關(guān)條件的觸發(fā)。所以,對(duì)于每一個(gè)新收到的數(shù)據(jù)元,進(jìn)程隊(duì)列外覆器在等待隊(duì)列里查找那些正在等待相關(guān)事件的進(jìn)程,這些事件即是受新數(shù)據(jù)元影響的數(shù)據(jù)隊(duì)列里的事件。這樣,這些進(jìn)程將進(jìn)入到就緒隊(duì)列,而它們的時(shí)間標(biāo)記也會(huì)更新為新數(shù)據(jù)元的時(shí)間標(biāo)記。從以上討論不難得出,將仿真器間交互的數(shù)據(jù)用一系列信息來(lái)封裝是非常必要的。
3.3 用戶程式范例
前面所提到的協(xié)議有幾個(gè)地方值得注意:1)數(shù)據(jù)交互相關(guān)實(shí)體的標(biāo)識(shí)(ns-2里的代理和systemc里的模塊);2)發(fā)送實(shí)體對(duì)數(shù)據(jù)的時(shí)間標(biāo)記。這些信息都封裝在消息里面。消息由兩個(gè)內(nèi)核以對(duì)用戶透明的方式來(lái)組裝。在ns-2側(cè),需要添加一個(gè)新的類:systemc,其定義如下:
其中的recv()函數(shù)允許ns-2里的對(duì)象傳遞一個(gè)數(shù)據(jù)包給內(nèi)核(以正常的通過(guò)ns-2節(jié)點(diǎn)傳遞方式),這個(gè)數(shù)據(jù)包同時(shí)也必須傳遞給systemc的以receiver標(biāo)識(shí)的那個(gè)進(jìn)程。布爾值state使得內(nèi)核可以知道數(shù)據(jù)包當(dāng)前正準(zhǔn)備傳遞給systemc。通過(guò)以上信息,ns-2內(nèi)核就能夠組裝那些需要發(fā)送給systemc的消息。以ns—2里的標(biāo)準(zhǔn)udp代理為例,為了能與systemc通信,必須按如下修改:
無(wú)論任何時(shí)候,只要ns-2收到一個(gè)數(shù)據(jù)消息,內(nèi)核就調(diào)用recv0函數(shù)來(lái)獲得一個(gè)包,表面上看起來(lái),這個(gè)包就像是從其它ns-2代理發(fā)過(guò)來(lái)的一樣。
在systemc側(cè),為了允許用戶向ns-2對(duì)象接收或發(fā)送一個(gè)數(shù)據(jù)包,需要添加新的端口ns_in和ns_out。它們從類模板sc_in和sc_out衍變而來(lái),并且通過(guò)兩個(gè)函數(shù)read()和write()來(lái)管理,這兩個(gè)函數(shù)是通過(guò)擴(kuò)展標(biāo)準(zhǔn)的管理sc_n和sc_out的函數(shù)而來(lái)的。新的端口實(shí)際是執(zhí)行了文獻(xiàn)[7]里提到的“協(xié)仿真外部端口”的概念。所以,systemc里能與ns-2進(jìn)行雙工通信的進(jìn)程按如下方式定義:
無(wú)論何時(shí),只要systemc內(nèi)核接收到一個(gè)數(shù)據(jù)消息,在接收消息的這個(gè)時(shí)間點(diǎn)上,內(nèi)核會(huì)在消息里的進(jìn)程的ns_in端口上產(chǎn)生一個(gè)事件,這是通過(guò)將包到端口來(lái)完成的。由此將會(huì)喚醒systemc里正在等待這個(gè)包的進(jìn)程,對(duì)這個(gè)進(jìn)程而言,這個(gè)包就像是systemc里其它進(jìn)程發(fā)送的一樣。對(duì)應(yīng)地,無(wú)論何時(shí),當(dāng)systemc進(jìn)程寫一個(gè)包到ns_out端口時(shí),write()函數(shù)會(huì)將包寫到內(nèi)核監(jiān)視的緩沖區(qū)里。
以上所述的方法有兩個(gè)主要優(yōu)點(diǎn)。*,ns-2和systemc的內(nèi)核仍使用它們各自zui初的原語(yǔ)(recv()方法和將值到一個(gè)端口)來(lái)喚醒對(duì)象和進(jìn)程。通過(guò)這種方法,不需要額外的等待隊(duì)列。第二,ns-2的對(duì)象和systemc的進(jìn)程交互數(shù)據(jù)時(shí)都要通過(guò)對(duì)通信信道負(fù)責(zé)的系統(tǒng)內(nèi)核。這樣,除了必要的喚醒對(duì)象或進(jìn)程去監(jiān)視信道的事件外,不需要產(chǎn)生其它事件。這些都增強(qiáng)了協(xié)仿真的性能。
3.4 為同步而進(jìn)行的內(nèi)核擴(kuò)展
內(nèi)核為了同步所需執(zhí)行的偽代碼。下標(biāo)k1指當(dāng)前正在執(zhí)行代碼的內(nèi)核,k2指另一內(nèi)核。為了協(xié)作,兩個(gè)內(nèi)核都作了必要的修改。
啟動(dòng)進(jìn)程的仿真器首先執(zhí)行初始化工作(第2行),主同步程序(第3—22行)圍繞兩個(gè)仿真器間信道上消息的接收(第4行)而執(zhí)行。任何時(shí)候,一旦收到一條消息,首先檢查它是不是數(shù)據(jù)消息類型,如果是,則如同上節(jié)3.3里所描述的那樣,調(diào)用ns—2接收器或systemc的recv()函數(shù)(第6.7行)。
然后,提取出遠(yuǎn)端事件的時(shí)間標(biāo)記,并將它和本地事件時(shí)間標(biāo)記tk1相比較(第8、9行)。第10—18行管理本地隊(duì)列里所有的滯后于tk2的事件。如果有一事件tk2需要傳輸數(shù)據(jù)(第13行),則在時(shí)間tk1產(chǎn)生一條消息mk1,并填人相應(yīng)的數(shù)據(jù)域dk1和遠(yuǎn)端接收者j(第14行),并且用一標(biāo)識(shí)符記下當(dāng)前條件以備后續(xù)使用(第15行)。第11—17行的do-while循環(huán)使得內(nèi)核分別處理在同一仿真時(shí)間上的不同事件。當(dāng)10—18行的循環(huán)退出時(shí),需要向另一內(nèi)核發(fā)送消息。如果前面標(biāo)識(shí)符是真(第19行),內(nèi)核就產(chǎn)生一個(gè)數(shù)據(jù)消息,否則產(chǎn)生時(shí)間消息,當(dāng)消息就緒后就將它發(fā)送到另一內(nèi)核。zui后,值得注意的是時(shí)序同步過(guò)程在代碼中仍然可辨,只是已經(jīng)緊密融合于所有同步代碼了。
4 總結(jié)
本文介紹了一種對(duì)soc芯片進(jìn)行建模與仿真的設(shè)計(jì)環(huán)境。這種環(huán)境集成了systemc和ns-2,并且在時(shí)序上保持同步。通過(guò)的時(shí)間同步算法,兩個(gè)內(nèi)核以消息傳遞的方式集成在一起,其中ns-2用來(lái)建模網(wǎng)絡(luò)環(huán)境,systemc用來(lái)建模系統(tǒng)硬件部分。使用這種集成建模與仿真環(huán)境可以顯著加速具有網(wǎng)絡(luò)通信需求的芯片的設(shè)計(jì)過(guò)程。(文章來(lái)源:上海交通大學(xué)現(xiàn)代通信研究所)