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