王謙+田歡
摘要:文章基于DSP TMS320C6678和SYS/BIOS系統(tǒng)實(shí)現(xiàn)多進(jìn)程以太網(wǎng)絡(luò)收發(fā)功能。文章首先介紹了TMS320C6678的特性和架構(gòu),實(shí)現(xiàn)網(wǎng)絡(luò)開(kāi)發(fā)所需要的軟件環(huán)境:CCS V5,SYS/BIOS 6和NDK,最后重點(diǎn)介紹多任務(wù)以太網(wǎng)數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方法。
關(guān)鍵詞:DSP6678;以太網(wǎng);SYS/BIOS;NDK;UDP
在某型號(hào)雷達(dá)系統(tǒng)中信號(hào)處理板與多個(gè)分系統(tǒng)進(jìn)行通信采用以太網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸,一般信處板上的可編程器件如DSP或者FPGA不易實(shí)現(xiàn)這種多線程功能,傳統(tǒng)的解決方法是另配一個(gè)單板機(jī)來(lái)完成此功能。這種方法缺點(diǎn)有2個(gè):一是提高了近1倍的硬件成本;二是增加了系統(tǒng)復(fù)雜程度,降低了可調(diào)試性和可靠度。在本方案中使用TI公司最新推出的DSP處理器TMS320C6678,通過(guò)使用實(shí)時(shí)操作系統(tǒng)SYS/BIOS 6和TI網(wǎng)絡(luò)開(kāi)發(fā)工具(NDK)可以很方便地實(shí)現(xiàn)多任務(wù)的網(wǎng)絡(luò)通信功能,同時(shí),作為新一代的多核DSP處理器,可以僅使用一個(gè)核來(lái)專門完成網(wǎng)絡(luò)功能,而不影響其他的核完成信號(hào)處理功能。
1器件架構(gòu)
DSP TMS320C6678是一款超高性能支持定點(diǎn)和浮點(diǎn)運(yùn)算的DSP處理器,它基于Ti公司的KeyStone多核架構(gòu),工作時(shí)鐘最高能達(dá)到1.25GHz。該DSP擁有8個(gè)獨(dú)立的具有全處理功能的核(Core),每個(gè)核內(nèi)包括的一級(jí)程序存儲(chǔ)器(L1P)32KB和一級(jí)數(shù)據(jù)存儲(chǔ)器(L2D)32KB以及512KB的二級(jí)緩存(SL2)。除此之外的8個(gè)核心共享4096KB的共享內(nèi)部存儲(chǔ)器(MSM)和最多配至2GB的外部DDR3存儲(chǔ)器。整個(gè)芯片提供320G MAC定點(diǎn)計(jì)算或者160GFLOP浮點(diǎn)計(jì)算能力,與此同時(shí),還具有豐富的外設(shè)接口,包括SerialRapidlO,PCIe,HyperLink,Gigabit Ethernet,EMIF,12C等接口用于數(shù)據(jù)傳輸。作為Ti公司新一代主推的DSP,對(duì)多核的支持與運(yùn)算能力的提高,使其能更好地實(shí)現(xiàn)復(fù)雜的并行運(yùn)算能力,在未來(lái)高速信號(hào)處理應(yīng)用中具有廣泛的前景。
網(wǎng)絡(luò)協(xié)處理器(NETCP)是一個(gè)主要處理以太網(wǎng)數(shù)據(jù)包的硬件加速器。它具有2個(gè)千兆網(wǎng)絡(luò)模塊(GbE)用來(lái)收發(fā)符合IEEE 802.3協(xié)議的以太網(wǎng)數(shù)據(jù),1個(gè)包加速器(PA)模塊用來(lái)完成一些傳統(tǒng)的操作例如字頭匹配、包修正等功能,還有1個(gè)安全加速器(SA)用來(lái)對(duì)數(shù)據(jù)包加密。NETCP可以從以太網(wǎng)接收數(shù)據(jù),也可以通過(guò)包DMA(PKTDMA)方式從DSP或其他外設(shè)傳遞包數(shù)據(jù)。NETCP功能模塊如圖1所示。
2軟件開(kāi)發(fā)環(huán)境
SYS/BIOS是一款實(shí)時(shí)多線程操作系統(tǒng)。它的所有功能模塊都可以選擇加載以獲得最小的內(nèi)存和CPU開(kāi)銷。為了應(yīng)對(duì)不同的應(yīng)用,該系統(tǒng)提供了硬件中斷、軟件中斷、任務(wù)和空閑4種類型的線程,可以根據(jù)需要的優(yōu)先級(jí)和允許阻塞情況來(lái)使用這些線程類型。該系統(tǒng)可以很好地支持C/C++語(yǔ)言。
NDK是用來(lái)在KeyStone設(shè)備上實(shí)現(xiàn)以太網(wǎng)程序的一個(gè)開(kāi)發(fā)平臺(tái),其運(yùn)行基于SYS/BIOS實(shí)時(shí)操作系統(tǒng)。它包括了所有以太網(wǎng)開(kāi)發(fā)需要的硬件驅(qū)動(dòng)和用戶接口(Socket),以及各層協(xié)議實(shí)現(xiàn):應(yīng)用層HTTP,DNS;傳輸層UDP,TCP;網(wǎng)絡(luò)層IP,ICMP;數(shù)據(jù)鏈路層PPP,PPPOE等。
CCS V5.x是新一代的TI DSP開(kāi)發(fā)環(huán)境,基于開(kāi)源軟件WorkBench設(shè)計(jì)。對(duì)DSP進(jìn)行代碼編譯,在線調(diào)試均可以在CCS環(huán)境內(nèi)完成。在編寫代碼前首先要進(jìn)行工程配置,加載SYS/BIOS和NDK,以及對(duì)其必需的模塊進(jìn)行選擇加載,對(duì)內(nèi)存分配進(jìn)行管理,設(shè)置主進(jìn)程和中斷。
3軟件架構(gòu)及實(shí)現(xiàn)
在本方案中要通過(guò)交換機(jī)實(shí)現(xiàn)對(duì)多個(gè)終端的以太網(wǎng)數(shù)據(jù)傳輸,每個(gè)終端具有不同的IP地址和端口號(hào)。按照終端的類型收發(fā)需求和傳輸協(xié)議可以將網(wǎng)絡(luò)套接字(Socket)分為3類:(1)按照UDP協(xié)議發(fā)送數(shù)據(jù)。(2)按照組播協(xié)議發(fā)送數(shù)據(jù)。(3)按照UDP協(xié)議接收/發(fā)送數(shù)據(jù)。每一種終端類型需要對(duì)Socket進(jìn)行不同的配置,并且每個(gè)Socket能獨(dú)占一個(gè)進(jìn)程以致相互之間不受影響。由于一些器件的初始化程序只能在Core0上完成,所以使用Core0作為專門的網(wǎng)絡(luò)數(shù)據(jù)處理核,Core0與其他核進(jìn)行數(shù)據(jù)交換在約定的公共存儲(chǔ)區(qū)上完成。由于項(xiàng)目對(duì)網(wǎng)絡(luò)實(shí)時(shí)性要求不嚴(yán)格,故數(shù)據(jù)收發(fā)能采用循環(huán)查詢的方式進(jìn)行。基于以上要求設(shè)計(jì)了如圖2所示的軟件實(shí)現(xiàn)流程。
在NDK中通過(guò)函數(shù)DaemonNew()建立Socket進(jìn)程,在該函數(shù)中定義了Socket類型、端口號(hào)和觸發(fā)函數(shù)。當(dāng)后臺(tái)程序接收到對(duì)應(yīng)端口號(hào)的IP包后,會(huì)執(zhí)行一次觸發(fā)函數(shù)。對(duì)于只進(jìn)行發(fā)送的Socket(1類、2類),由于不會(huì)接收任何IP包,也就不會(huì)進(jìn)入到觸發(fā)函數(shù)。為了解決這個(gè)問(wèn)題,只能借用具有接收數(shù)據(jù)的Socket(3類)來(lái)完成觸發(fā)動(dòng)作?;诖嗽O(shè)計(jì)了如圖3所示的實(shí)現(xiàn)方案。
Socket3進(jìn)程建立后即處于等待接收狀態(tài),當(dāng)?shù)谝淮问盏酵獠縄P數(shù)據(jù)包輸入的時(shí)候,除了完成自身的發(fā)送任務(wù)之外,向其他Socket分別發(fā)送一包內(nèi)容為空的數(shù)據(jù),使之打開(kāi)任務(wù)進(jìn)程。Socket1和Socket2在進(jìn)程中通過(guò)循環(huán)等待發(fā)送許可的方式進(jìn)行數(shù)據(jù)發(fā)送,需要注意的是每次循環(huán)中需要插入一個(gè)Task sleep語(yǔ)句以保證該進(jìn)程對(duì)CPU資源有一定的釋放時(shí)間,用以保證其他進(jìn)程的運(yùn)行。
通過(guò)運(yùn)行試驗(yàn),該實(shí)現(xiàn)方法能初步滿足項(xiàng)目的設(shè)計(jì)要求,但是由于對(duì)新器件的使用還處于初始階段,后期運(yùn)行的穩(wěn)定性及誤碼率等指標(biāo)還有待進(jìn)一步試驗(yàn)測(cè)試。