鄭東衛(wèi) 白亞莉
(1.西安電子工程研究所 西安 710100;2.西安昆侖工業(yè)(集團)有限責任公司 西安 710043)
系統(tǒng)架構(gòu)設(shè)計是實時信號處理系統(tǒng)設(shè)計中的重要組成部分。目前雷達信號處理典型硬件平臺為FPGA加多核DSP。根據(jù)系統(tǒng)輸入?yún)?shù)設(shè)計出合理高效的信號處理機會面臨諸多問題,例如如何選擇合理的處理平臺,設(shè)計合理的拓撲結(jié)構(gòu),優(yōu)化傳輸鏈路和數(shù)據(jù)存儲空間分配等。信號處理開發(fā)設(shè)計流程如圖1所示。根據(jù)信號處理任務(wù)書指標,選擇相應(yīng)的軟件算法和硬件平臺,安排相應(yīng)的算法在哪個平臺實現(xiàn),根據(jù)實現(xiàn)平臺設(shè)計拓撲結(jié)構(gòu),然后計算傳輸鏈路帶寬分析,計算存儲空間分析等,接著進行算法實現(xiàn),實現(xiàn)完后再計算實時性是否滿足指標要求。如果不滿足需要調(diào)整硬件平臺或硬件底層拓撲結(jié)構(gòu)及系統(tǒng)架構(gòu)。所以發(fā)揮FPGA和多核DSP的各自的最優(yōu)性能,開發(fā)高效實用的系統(tǒng)架構(gòu)是十分必要的。
地面雷達信號處理算法一般包含:數(shù)字下變頻、數(shù)字波束形成、脈沖壓縮、動目標檢測、恒虛警檢測、點跡凝聚、方位俯仰測角、目標上報等環(huán)節(jié)。由于動目標檢測之前這些算法需要用到大量的乘法器加法器等,這些算法適合在FPGA中實現(xiàn),之后的算法需要大量的邏輯判斷適合在DSP中完成。
在DSP中實現(xiàn)動目標檢測之后的算法,DSP可以選用應(yīng)用廣泛的TI公司多核TMS320C6678芯片。此DSP包含8個內(nèi)核,核工作速率可達1.25GHz,每個核包含存儲區(qū)32KB的L1P,32KB的L1D,512KB的L2,8核共享4MB的MSMC,可外接8GByte的DDR3,支持最大5Gbps的SRIO接口[1]。雖然單個DSP功能很強大,但當FPGA送來的數(shù)據(jù)量很大時,單個DSP無法在一個相參處理時間內(nèi)實時完成檢測計算,就需要多片DSP并行計算完成。計算時間統(tǒng)計可在DSP中使用C語言庫中的clock函數(shù)對各個功能的信號處理計時。需要多片DSP多個核并行處理才能完成時,需要考慮到多核并行操作有一定的效率損失,需要增加一定的冗余量。
在FPGA中實現(xiàn)動目標檢測求模之前算法,需要根據(jù)系統(tǒng)參數(shù)估算所占的FPGA資源,選擇合適型號的FPGA。一般選用FPGA型號主要參考內(nèi)部乘法器數(shù)量,存儲器數(shù)量,GTX模塊數(shù)量等。
數(shù)字下變頻單元主要有混頻和濾波組成,所需的乘加器資源由下列公式?jīng)Q定:
1)使用非對稱系數(shù)Fir濾波器M路數(shù)字下變頻所需乘加器數(shù)為
M×N×Fs/(Fclk×D)×2+2
(1)
2)使用對稱系數(shù)Fir濾波器M路數(shù)字下變頻所需乘加器數(shù)為
M×N×Fs/(Fclk×D)+2
(2)
數(shù)字波束形成主要是乘累加運算,所用乘法器由公式(3)決定:
3×M×B×Fs/Fclk
(3)
數(shù)字脈沖壓縮采用時域處理方式時,時域?qū)崿F(xiàn)方式即為復(fù)數(shù)的卷積運算。一個復(fù)數(shù)的乘法運算可由4個乘法或3個乘法來實現(xiàn)。比較4個乘法和3個乘法的運算式可以看到,3個乘法的運算式雖然少了1個乘法,但需要5個加法,因此,四個乘法的運算式更適合FPGA運算。所需的乘加器資源如下:
1)使用非對稱脈壓系數(shù)B路脈壓所需乘加器數(shù):
B×N×Fs/Fclk×4+2
(4)
2)使用對稱脈壓系數(shù)B路脈壓所需乘加器數(shù):
B×N×Fs/Fclk×2+2
(5)
動目標檢測采用FFT加窗實現(xiàn),FFT所用乘法器可通過調(diào)用開發(fā)軟件的IP核來得出,加窗所用乘法器數(shù)為
B×FFT×Fs/Fclk
(6)
其中:M表示通道個數(shù);B表述波束個數(shù);N表示Fir濾波器階數(shù);Fs表示輸入數(shù)據(jù)率;Fclk表示工作時鐘頻率;D表示抽取率;FFT表示積累點數(shù)。
數(shù)字下變頻所用片內(nèi)存儲器主要由濾波器系數(shù)長度、數(shù)據(jù)位寬和數(shù)據(jù)緩存大小決定。波束形成所用片內(nèi)存儲器由通道個數(shù)、波數(shù)個數(shù)、數(shù)據(jù)位寬以及數(shù)據(jù)緩存大小決定。脈沖壓縮采用時域脈壓時,所用片內(nèi)存儲器由脈壓系數(shù)長度、數(shù)據(jù)位寬、數(shù)據(jù)緩存大小決定。動目標檢測采用FFT加窗實現(xiàn)時,所用存儲器由窗系數(shù)大小、數(shù)據(jù)位寬、數(shù)據(jù)緩存大小決定。
GTX模塊需求數(shù)量大小由與FPGA通信傳輸帶寬和接口數(shù)量來決定。FPGA與DSP之間采用SRIO通信,單片DSP與FPGA之間可最大支持4X的SRIO,即最大傳輸帶寬可達20Gbps。如果單片DSP數(shù)據(jù)傳輸帶寬不夠就需要多片DSP并行處理,既可提高傳輸帶寬又可提高處理速度。
FPGA的主要廠商有Xilinx公司、Altera公司、Lattice公司等,其中Xilinx公司的FPGA在中高端市場占有率遙遙領(lǐng)先,可結(jié)合自己使用習(xí)慣選擇不同廠商。圖2列出了Xilinx公司的Kintex-7系列的FPGA器件手冊截圖[2]。根據(jù)所用的乘法器數(shù)量,存儲區(qū)數(shù)量及GTX數(shù)量,再結(jié)合FPGA廠家的器件手冊可以選出合適的FPGA型號。
圖2 Xilinx公司的Kintex-7系列FPGA資源
每片DSP內(nèi)8個核在并行處理時如何分工配合,多核DSP程序開發(fā)中兩種常用的任務(wù)分配模式為主從模式和數(shù)據(jù)流模式[3]。
1)主從模式
將核0作為主核,主要用于任務(wù)分配、調(diào)度和觸發(fā),接收FPGA數(shù)據(jù),寫DDR3操作。
其它核為從核,主要用于讀DDR3操作,并行處理檢測數(shù)據(jù),核間同步等。這種分配方式需要主核和從核進行頻繁地消息通信。
2)數(shù)據(jù)流模式
各DSP核以流水線的方式按照數(shù)據(jù)處理的流程執(zhí)行各任務(wù)。不同DSP核間有很強的數(shù)據(jù)依賴關(guān)系。這種分配方式需要考慮不同核之間的任務(wù)劃分的均衡,否則任務(wù)較多的核會出現(xiàn)處理瓶頸。
FPGA處理完后,一個CPI內(nèi)包含的處理數(shù)據(jù)有距離單元維,多普勒通道維,波束個數(shù)維的三維數(shù)據(jù)。當多核DSP程序開發(fā)按主從模式進行任務(wù)分配時,如何將這些數(shù)據(jù)分給不同DSP或不同核來完成相應(yīng)的運算使計算效率和傳輸效率更高,現(xiàn)按三個維度劃分來分析。
1)按多普勒通道劃分
若按多普勒通道劃分,將不同的多普勒通道維數(shù)據(jù)分給不同的DSP不同的核處理,每一個DSP核處理完整的距離單元維和波束維數(shù)據(jù)。若沒有多普勒維恒虛警,不需要考慮多普勒維交疊。多普勒維點跡凝聚時需要匯總所有多普勒通道數(shù)據(jù)。
2)按距離單元劃分
若按距離段劃分,將不同的距離單元維數(shù)據(jù)分給不同的DSP不同的核處理,每一個DSP核處理完整的多普勒維和波束維數(shù)據(jù)。需要考慮在距離維恒虛警檢測時片間距離段交疊,距離維點跡凝聚時需要匯總所有距離段數(shù)據(jù)。
3)按波束劃分
若按波束劃分,將不同的波束個數(shù)維數(shù)據(jù)分給不同的DSP不同的核處理,每一個DSP核處理完整的距離單元維和多普勒維數(shù)據(jù)。需要考慮在目標方位或俯仰測角時片間需要波束交疊,波束間凝聚需要匯總所有波束數(shù)據(jù)。
按何種方式劃分,首先看不同模式積累點數(shù),距離單元個數(shù),波束個數(shù)這些參數(shù)哪個參數(shù)變化小,劃分能兼顧各個模式,其次按某種方式劃分看是否帶來數(shù)據(jù)傳輸冗余計算復(fù)雜。當按一維劃分單核還不能實時完成處理運算時,也可進行第二維的再次劃分。
前面敘述了芯片的選擇及功能劃分,而芯片內(nèi)部鏈接關(guān)系及傳輸方式也影響系統(tǒng)處理效率。整個處理過程按流水方式操作,不同芯片之間,不同核之間都需要采用乒乓方式傳輸處理。
FPGA將數(shù)據(jù)發(fā)送到DSP的共享存儲區(qū)中,由于單片DSP的共享存儲區(qū)空間僅有4MB,共享存儲區(qū)需要給全局變量及操作系統(tǒng)等留有一定的存儲空間,所以給數(shù)據(jù)傳輸留得空間有限,FPGA需要分包給DSP發(fā)送數(shù)據(jù),如果采用乒乓方式,需要的存儲空間要翻倍。FPGA采用分包的方式通過SRIO給DSP共享存儲區(qū)空間搬移數(shù)據(jù),按乒乓方式將相鄰包發(fā)到DSP的不同共享存儲區(qū)。DSP主核乒乓將共享存儲區(qū)中數(shù)據(jù)通過EDMA方式搬移到DSP外接的DDR3中。DDR3中也需開辟的乒乓存儲空間,當一個滑窗CPI所有數(shù)據(jù)包都寫入DDR3后,DSP主核給從核發(fā)送IPC中斷,從核每個滑窗CPI從DDR3中乒乓讀取數(shù)據(jù)到從核的L2中,從核處理完檢測數(shù)據(jù)后再寫入乒乓共享存儲區(qū)中供主核使用。數(shù)據(jù)乒乓傳輸過程如圖3所示。
圖3 數(shù)據(jù)乒乓流水架構(gòu)
DSP片內(nèi)8個核在處理過程中存在通信和同步的問題。核間中斷(IPC)與硬件信號量(Semaphore)是多核DSP內(nèi)實現(xiàn)核間通信與同步的兩種主要方式[4]。片上系統(tǒng)設(shè)計了核間中斷的映射中斷號與中斷向量,通過片上中斷控制器來完成內(nèi)核間的同步操作。而硬件信號量則是結(jié)合了中斷與查詢兩種方式實現(xiàn)核間的同步與數(shù)據(jù)傳遞,下面將就這兩種方式分別做一概述。
核間中斷專門用作處理器內(nèi)部各核之間的通信與同步等操作。C6678的每個內(nèi)核均可以向其他核發(fā)送中斷,每個內(nèi)核也都可以接收任何主控制核的中斷請求操作。IPC中斷的觸發(fā)和接收過程設(shè)置簡單,只需要操作各核的IPC中斷產(chǎn)生寄存器(IPCGRx)和IPC中斷響應(yīng)寄存器(IPCARx),其中x代表核ID號0~7。將IPC中斷產(chǎn)生寄存器的IPCG位置1即會觸發(fā)相應(yīng)核的IPC中斷,將寄存器中SRCCn置1會清除相應(yīng)的中斷標志[5]。
在主核程序中初始化核間中斷,當主核接收完FPGA發(fā)來的數(shù)據(jù)寫入DDR3后依次觸發(fā)給從核的核間中斷。從核完成各自檢測運算處理,通過信號量進行核間同步,同步完后由核1給核0發(fā)送核間中斷。核0收到核1的核間中斷后讀取從核的檢測數(shù)據(jù)。圖4示意了主核與從核之間的核間中斷。
圖4 多核DSP的核間中斷
DSP中信號量可用于同步多核處理流程或用來避免多個DSP核同時操作某一共享資源時產(chǎn)生的沖突問題。利用硬件信號量可以在某一共享資源正在備占用或修改時,拒接或阻塞其他DSP核訪問請求。信號量的操作主要有等待信號量CSL_semIsFree,獲取信號量CSL_semAcquireDirect,釋放信號量CSL_semReleaseSemaphore。這三個ARI函數(shù)可調(diào)用庫函數(shù)實現(xiàn)[6]。
從核處理完后可采用信號量的方式完成核間同步。設(shè)置兩個信號量,一個為處理信號量SEM_PROCESS_BASE_ID,一個為同步信號量SEM_SYNC_BASE_ID+DNUM。7個從核之間信號量過程如圖5所示。核1在處理檢測之前先獲取處理信號量SEM_PROCESS_BASE_ID,處理完檢測數(shù)據(jù)后再獲取核1的同步信號量SEM_SYNC_BASE_ID+1,然后判斷所有從核何時會全部釋放各自的同步信號量SEM_SYNC_BASE_ID+DNUM,如果全部釋放了說明所有從核都完成了檢測處理,這時核1給主核發(fā)送核間IPC中斷,如果判斷沒有全部釋放同步信號量,則進行等待。核2~7在檢測處理完后獲取各自的同步信號量SEM_SYNC_BASE_ID+DNUM,然后判斷核1是否釋放處理信號量SEM_PROCESS_BASE_ID,如果核1釋放了處理信號量,則核2~7釋放各自的同步信號量SEM_SYNC_BASE_ID+DNUM,否則判斷等待核1的處理信號量。
圖5 信號量處理流程
現(xiàn)結(jié)合實例來分析DSP的存儲空間和傳輸時間及計算時間。某地面雷達有1024個距離單元,16個多普勒通道,5個和波束數(shù)據(jù),5個差波束數(shù)據(jù),一個相參處理時間CPI為3ms。FPGA將處理后的MTD數(shù)據(jù)通過4X的SRIO送給多核DSP做后續(xù)檢測處理。DSP按主從模式處理,FPGA按波束劃分給DSP傳輸,5個和波束需要一個主核和5個從核處理,每個從核完成一個和波束的檢測處理。
DSP的存儲空間主要包含內(nèi)部L1D,L1P,L2,共享存儲區(qū),外部DDR3。在設(shè)計中為了提高代碼運行效率,一般將DSP的每個核L1D,L1P全部設(shè)為cache。L2有512MB空間,分128KB空間用于堆棧存放,剩下384KB空間用于buffer緩存,主要是運算過程中臨時數(shù)據(jù)緩存。共享存儲區(qū)中預(yù)留512KB用于程序代碼的存放,預(yù)留2MB用于接收FPGA發(fā)來的MTD數(shù)據(jù),預(yù)留1.5MB用于程序中全局變量,數(shù)組,結(jié)構(gòu)體的存放。DDR3中主要放從共享存儲區(qū)中搬來的MTD數(shù)據(jù),以及處理完的MTD模值數(shù)據(jù),重排數(shù)據(jù),雜波圖數(shù)據(jù),原始視頻數(shù)據(jù)等。由于DSP的1個主核和5個從核共享DDR3,每個從核讀取一個和波束和一個差波束數(shù)據(jù),MTD總共存儲數(shù)據(jù)為1024距離單元,16個多普勒通道,10個波束,MTD實部虛部,數(shù)據(jù)位寬32bit,如果再考慮乒乓存儲,所以共計大小為20Mbit。雜波圖設(shè)計為5維雜波圖,數(shù)據(jù)為1024距離單元,16個多普勒通道,5個和波束,3個參差的prf,256個方位單元,數(shù)據(jù)位寬為32bit,所以共計大小為1.875Gbit。而單片DSP可外掛8GByte的DDR3,完全滿足存儲空間要求。
FPGA按一包64個距離單元,16個多普勒通道數(shù)據(jù)搬移到DSP的共享存儲區(qū)中,DSP主核收到一包數(shù)據(jù)后將共享存儲區(qū)中數(shù)據(jù)搬移到DDR3中,實測每一包數(shù)據(jù)傳輸最大耗時Max_SRIO_Transmit_Time為9.174μs,如圖6所示,圖中時間單位為ns。一個滑窗CPI內(nèi)需要搬移的數(shù)據(jù)為160包(每個波束分為16包,5個和波束,5個差波束,共計160包),所以DSP主核搬移一個滑窗CPI數(shù)據(jù)耗時為160×9.174μs(1467.84μs)小于一個滑窗CPI時間3000μs,所以傳輸時間滿足要求。
圖6 DSP傳輸數(shù)據(jù)時間統(tǒng)計
DSP的單個從核處理一個有效和波束的檢測,實測單個波束檢測運行時間如圖7所示:單位為ns,恒虛警采用單元平均選大恒虛警時整個檢測最大處理時間Max_PD_Process_Time為629.053μs。DSP多核并行計算5個和波束的目標檢測,計算時間遠小于一個滑窗CPI時間,滿足系統(tǒng)實時性要求。
圖7 單個波束DSP單核檢測時間統(tǒng)計
由于整個檢測處理過程中采用乒乓處理,每個節(jié)點最大處理時間都是一個滑窗CPI時間,所以整個信號處理過程流水會延時多個滑窗CPI時間。
合理的系統(tǒng)架構(gòu)設(shè)計是雷達信號處理設(shè)計中優(yōu)先考慮的問題。硬件平臺設(shè)計冗余會導(dǎo)致系統(tǒng)資源浪費,成本增加。硬件平臺設(shè)計小于算法實現(xiàn)要求時會導(dǎo)致部分功能不能實現(xiàn),設(shè)計反復(fù),增大了設(shè)計時間,拖延了項目進度。軟件算法在已有的硬件平臺上實現(xiàn)時如果沒有規(guī)劃好算法和數(shù)據(jù)流分配,會導(dǎo)致設(shè)計復(fù)雜,通信交互繁瑣,資源競爭等問題。本文根據(jù)系統(tǒng)參數(shù)估算出所需的硬件資源,選擇合適的硬件平臺,在硬件平臺上合理分配算法,結(jié)合硬件,重點討論了多核DSP在并行運算情況下軟件架構(gòu)設(shè)計的相關(guān)問題。根據(jù)多核DSP硬件結(jié)構(gòu)特點合理安排算法流程與資源分配,避免核間沖突與總線沖突,發(fā)揮多核DSP的最優(yōu)性能。值得一提的是文中按流水處理會延時多個CPI,在后續(xù)目標點的方位測角時需要與碼盤信息修正對應(yīng)。系統(tǒng)架構(gòu)設(shè)計中的其它相關(guān)問題還需在以后的工程應(yīng)用中進一步探索。