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