一種基于ADSP-BF537的無(wú)線視頻傳輸方案
無(wú)線通信技術(shù)和視頻壓縮技術(shù)的迅速發(fā)展,使得無(wú)線視頻傳輸成為人們研究的熱點(diǎn)。無(wú)線視頻傳輸具有數(shù)據(jù)量大,實(shí)時(shí)性要求高,無(wú)線信道資源有限的特點(diǎn)。新一代的視頻壓縮標(biāo)準(zhǔn)H.264結(jié)合專用視頻DSF芯片可以滿足信源編碼的要求。而處理數(shù)據(jù)量大,速度快,運(yùn)算結(jié)構(gòu)相對(duì)簡(jiǎn)單的FPGA適用于信道編碼。基于以上考慮,設(shè)計(jì)了一個(gè)無(wú)線視頻傳輸系統(tǒng),并以發(fā)射端ADSP-BF537作為控制器,配置FPGA和進(jìn)行數(shù)據(jù)通信。
1 總體結(jié)構(gòu)實(shí)現(xiàn)方案
系統(tǒng)硬件的實(shí)現(xiàn)方案如下:
發(fā)送端由攝像機(jī)、專用視頻編碼芯片、控制模塊、基帶模塊、射頻模塊(RF)等部分組成。接收端由射頻接收模塊、控制模塊、基站模塊、專用視頻解碼芯片等部分組成。系統(tǒng)結(jié)構(gòu)如圖1所示。
視頻編碼部分使用基于DM642的H.264視頻編碼器。該芯片通過(guò)網(wǎng)口傳輸數(shù)據(jù),輸出的視頻流是H.264格式,輸出圖像的分辨率范圍為176×144~702×576,而且可以根據(jù)具體需要修改碼流和幀率。
控制模塊使用ADI公司的ADSP-BF537作為主要芯片。其主要作用是完成FPGA的配置、接口控制、通信鏈路的建立(視頻流數(shù)據(jù)的傳輸)。
基帶模塊以Xilinx公司Spartan3 400萬(wàn)門級(jí)芯片的FPGA作為主要芯片。FPGA完成整個(gè)基帶信號(hào)處理,包括信道編碼、OFDM調(diào)制、濾波等。
射頻模塊由發(fā)射單元、接收單元、頻率合成單元、外置15 W功放等四部分組成,采用差分I,Q信號(hào)調(diào)制、解調(diào),雙向傳輸。發(fā)射單元將I,Q差分輸入經(jīng)調(diào)制芯片調(diào)制成340 MHz的射頻信號(hào),經(jīng)功率控制、功放、隔離器送往環(huán)行器、天線;通過(guò)收發(fā)電平控制進(jìn)行發(fā)送和接收的切換;接收單元對(duì)接收信號(hào)進(jìn)行濾波、低噪聲放大器后送I,Q解調(diào)芯片解調(diào)出差分的I,Q信號(hào),并進(jìn)行RSSI檢測(cè)和AGC控制。工作模式采用半雙工模式;頻率合成單元為發(fā)射單元提供340 MHz本振信號(hào),為接收單元提供680 MHz本振信號(hào)。
2 控制模塊中DSP與FPGA數(shù)據(jù)通信
由于FPGA基于SRAM工藝,上電后數(shù)據(jù)會(huì)丟失。一般FPGA除了采用邊界掃描方式JTAG下載外,更多采用與FPGA相對(duì)應(yīng)PROM芯片靜態(tài)配置,這種配置方式由于PROM容量小,價(jià)格昂貴,易于燒壞等缺點(diǎn),在產(chǎn)品化之前一般不予采用,更可取的方法是采用控制器動(dòng)態(tài)配置FPGA,比如單片機(jī)、DSP。同時(shí),視頻服務(wù)器通過(guò)網(wǎng)口發(fā)送視頻數(shù)據(jù),需要一個(gè)控制部分前向網(wǎng)口接收視頻服務(wù)器的數(shù)據(jù),后向配置FPGA,發(fā)送視頻數(shù)據(jù)?;谝陨峡紤],整個(gè)系統(tǒng)中控制部分均由ADI公司的Blackfin系列DSP BF537完成,DSPBF537通過(guò)接口與視頻服務(wù)器和FPGA通信。
2.1 硬件平臺(tái)
ADSP是ADI(Analog Device Inc.)公司推出的一系列高性能低功耗DSP芯片,而基于Blackfin處理器的ADSP-BF537具有接口豐富,性能優(yōu)良,價(jià)格低廉等特點(diǎn),并具有強(qiáng)大的多媒體數(shù)據(jù)處理能力。Blackfin處理器集成了一個(gè)由ADI公司和Intel公司聯(lián)合開(kāi)發(fā)的基于MSA(Micro Signal Architecture)的16/32位嵌入式處理器,支持32位RISC指令集,采用10級(jí)流水線,集成了兩個(gè)16位乘法加速器,內(nèi)核主頻最高可以達(dá)到600 MHz。ADSF-BF537總線有一個(gè)以DMA控制器為中心的高速自主數(shù)據(jù)通道。DMA總線可以在存儲(chǔ)器之間、存儲(chǔ)器和外部接口之間快速地傳遞數(shù)據(jù),并且可以和內(nèi)核并行操作。ADSP的集成開(kāi)發(fā)環(huán)境Visual DSP++中嵌入了實(shí)時(shí)操作系統(tǒng)內(nèi)核VDK,適合多任務(wù)多線程的嵌入式操作。ADI還提供了一個(gè)用于Blackfin系列嵌入式處理器的輕量級(jí)TCP/IP(LwIP)協(xié)議棧端口,可以快速將一個(gè)獨(dú)立的嵌入式應(yīng)用聯(lián)網(wǎng)。
2.2 硬件系統(tǒng)架構(gòu)
DSP與視頻服務(wù)器采用輕量級(jí)TCP/IP(LwIP)交互數(shù)據(jù),這里不過(guò)多介紹。主要介紹DSP與FPGA連接。由于FPGA基于SRAM工藝,掉電后數(shù)據(jù)會(huì)丟失。采用的方法是將作用于FPGA的通信基帶算法文件存儲(chǔ)在DSP的FLASH中。一般調(diào)試時(shí),DSP及FPGA都需要從PC機(jī)通過(guò)JTAG口進(jìn)行程序的下載。但當(dāng)系統(tǒng)程序已經(jīng)調(diào)試完畢,當(dāng)需要到戶外進(jìn)行測(cè)試或作為產(chǎn)品使用時(shí),針對(duì)系統(tǒng)調(diào)試的方便性,采用DSP自啟動(dòng)及配置FPGA部分。
ADI公司的ADSP-BF537上電后啟動(dòng)方式一共有7種。本設(shè)計(jì)中采用的DSP上電從16位FLASH啟動(dòng),啟動(dòng)程序采用Analog公司提供的燒寫啟動(dòng)FLASH的程序。第一次上電時(shí),利用JTAG,結(jié)合ADSP自帶工具“FLASH Programmer”將寫好的DSP程序燒入FLASH中。并且將FPGA的配置文件(.bit格式)讀到緩存,通過(guò)DSP燒寫到FLASH的Bankl和Bank2中,把Bank0用來(lái)做DSP自啟動(dòng)。斷電復(fù)位后,啟動(dòng)過(guò)程如下:
(1)BF537從FLASH引導(dǎo)啟動(dòng),完成DSP板級(jí)初始化。
(2)FPGA的配置文件動(dòng)態(tài)加載到FPGA中。
(3)用DSP的GPIO端口對(duì)FPGA的時(shí)鐘和數(shù)據(jù)配置專用引腳進(jìn)行模擬時(shí)序,即完成對(duì)FPGA的動(dòng)態(tài)配置。
在啟動(dòng)過(guò)程完成后,DSP與視頻服務(wù)器進(jìn)行Sock-et連接,接收壓縮的視頻碼流,并送到FPGA進(jìn)行基帶部分的處理。DSP與FPGA的接口部分如圖2所示。
圖2中DSP通過(guò)自身的外部總線與FPGA相連,F(xiàn)PGA內(nèi)部實(shí)現(xiàn)了兩個(gè)2 KB的異步存儲(chǔ)器SRAM0,SRAM1,對(duì)存儲(chǔ)器的訪問(wèn)滿足DSP外部總線的時(shí)序要求。圖2中接口連線含義如表1所示。
對(duì)DSP而言,DSP通過(guò)外部總線連接到SRAM0和SRAM1,這就相當(dāng)于外擴(kuò)了兩個(gè)外部RAM,DSP可以自由地訪問(wèn)它們。圖2中的SRAM0,SRAM1分別用于DSP發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。SRAM0和SRAM1本身是雙口RAM,可以供DSP和FPGA訪問(wèn),就是通過(guò)這種共享存儲(chǔ)器的方式完成數(shù)據(jù)交互。
2.3 軟件系統(tǒng)結(jié)構(gòu)
相關(guān)程序是用含有VDK(Visual DSP Kernel)的DSP軟件開(kāi)發(fā)工具Visual DSP開(kāi)發(fā)的。VDK是一種帶有API函數(shù)庫(kù)的實(shí)時(shí)操作系統(tǒng)內(nèi)核,它具有任務(wù)調(diào)度和任務(wù)管理功能,一共支持32個(gè)任務(wù)。VDK是整個(gè)軟件的基礎(chǔ),所有其他的程序都運(yùn)行在該Kernel上。程序流程圖如圖3所示。
上電或復(fù)位后,DSP自啟動(dòng)后VDK啟動(dòng)線程lwip_sysboot_threadtype開(kāi)始運(yùn)行。在線程lwip_sysboot_threadtype中進(jìn)行板級(jí)初始化和Lwip協(xié)議棧和網(wǎng)口初始化,其中板級(jí)初始化包括FPGA初始化,EBIU初始化,MDMA初始化,F(xiàn)LAG初始化。接下來(lái)創(chuàng)建下面幾個(gè)線程:
(1)數(shù)據(jù)傳輸:視頻數(shù)據(jù)傳輸。用于從編碼器獲取編碼后的視頻數(shù)據(jù)流,并存儲(chǔ)到緩沖區(qū)中。
(2)FPGA中斷:視頻數(shù)據(jù)發(fā)送中斷;MDMA中斷。
DSP首先通過(guò)Socket與視頻服務(wù)器連接,從視頻服務(wù)器獲取視頻數(shù)據(jù),并將數(shù)據(jù)緩存后按照特定的格式打包,等待FPGA觸發(fā)視頻數(shù)據(jù)發(fā)送中斷。中斷觸發(fā)后,DSP啟動(dòng)MDMA將一幀大小的數(shù)據(jù)發(fā)送給FPGA發(fā)送緩沖區(qū)。當(dāng)MDMA操作完成后,觸發(fā)MDMA中斷,將幀頭寫入FPGA發(fā)送緩沖區(qū)的頭兩個(gè)字節(jié)。FPGA將接收的數(shù)據(jù)進(jìn)行基帶算法處理后再將數(shù)據(jù)發(fā)送給射頻部分,之后FPGA再觸發(fā)視頻數(shù)據(jù)發(fā)送中斷,告訴DSP可以下一幀的發(fā)送,于是又啟動(dòng)MDMA,如此循環(huán)。
3 實(shí)驗(yàn)結(jié)果和分析
對(duì)系統(tǒng)在不同的信噪比的環(huán)境中傳輸?shù)恼`碼率進(jìn)行了測(cè)試。測(cè)試方法如下:將發(fā)射機(jī)的輸出端口通過(guò)數(shù)據(jù)排線與邏輯分析儀相連,邏輯分析儀將采集到的一幀發(fā)射信號(hào)送到PC中用Matlab軟件對(duì)其加上噪聲,得到信噪比固定的信號(hào)。將這個(gè)信號(hào)導(dǎo)人信號(hào)源中進(jìn)行不間斷循環(huán)發(fā)送給接收端的輸入端口。接收機(jī)接收信號(hào)進(jìn)行解調(diào)并將解調(diào)出的數(shù)據(jù)傳給PC以統(tǒng)計(jì)誤碼率。測(cè)試結(jié)果如表2所示。
4 結(jié) 語(yǔ)
設(shè)計(jì)了一種無(wú)線視頻傳輸系統(tǒng)的方案,并對(duì)其中發(fā)射部分的數(shù)據(jù)通信過(guò)程做了詳細(xì)闡述。從硬件架構(gòu)和軟件設(shè)計(jì)兩方面說(shuō)明了數(shù)據(jù)在視頻服務(wù)器、DSP和FP-GA之間的傳遞過(guò)程。其中ADSP-BF537作控制器,成功完成了動(dòng)態(tài)配置FPGA和通過(guò)網(wǎng)口傳送視頻數(shù)據(jù)的功能。該方案很好地滿足了大數(shù)據(jù)量,實(shí)時(shí)性的數(shù)據(jù)處理和結(jié)構(gòu)靈活,模塊化設(shè)計(jì)相結(jié)合的要求。同時(shí)DSP+FPGA的數(shù)字硬件系統(tǒng)開(kāi)發(fā)周期較短,系統(tǒng)容易維護(hù)和擴(kuò)展,適合實(shí)時(shí)信號(hào)處理,使方案有更廣泛的應(yīng)用。