孫慧敏 彭文秀 張開生 陳尹翔
(西安電子工程研究所 西安 710100)
由于雷達系統(tǒng)與雷達信號處理算法技術革新的速度不斷加快[1],實際應用中的雷達系統(tǒng)對信號處理的實時性、功耗等性能要求也越來越高。要實現(xiàn)一個穩(wěn)定、實時性高的雷達信號處理平臺,需要在雷達信號處理算法的每一步驗證中仔細、嚴謹?shù)闹貜蛯雽С鰯?shù)據(jù),并與Matlab算法程序的運行結果反復進行對比驗證。這需要在調試過程中花費大量的時間、精力、人力和物力。
因此,為了滿足上述功能需求,本文在國產(chǎn)FT_M6678的DSP芯片上,實現(xiàn)了一種基于SYS/BIOS操作系統(tǒng)線程間通信以及網(wǎng)絡通信的雷達信號處理系統(tǒng)。
為了在國產(chǎn)FT_M6678的DSP芯片上,實現(xiàn)基于操作系統(tǒng)和網(wǎng)絡通信雷達信號處理系統(tǒng)的功能要求,本文的硬件系統(tǒng)框架的具體架構如圖1所示。
圖1 硬件架構設計
國產(chǎn)FT_M6678芯片是對標TI公司的TMS320C6678的一款高性能軍用多核浮點DSP芯片,與TI_C6678指令集兼容[2]。該DSP芯片含有8個M66x內核,擁有數(shù)據(jù)處理能力高,片上接口資源豐富等特點。FT_M6678在本系統(tǒng)中作為主控制器,主要負責接收、處理和傳輸FPGA通過SRIO發(fā)送過來的雷達數(shù)據(jù),并通過網(wǎng)絡接口實現(xiàn)與PC機上的數(shù)據(jù)交互。
FPGA芯片是一款高性能、可編程資源豐富的芯片,在本文設計的硬件架構方案中主要完成雷達信號的采集、模數(shù)轉換、數(shù)字下變頻和雷達信號的脈沖壓縮等功能,最后,把處理完成的數(shù)據(jù)傳輸給DSP芯片。
SYS/BIOS作為強實時操作系統(tǒng),用于為應用程序提供實時的任務調度、同步和處理功能[3],提供了基于優(yōu)先級的多線程創(chuàng)建和執(zhí)行模塊、信號量同步模塊、硬件驅動模塊以及實時的分析配置工具,其分為32個中斷等級,0最低,31最高。
SYS/BIOS操作系統(tǒng)是基于實時組件軟件平臺,即RTSC,創(chuàng)建的,其提供了一套非常重要的內部處理器通信機制IPC,用于多核處理器內部處理核之間的通知。
SYS/BIOS提供的包如表1所示。每個包提供了一個或多個模塊,每個模塊又提供了使用該模塊的API。
表1 SYS/BIOS提供的包
表2 任務分配
當需要用到SYS/BIOS操作系統(tǒng)時,BIOS模塊會為其創(chuàng)建分配一個HeapMem實例[4],作為當前SYS/BIOS操作系統(tǒng)的默認heap。當程序執(zhí)行時,運行函數(shù)Memory_alloc()的里面heap是空時,此系統(tǒng)創(chuàng)建的默認heap將會被自動使用。在多核使用過程中,操作系統(tǒng)內部會使用幾個中斷向量,分別是網(wǎng)絡的7 、8 、9、 10號中斷,同時,IPC自動占用5號中斷,系統(tǒng)時鐘占用14號中斷。
大部分實時應用程序必須同時實現(xiàn)某些與當前程序看起來沒有任何關系的功能,實際上是在響應外部事件,比如收取數(shù)據(jù)或者外部同步控制信號。實現(xiàn)這些功能函數(shù)叫線程。
在SYS/BIOS操作系統(tǒng)中,這個定義被解釋成由CPU處理器執(zhí)行的單一獨立的指令流。線程主要有四種類型:硬件中斷(Hwi)線程、軟件中斷(Swi)線程、任務(Task)線程、空閑(Idle)線程[5]。
在優(yōu)先級上,硬件中斷優(yōu)先于軟件中斷,軟件中斷優(yōu)先于任務[6]。硬件中斷一般用于外部異步事件的緊急處理;軟中斷一般用于定時器和線程控制,經(jīng)常用于關聯(lián)執(zhí)行頻率比較低的應用任務或者響應時間要求跟硬件中斷相比不是很高的處理程序;任務可以一直等待直到某些必要資源能夠被使用再繼續(xù)執(zhí)行。
中斷調度:當其他中斷打斷了當前執(zhí)行的任務,系統(tǒng)則會使用堆棧來保存相關寄存器。任務的調度如圖2所示。每個任務線程都有自己獨立的堆棧,這樣能夠保證在高優(yōu)先級程序執(zhí)行完成后,正確精準地進入和執(zhí)行較低優(yōu)先級的線程。同時,中斷調度程序還允許啟用用戶觀察程序。
圖2 任務的調度
硬件中斷和軟件中斷:較高優(yōu)先級的硬件中斷執(zhí)行完之后[7],系統(tǒng)的中斷調度程序會馬上喚醒軟件中斷,響應軟件中斷的子程序將收集到的外設中斷信息進行處理;但當下個硬件中斷響應時,軟件中斷會立即被搶斷。軟件中斷處理事務以ms來計時,硬件中斷處理事務以μs來計時。
信號量:用于協(xié)調一些處于競爭關系的任務之間對共享資源的訪問。當某個事件沒有被執(zhí)行完成或者被發(fā)布時,信號量可以讓任務處于掛起狀態(tài)。在實際應用中,函數(shù)Semaphore_pend()用于等待信號量和任務的掛起,而函數(shù)Semaphore_post()用于發(fā)布信號量[8]。如果信號量計數(shù)大于0,函數(shù)Semaphore_pend()會減少信號量計數(shù)繼續(xù)執(zhí)行任務;否則,其會掛起任務直到信號量計數(shù)大于0。
事件:事件提供了線程間通信和同步的方法。事件實例可被“掛起”和“發(fā)布,如同信號量一樣。不同的是,調用Event_pend()函數(shù)需要另外指定等待哪些事件,Event_post()函數(shù)的使用則需要指定發(fā)布哪些事件。硬件中斷、軟件中斷和其他任務都可以調用Event_post()函數(shù),但只有任務能調用Event_pend()函數(shù)。
郵箱是先進先出的隊列,郵箱實例可以被多個線程讀取和寫入。當對郵箱進行寫入時,郵箱模塊把要傳遞的緩沖區(qū)里的內容復制到固定大小的內部緩沖區(qū)中。郵箱內部的緩沖區(qū)個數(shù)和大小必須在被系統(tǒng)創(chuàng)建時指定,在實際應用中郵箱發(fā)送和接收的所有緩沖區(qū)的大小必須與被創(chuàng)建時的指定的大小相同。
其中,Mailbox_post()函數(shù)表示向郵箱隊列寫數(shù)據(jù),如果隊列已滿,則其返回0,掛起任務直到其可以被寫入數(shù)據(jù);Mailbox_pend()函數(shù)表示從隊列中讀取數(shù)據(jù)[9],如果當前郵箱隊列為空,則返回0,無限等待,掛起讀取任務直到隊列有數(shù)據(jù)。
網(wǎng)絡通信可以實現(xiàn)不同操作系統(tǒng)和不同硬件體系結構的信息交互。而實現(xiàn)SYS/BIOS操作系統(tǒng)以太網(wǎng)通信模塊需要三個步驟:首先,需要實現(xiàn)底層硬件驅動程序,打通底層通信鏈路;其次,需要在DSP/BIOS操作系統(tǒng)平臺上配置和運行NDK的協(xié)議棧,添加包含必要的相關庫文件;最后才可以在平臺開發(fā)、定制、封裝用戶可以使用的網(wǎng)絡應用程序。
NDK套件的核心是TCP/IP協(xié)議棧,它也是一個分層的體系結構[10]。NDK網(wǎng)絡模型中的NDK/EMAC層實現(xiàn)沿用了之前TCP/IP模型中的傳輸層、網(wǎng)絡層、數(shù)據(jù)鏈路層的功能。
在編寫實現(xiàn)嵌入式網(wǎng)絡應用程序時,與一般的TCP/IP的實現(xiàn)流程不同,首先要在主函數(shù)中創(chuàng)建一個實現(xiàn)網(wǎng)絡調度的總線程,這個線程作為網(wǎng)絡入口程序,實現(xiàn)對協(xié)議棧進的配置和初始化,以及實現(xiàn)和完成所有網(wǎng)絡控制活動。
在實際應用中,軟件中斷和任務一般用來實現(xiàn)系統(tǒng)的主要程序代碼,硬件中斷用來響應和實現(xiàn)與外部設備關聯(lián)性特別強和對實時性要求特別高的功能模塊程序代碼。
在本文設計的雷達信號處理系統(tǒng)中,將跟外部GPIO關聯(lián)的中斷子程序代碼模塊注冊為硬件中斷線程[11],將雷達信號處理系統(tǒng)中的動目標檢測(MTD)、動目標顯示(MTI)、恒虛警檢測(CFAR)、目標凝聚、旁瓣匿影、測角、目標合并、目標上報等雷達信號處理過程注冊為任務。
在網(wǎng)絡通信功能模塊中,任務的實現(xiàn)采用客戶端和服務器的模式,硬件板卡作為網(wǎng)絡通信的服務器端,PC機作為客戶端,兩者都采用的是套接字編程。本文網(wǎng)絡通信程序的流程如下:
首先,在主線程中創(chuàng)建一個網(wǎng)絡后臺進程任務,配置流程為:
1)調用NC_SystemOpen()并創(chuàng)建一個新的配置;
2)創(chuàng)建配置,并為創(chuàng)建的配置添加本地IP地址、子網(wǎng)掩碼、域名字符串等;
3)創(chuàng)建并添加主機名hostname;
4)添加默認路由和網(wǎng)關;
5)通過調用NC_NetStart()函數(shù)啟動配置的網(wǎng)絡;
6) 在NC_NetStart()返回時,通過NC_SystemClose()函數(shù)釋放并關閉配置的網(wǎng)絡。
所有學員中除1例因懷孕待產(chǎn)未完成開題報告外,其余學員都完成各項考核指標,順利通過答辯,按時畢業(yè)。各年度學員對首次個案完成時間、開題報告首次交付時間及畢業(yè)后1年內學員學術成果統(tǒng)計如下(結果統(tǒng)計時因懷孕未完成開題報告的學員未列在統(tǒng)計內)。具體結果見下表1,成果增長趨勢見圖1。
其次,在主線程創(chuàng)建一個網(wǎng)絡連接和通信線程,實現(xiàn)流程如下:
1)調用fdOpenSession()函數(shù),為網(wǎng)絡連接任務分配文件環(huán)境;
2)初始化套接字,監(jiān)聽用戶UDP協(xié)議連接請求;
3)初始化客戶端的IP地址和端口號;
4)等待發(fā)送使能;
5)發(fā)送完成。
本文采用Qt creator軟件和C++語言實現(xiàn)網(wǎng)絡通信的客戶端程序。實時顯示脈壓數(shù)據(jù)的軟件工作流程如下:開始執(zhí)行軟件,點擊連接1,可將客戶端綁定到指定端口號,初始化成功后,當DSP發(fā)送數(shù)據(jù)過來時,會激勵readyRead信號,調用相應的槽函數(shù),用來處理通過網(wǎng)絡傳輸過來的數(shù)據(jù),先解析幀頭,獲取相關參數(shù),再按照格式解析數(shù)據(jù),并將數(shù)據(jù)添加到QLineSeries類對象里,最后實時顯示到界面上。
圖3所示為實時顯示軟件的工作流程圖。圖4所示為實時顯示脈壓數(shù)據(jù)的UI界面。
圖3 實時顯示軟件工作流程圖
圖4 實時顯示軟件UI界面
將雷達信號處理過程中的調試數(shù)據(jù)保存成文件的工作流程如下:首先,開始執(zhí)行軟件,設置保存文件的路徑和文件名,點擊連接2按鈕,客戶端初始化成功,當服務器發(fā)送數(shù)據(jù)過來時,會自動保存成文件,接收完成后,點擊斷開2按鈕,即可保存成文件。
點跡分析軟件的流程圖和UI界面分別如圖5和圖6所示。其工作流程如下:開始執(zhí)行程序,點擊點跡處理按鈕,點擊瀏覽按鈕選擇文件,在方位幀號選擇中可以指定要看的幀號,點擊加載數(shù)據(jù)按鈕,即可顯示當前的所有點跡,當鼠標放到任意點可顯示點目標相關的距離單元,方位角等信息。在界面左下方可以設置一次顯示歷史幀的數(shù)量,點擊點跡播放按鈕可顯示指定數(shù)量的幀的所有點跡。
圖5 點跡分析軟件流程圖
圖6 點跡分析軟件UI界面
圖6所示為,點跡分析界面同時顯示6幀數(shù)據(jù),將鼠標放置在任意點上方會顯示當前幀的幀號和點目標個數(shù)以及當前點目標的相關信息。
網(wǎng)絡通信模塊的工作流程如圖7所示。系統(tǒng)軟件的總處理流程框架如圖8所示。系統(tǒng)的數(shù)據(jù)流如圖9所示。
圖7 網(wǎng)絡模塊工作流程
圖8 軟件系統(tǒng)總處理流程
圖9 系統(tǒng)處理數(shù)據(jù)流
系統(tǒng)軟件的工作流程如下:系統(tǒng)上電后先執(zhí)行復位函數(shù)表實現(xiàn)系統(tǒng)復位,后執(zhí)行c_int00函數(shù),初始化C語言執(zhí)行環(huán)境,調用用戶自定義的第一個回調函數(shù)EVM_init(),此函數(shù)初始化了一些時鐘、DDR3等外部設備,運行相關模塊的初始化函數(shù),運行main函數(shù),對系統(tǒng)的硬件及參數(shù)進行初始化。在主函數(shù)運行之后,整個啟動的過程由SYS/BIOS系統(tǒng)監(jiān)管,SYS/BIOS通過在主函數(shù)中調用的BIOS_start函數(shù),系統(tǒng)開始啟動運行,在BIOS_start函數(shù)運行之后,SYS/BIOS操作系統(tǒng)內核根據(jù)用戶配置好的任務類型和優(yōu)先級調度執(zhí)行定義的各種任務。主要的初始化工作有:
1)Startup Functions啟動startup相關的函數(shù),運行用戶提供的“startup functions”函數(shù);
2)使能硬件中斷;
3)啟動定時器模塊,根據(jù)用戶實現(xiàn)的相關配置文件配置定時器模塊;如果系統(tǒng)支持定時器,在此階段配置所有的定時器使用用戶指定的配置,如果定時器被配置為“自動模式”,那么就在此啟動;
4)使能軟件中斷,用戶通過配置文件中BIOS.swiEnabled語句設置軟件中斷模塊的使能;
5)任務線程啟動,用戶通過配置文件中BIOS.taskEnabled語句設置線程模塊的啟動使能;
6)線程模塊啟動后,系統(tǒng)中的任務調度開始運行。
在系統(tǒng)運行結束后,與其相關的資源和初始化階段占用的空間需要進行釋放。釋放過程中執(zhí)行流程如下:
1)調用標準C函數(shù)中的exit函數(shù),進行C相關環(huán)境的釋放;
2)調用System提供的rtsExit函數(shù),以后進先出的方式調用各模塊的atexit函數(shù)。
本系統(tǒng)中最大的亮點為:系統(tǒng)正常運行時,當A/D芯片采集數(shù)據(jù)傳輸?shù)紽PGA,FPGA對數(shù)據(jù)做完處理后,通過SRIO傳輸給DSP,每次傳輸前使能GPIO中斷,硬件中斷觸發(fā)相應的中斷子程序,中斷子程序中實現(xiàn)對數(shù)據(jù)的解析、處理和存儲。
每接收一個CPI的數(shù)據(jù),啟動一次雷達信號處理流程,在雷達信號處理的每一步,都可以通過網(wǎng)絡將數(shù)據(jù)導出,而導出的數(shù)據(jù)可以在Matlab軟件中進行分析,并與Matlab算法相應的實現(xiàn)結果進行對比,歸一化求誤差值,在合理范圍內就可以對比證明DSP中的程序代碼模塊的實現(xiàn)效果。
本文將程序運行生成的.out文件燒寫到國產(chǎn)飛騰DSP芯片中,并啟動系統(tǒng)開始運行采集雷達數(shù)據(jù),當脈壓數(shù)據(jù)到達DSP,發(fā)布信號量,將數(shù)據(jù)發(fā)送給相關上位機軟件,界面可正常實時顯示。
將系統(tǒng)處理過程中的中間調試數(shù)據(jù),如MTD平面和MTI平面數(shù)據(jù),通過網(wǎng)絡發(fā)送給相關上位機軟件保存成文件;將數(shù)據(jù)通過仿真器從CCS軟件中導出同樣保存成文件;將上位機保存的文件與通過仿真器導出來的數(shù)據(jù)文件進行分析對比,由圖10可知,兩者數(shù)據(jù)完全相同。
圖10 DSP導出與網(wǎng)絡保存數(shù)據(jù)對比
圖4和圖6所示為本文設計的雷達系統(tǒng)中進行實時顯示脈壓數(shù)據(jù)和分析一次點數(shù)據(jù)的QT界面,由圖可知,該軟件運行和顯示正常。
綜上所述,本文基于FT6678_BIOS和網(wǎng)絡通信設計和實現(xiàn)的雷達信號處理系統(tǒng)可正常運行,并達到了節(jié)省調試時間,調試方便和實時性高的預期結果。
本文給出了基于國產(chǎn)DSP芯片的SYS/BIOS操作系統(tǒng)和網(wǎng)絡通信的雷達信號處理系統(tǒng)的設計方案和實現(xiàn)方法。在基于本文設計的硬件架構和軟件架構的基礎上,該系統(tǒng)實現(xiàn)了分層架構設計、多線程并發(fā)調度、網(wǎng)絡通信交互、上位機軟件界面、可靠的數(shù)據(jù)接收與分發(fā)。
與傳統(tǒng)的“中斷+主循環(huán)”實現(xiàn)方式相比而言,本文實現(xiàn)的雷達信號處理系統(tǒng)具有調試方便可靠,實時性高,節(jié)省開發(fā)時間以及通用性、實用性和可移植性較好,具有工程價值,可在其他工程項目中移植使用。