基于ARM的IEEE802.11bMAC層協(xié)議IP核設(shè)計(jì)
由SDL描述轉(zhuǎn)換出的C/C++代碼,與環(huán)境函數(shù)、Runtime庫(kù)以及C/C++庫(kù)一起用ARM的編譯器編譯,產(chǎn)生面向ARM的可執(zhí)行程序。其中,環(huán)境函數(shù)主要用描述系統(tǒng)運(yùn)行的具體物理環(huán)境。由SDT工具根據(jù)用戶所作的系統(tǒng)描述自動(dòng)生成一個(gè)結(jié)構(gòu)框架,然后用戶根據(jù)的采用的具體硬件平臺(tái)環(huán)境編輯這個(gè)文件,以描述真實(shí)的系統(tǒng)工作環(huán)境。Runtime庫(kù)主要包含SDL預(yù)定義的數(shù)據(jù)類(lèi)型、操作符的實(shí)現(xiàn)、調(diào)度函數(shù)、運(yùn)行錯(cuò)誤處理等信息。SDT工具提供簡(jiǎn)單的Runtime庫(kù)。C advanced/C micro代碼生成器都有各自對(duì)應(yīng)的Runtime庫(kù)。C/C++庫(kù)是ADS本身攜帶的函數(shù)庫(kù),主要包含ISO標(biāo)準(zhǔn)定義的C/C++庫(kù)函數(shù)。
在使用ARM編譯器編譯后,產(chǎn)生ARM的目標(biāo)文件(.o文件)。如果還有用ARM匯編指令編寫(xiě)的匯編程序,可用匯編器(armasm)匯編,產(chǎn)生相應(yīng)的目標(biāo)文件。把所有的目標(biāo)文件用鏈接器(armlink)鏈接,便可得到能在ARM7TDMI處理器上執(zhí)行的映像文件(.aof文件)。這時(shí)可以用ADS提供的調(diào)試工具AXD進(jìn)行程序的調(diào)試。
因?yàn)镾DL的系統(tǒng)設(shè)計(jì)在高層進(jìn)行了仿真和驗(yàn)證,所以調(diào)試的主要工作集中在驅(qū)動(dòng)、中斷和環(huán)境函數(shù)的調(diào)試上。對(duì)SDL系統(tǒng)的調(diào)度主要是通過(guò)仿真確定對(duì)系統(tǒng)性能影響嚴(yán)重的模塊并對(duì)其進(jìn)行優(yōu)化以及系統(tǒng)在實(shí)時(shí)運(yùn)行狀態(tài)下能否滿足設(shè)計(jì)要求。如果在調(diào)試中發(fā)現(xiàn)問(wèn)題需要修改SDL的系統(tǒng)設(shè)計(jì),可重新執(zhí)行如圖4所示的流程,直到滿足設(shè)計(jì)要求。
5 問(wèn)題及分析
(1)代碼生成器的選擇問(wèn)題。SDT提供三種代碼生成器,即C basic、C advanced和C micro。其中C basic是最簡(jiǎn)單的代碼產(chǎn)生器,一般只用于在SDT開(kāi)發(fā)環(huán)境中仿真系統(tǒng)的行為。C advanced和C Micro是面向應(yīng)用的代碼產(chǎn)生器,可以產(chǎn)生高效的代碼。C advanced支持幾乎所有的SDL概念,對(duì)SDL設(shè)計(jì)的約束較少。C micro可以產(chǎn)生性能更優(yōu)越、占用存儲(chǔ)空間更小的代碼,代價(jià)是對(duì)SDL設(shè)計(jì)的約束較多,例如不支持使能條件、連續(xù)信號(hào)、過(guò)程的繼承等。
(2)設(shè)計(jì)優(yōu)化問(wèn)題。在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),應(yīng)注意的設(shè)計(jì)要點(diǎn)有:當(dāng)輸出信號(hào)時(shí),應(yīng)帶上接收進(jìn)程的PID,這樣可以減少對(duì)信號(hào)進(jìn)行路由的開(kāi)銷(xiāo);信號(hào)應(yīng)盡量少帶占用大量存儲(chǔ)空間的參數(shù),因?yàn)樵谛盘?hào)傳遞時(shí)同時(shí)復(fù)制信號(hào)的參數(shù),占用大量存儲(chǔ)空間的參數(shù)將占用過(guò)多存儲(chǔ)空間并引起附加延時(shí);兩個(gè)狀態(tài)之間的傳輸操作不宜過(guò)多,否則會(huì)帶來(lái)較大延時(shí)(可以用實(shí)時(shí)仿真確定影響時(shí)延的關(guān)鍵路徑并進(jìn)行優(yōu)化);如果系統(tǒng)中有比較復(fù)雜的模塊,對(duì)時(shí)延又有嚴(yán)格要求,可以用C/C++或匯匯編單獨(dú)編寫(xiě),也可用硬件完成,如圖1的WEP算法模塊。
(3)與RTOS的集成問(wèn)題。用戶可以不使用RTOS,而使用SDT提供的缺省內(nèi)核程序,也可以自己編寫(xiě)所需的調(diào)度算法、內(nèi)存管理、中斷處理等。SDT工具直接支持的RTOS有Solaris(Posix 4)、Win32、VxWorks和OSE delta。SDT提供三種與RTOS的集成方式,即松集成、線程集成和緊集成。松集成把整個(gè)系統(tǒng)映射為OS的一個(gè)任務(wù),使用SDT提供的標(biāo)準(zhǔn)內(nèi)核進(jìn)行調(diào)度,每次進(jìn)行一個(gè)完整的傳輸。因此松集成調(diào)度的最大延時(shí)是SDL設(shè)計(jì)中狀態(tài)之間傳輸?shù)淖铋L(zhǎng)時(shí)間。緊集成把每個(gè)進(jìn)程映射為一個(gè)OS的任務(wù),可以使用OS的調(diào)度算法,給不同的任務(wù)以不同的優(yōu)先級(jí)執(zhí)行,因而性能好于松集成。線程集成則是兩者的折衷。
(4)環(huán)境函數(shù)的編寫(xiě)。環(huán)境函數(shù)主要是完成四個(gè)函數(shù)的編寫(xiě)。XInitEnv():主要用于完成系統(tǒng)的初始化操作。XInEnv():主要用于接收來(lái)自硬件或RTOS的信號(hào)并轉(zhuǎn)換成SDL系統(tǒng)所需要的信號(hào)。調(diào)度器每隔一段時(shí)間輪詢一次xInEnv()函數(shù),檢查是否有信號(hào)輸入。如果發(fā)現(xiàn)有信號(hào)輸入則發(fā)送適當(dāng)信號(hào)給SDL系統(tǒng)。XInEnv()函數(shù)中不能使用阻塞函數(shù),如getchar()等。阻塞函數(shù)會(huì)妨礙調(diào)度器處理SDL系統(tǒng)。XOutEnv():主要用于接收來(lái)自SDL系統(tǒng)的信號(hào)并轉(zhuǎn)換成對(duì)RTOS的信號(hào)或?qū)τ布牟僮?。?dāng)SDL系統(tǒng)有信號(hào)輸出時(shí),則調(diào)用xOutEnv()函數(shù),根據(jù)用戶編寫(xiě)的代碼產(chǎn)生相應(yīng)的物理信號(hào)或硬件操作。XCloseEnv():用來(lái)完成關(guān)閉環(huán)境的操作。
參考文獻(xiàn):[1].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.
[3].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[4].MSCdatasheethttp://www.dzsc.com/datasheet/MSC_1580913.html.
[5].PCFdatasheethttp://www.dzsc.com/datasheet/PCF_1201585.html.
評(píng)論