袁 彥,竇珊珊
(中國(guó)電子科技集團(tuán)公司第三研究所,北京 100015)
本軟件為某聲探測(cè)系統(tǒng)全國(guó)產(chǎn)化DSP 平臺(tái)的信號(hào)處理軟件。該國(guó)產(chǎn)化平臺(tái)以?xún)善珼SP[1],一片現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(Field Programmable Gate Array,F(xiàn)PGA)和一片微控制單元(Micro Control Unit,MCU)為核心,數(shù)字信號(hào)處理器(Digital Signal Process,DSP)芯片外圍電路連接Flash 閃存和同步動(dòng)態(tài)隨機(jī)存取內(nèi)存(Synchronous Dynamic Random-Access Memory,SDRAM),共同完成聲信號(hào)的實(shí)時(shí)采集、分發(fā)、信號(hào)處理以及探測(cè)信息上報(bào)等功能[2]。其硬件電路設(shè)計(jì)如圖1 所示。AD 采集芯片(ADC)同步采集多通道聲陣列信號(hào),F(xiàn)PGA芯片控制采樣率和采樣通道數(shù),實(shí)時(shí)把采集的數(shù)據(jù)以中斷的形式分發(fā)到兩片DSP。DSPA 進(jìn)行實(shí)時(shí)的目標(biāo)定向算法,DSPB 接收到目標(biāo)方向信息后再進(jìn)行識(shí)別算法,同時(shí)DSPB 還接受上位機(jī)管控,可上報(bào)狀態(tài)信息,完成數(shù)據(jù)庫(kù)接收和自動(dòng)更新功能。DSPA 和DSPB 把實(shí)時(shí)的探測(cè)結(jié)果發(fā)送至MCU,MCU 完成界面顯示,由網(wǎng)口上報(bào)探測(cè)信息。本文主要介紹雙片DSP 的軟件設(shè)計(jì)。
圖1 硬件電路設(shè)計(jì)示意圖
本文選用的低功耗浮點(diǎn)DSP 芯片F(xiàn)TQ6713J400,最高主頻處理能力為400 Mb·s-1。根據(jù)對(duì)算法復(fù)雜度的估算,設(shè)計(jì)時(shí)就把算法分為兩部分,即目標(biāo)定向算法和目標(biāo)識(shí)別算法,分別在DSPA和DSPB 上完成。DSP 信號(hào)處理軟件的時(shí)序控制如圖2 所示。
圖2 DSP 信號(hào)處理軟件的時(shí)序控制圖
DSP采用2個(gè)緩沖器(buffer)存儲(chǔ)數(shù)據(jù)的方式,保證聲信號(hào)的連續(xù)采集存儲(chǔ)并進(jìn)行計(jì)算。每一秒定向算法計(jì)算完成之后,DSPA 定向軟件把當(dāng)前秒計(jì)算的定向結(jié)果傳送給DSPB,DSPB 結(jié)合上一秒完成采集的數(shù)據(jù)進(jìn)行識(shí)別。聲探測(cè)主要針對(duì)低空慢速目標(biāo),連續(xù)兩秒之間的聲特性變化不大?;谶@一特性,上一秒數(shù)據(jù)的定向結(jié)果配搭下一秒數(shù)據(jù)的識(shí)別結(jié)果是可行的方式,有效合理地解決了因?yàn)檫^(guò)大的計(jì)算量而分開(kāi)兩片DSP 算法的時(shí)序問(wèn)題。
本軟件為嵌入式軟件,與外部數(shù)據(jù)的交換通常采用中斷的形式。本軟件一共設(shè)計(jì)了3 個(gè)中斷,即兩個(gè)串口中斷和一個(gè)數(shù)據(jù)采集中斷,均設(shè)計(jì)采用IRQ 外部中斷的形式。兩個(gè)串口中斷是1 個(gè)字節(jié)產(chǎn)生1 次中斷。數(shù)據(jù)采集中斷是FPGA 采集滿(mǎn)512×16×2 字節(jié)產(chǎn)生1 次中斷,即1 秒的數(shù)據(jù)分4次發(fā)送完成。為了避免中斷嵌套,在中斷程序中只做必需的累加計(jì)數(shù)、設(shè)置標(biāo)志位等操作,把讀取串口數(shù)據(jù)或采集數(shù)據(jù)以及校驗(yàn)等操作都放在主程序中。3 個(gè)中斷服務(wù)程序分別設(shè)置為vector5、vector6和vector7。核心代碼如下。
本軟件兩片DSP 同時(shí)接收FPGA 分發(fā)的數(shù)據(jù),為了有效地利用資源,對(duì)于SAD7606 采集的數(shù)據(jù),F(xiàn)PGA 內(nèi)部先入先出隊(duì)列(First Input First Output,F(xiàn)IFO)緩存采集數(shù)據(jù)。當(dāng)FIFO 滿(mǎn)512×16×2 個(gè)字節(jié),設(shè)置IO 變化,產(chǎn)生IRQ 中斷,通知DSP 到緩存中讀取數(shù)據(jù)。DSP 讀取完成后,也通過(guò)設(shè)置IO電平變化通知FPGA 可進(jìn)行下一次數(shù)據(jù)傳輸。流程如圖3 所示。
圖3 信號(hào)采集接口示意圖
低功耗FT-Q6713J400 浮點(diǎn)處理芯片[3]的主頻最高為400 Mb·s-1,本項(xiàng)目軟件依托硬件設(shè)計(jì)分為相對(duì)獨(dú)立的兩個(gè)部分。DSPA 主要完成目標(biāo)定向和環(huán)境噪聲監(jiān)測(cè)功能,DSPB 主要完成識(shí)別和通道自檢功能以及數(shù)據(jù)庫(kù)版本查詢(xún)和更新功能。軟件狀態(tài)轉(zhuǎn)換流程如圖4 所示。為了保證對(duì)信號(hào)處理的長(zhǎng)期性和連續(xù)性,軟件設(shè)計(jì)每秒進(jìn)行一次定向和識(shí)別探測(cè),所以定向或識(shí)別算法要保證在1 s 完成算法計(jì)算,即每秒最大計(jì)算量不能超過(guò)400 Mb·s-1。兩片DSP 共同完成探測(cè)和管控功能。
圖4 聲探測(cè)信號(hào)處理軟件狀態(tài)轉(zhuǎn)換流程
本文選用的Flash 是CXF256M8SN,對(duì)Flash采取按扇區(qū)擦除和字模式寫(xiě)操作。每個(gè)扇區(qū)1 024字節(jié),可指定若干扇區(qū)進(jìn)行連續(xù)擦除。數(shù)據(jù)庫(kù)數(shù)據(jù)格式為Float 型,串口接收的是其對(duì)應(yīng)的32 位HEX 格式,按低字節(jié)在前、高字節(jié)在后接收并保存到Flash 中。本軟件的數(shù)據(jù)庫(kù)數(shù)據(jù)采用分包的方式,把數(shù)據(jù)庫(kù)數(shù)據(jù)分為大小相等的小包,按照通信協(xié)議分包發(fā)送[4-5]。
DSP 接收到查詢(xún)版本號(hào)指令后,會(huì)從相應(yīng)地址中讀取版本號(hào)并發(fā)送版本號(hào)回饋指令。DSP 串口接收到數(shù)據(jù)庫(kù)更新指令后,通過(guò)串口發(fā)出相應(yīng)的回饋指令,之后開(kāi)始接收數(shù)據(jù)庫(kù)數(shù)據(jù)。DSP 接收到的每一小包數(shù)據(jù)都需要通過(guò)校驗(yàn),全部包數(shù)據(jù)收齊后,再進(jìn)行包號(hào)校驗(yàn)。校驗(yàn)正確后,才進(jìn)行下一步的Flash 擦寫(xiě)。擦寫(xiě)分為數(shù)據(jù)庫(kù)版本號(hào)擦寫(xiě)和數(shù)據(jù)庫(kù)數(shù)據(jù)擦寫(xiě)兩個(gè)部分。Flash 擦寫(xiě)完成后,重新讀取Flash 中新燒寫(xiě)的數(shù)據(jù)與DSP 接收到的數(shù)據(jù),再進(jìn)行二次校驗(yàn)。校驗(yàn)正確,由串口發(fā)送數(shù)據(jù)庫(kù)更新成功指令。此時(shí),數(shù)據(jù)庫(kù)已經(jīng)更新為新的版本號(hào)。數(shù)據(jù)庫(kù)接收和更新流程如圖6 所示。
圖6 數(shù)據(jù)庫(kù)自動(dòng)更新流程圖
FLASH 擦寫(xiě)部分代碼和燒寫(xiě)代碼如下。
本文介紹的FT-Q6713J400 是一款低功耗國(guó)產(chǎn)浮點(diǎn)DSP芯片,很適用于需要長(zhǎng)期值守的探測(cè)設(shè)備。本軟件設(shè)計(jì)已成功應(yīng)用于某探測(cè)型號(hào)項(xiàng)目的分系統(tǒng)設(shè)計(jì)中。試驗(yàn)結(jié)果表明,以雙片F(xiàn)T-Q6713J400為核心的軟件設(shè)計(jì)不僅能夠滿(mǎn)足探測(cè)系統(tǒng)較大計(jì)算量的要求,而且能實(shí)現(xiàn)遠(yuǎn)程管控,滿(mǎn)足系統(tǒng)的實(shí)時(shí)性要求。本文介紹的應(yīng)用方法和設(shè)計(jì)同樣適用于同類(lèi)型的其他型號(hào)的DSP 芯片。