摘要:PCIe總線不僅硬件接口簡(jiǎn)單,軟件和PCI總線完全兼容,而且傳輸速度數(shù)十倍于PCI總線。針對(duì)載機(jī)任務(wù)系統(tǒng)實(shí)時(shí)視頻采集記錄的需求,設(shè)計(jì)了一種基于PCIe總線的航空視頻采集記錄系統(tǒng),利用現(xiàn)場(chǎng)可編程邏輯器件(FPGA)實(shí)現(xiàn)了視頻數(shù)據(jù)流的編解碼和PCIe橋接口的設(shè)計(jì),簡(jiǎn)化了硬件接口設(shè)計(jì),提高了系統(tǒng)的工作效率。系統(tǒng)在某型數(shù)字化對(duì)抗訓(xùn)練系統(tǒng)中的實(shí)際應(yīng)用表明該設(shè)計(jì)實(shí)用可行。
0 引言
航空電子系統(tǒng)之間以傳遞狀態(tài)數(shù)據(jù)和控制數(shù)據(jù)為主,因?yàn)閿?shù)據(jù)量不十分巨大,對(duì)傳輸速率要求并不高。例如,最流行的航空總線ARINC 429和1553B總線,速率分別是100kbps和1Mbps。而隨著飛行訓(xùn)練強(qiáng)度和精度的提高,飛行試驗(yàn)和訓(xùn)練過(guò)程的多通道視頻畫(huà)面需要實(shí)時(shí)記錄下來(lái)以便進(jìn)行事后分析評(píng)估和系統(tǒng)設(shè)計(jì)改進(jìn)。與傳輸狀態(tài)控制信息相比,這些視頻數(shù)據(jù)是巨量的,對(duì)航電系統(tǒng)的海量存儲(chǔ)和數(shù)據(jù)高速傳輸都提出了更高的要求。本文提出一種航空視頻采集記錄系統(tǒng)的設(shè)計(jì)方案,采用速率高達(dá)2.5Gbps的PCIe總線構(gòu)建系統(tǒng),PCIe總線既有高速的數(shù)據(jù)傳輸能力,又有良好的外設(shè)接口,有利于大容量信號(hào)的實(shí)時(shí)傳輸。有效解決了機(jī)載多通道視頻數(shù)據(jù)的實(shí)時(shí)采集與記錄,為航空訓(xùn)練任務(wù)系統(tǒng)的事后評(píng)估和性能分析改進(jìn)提供了便捷的手段。
1 系統(tǒng)的方案設(shè)計(jì)
在航空視頻采集記錄系統(tǒng)中,攝像頭把載機(jī)任務(wù)系統(tǒng)的實(shí)時(shí)畫(huà)面視頻數(shù)據(jù)按預(yù)定格式組幀,通過(guò)LVDS信號(hào)總線傳輸給視頻采集模塊;經(jīng)過(guò)視頻采集模塊對(duì)LVDS信號(hào)電平進(jìn)行變換處理后,將單端視頻數(shù)字信號(hào)送給可編程邏輯器件(FPGA)進(jìn)行視頻解碼處理。解碼后的數(shù)字視頻,一方面通過(guò)SAA7121視頻編碼器直接送給監(jiān)視器,讓飛行員實(shí)時(shí)掌握訓(xùn)練情況與效果:另一方面通過(guò)高速PCIe總線傳送給嵌入式CPU模塊進(jìn)行視頻數(shù)據(jù)壓縮存儲(chǔ),供事后分析。航空視頻采集記錄系統(tǒng)總體結(jié)構(gòu)如圖1所示。

2 系統(tǒng)的硬件設(shè)計(jì)
系統(tǒng)的硬件設(shè)計(jì)主要集中在各個(gè)功能模塊的電路設(shè)計(jì)上,是軟件設(shè)計(jì)和系統(tǒng)調(diào)試的平臺(tái)基礎(chǔ)。硬件設(shè)計(jì)應(yīng)該保證系統(tǒng)運(yùn)行的高可靠性,在滿足要求的前提下,盡量減少可編程邏輯、系統(tǒng)軟件的設(shè)計(jì)與調(diào)試的難度。
2.1 視頻數(shù)據(jù)采集
攝像頭攝錄的視頻數(shù)據(jù)以LVDS差分電平信號(hào)進(jìn)行傳輸,需要進(jìn)行電平信號(hào)轉(zhuǎn)換才能進(jìn)行后續(xù)視頻信號(hào)的記錄處理。攝像頭傳輸?shù)囊曨l數(shù)據(jù)包括4對(duì)LVDS差分信號(hào),CLK+/CLK-是采集數(shù)據(jù)的時(shí)鐘,其余3對(duì)差分信號(hào)包含著像素灰度。差分信號(hào)經(jīng)過(guò)DS90LV032轉(zhuǎn)換,變成4個(gè)單端的數(shù)字信號(hào),供后面的電路處理。視頻采集電路如圖2所示。

因?yàn)橐曨l數(shù)據(jù)頻率較高,經(jīng)過(guò)轉(zhuǎn)換后的單端信號(hào)應(yīng)該端接10Ω的電阻以抑制反射,提高信號(hào)穩(wěn)定性。
2.2 視頻解碼和處理
對(duì)前端采集的視頻數(shù)據(jù),必須進(jìn)行處理才能實(shí)時(shí)顯示和壓縮存儲(chǔ)。由于視頻數(shù)據(jù)量大,為達(dá)到最流暢的快速處理,應(yīng)該由硬件邏輯直接進(jìn)行數(shù)據(jù)處理。視頻數(shù)據(jù)的解碼和處理主要由FPGA完成,也是可編程邏輯設(shè)計(jì)的主要任務(wù)。
當(dāng)前端DS90LV032將經(jīng)過(guò)信號(hào)轉(zhuǎn)換以后的視頻數(shù)據(jù)傳輸給FPGA,由FPGA完成視頻信號(hào)的解碼還原、格式轉(zhuǎn)換后同步傳輸給CPU模塊進(jìn)行實(shí)時(shí)記錄和實(shí)時(shí)回放視頻模塊。FPGA視頻數(shù)據(jù)處理的硬件接口設(shè)計(jì)如圖3所示

2.3 視頻數(shù)據(jù)回放
視頻回放是方便飛行員能夠?qū)崟r(shí)監(jiān)控訓(xùn)練和試驗(yàn)的情況。系統(tǒng)采用Philips公司的SAA7121視頻編碼器,將FPGA處理后的視頻數(shù)據(jù)轉(zhuǎn)換為PAL制的綜合視頻,送給飛行員面前的監(jiān)視器進(jìn)行顯示。如圖4所示。

SAA7121需要進(jìn)行初始化配置后才能工作,初始化通過(guò)設(shè)置編碼器的寄存器,配置其工作模式。初始化要通過(guò)I2C總線完成,系統(tǒng)的I2C總線接口由FPGA實(shí)現(xiàn)。同步時(shí)鐘CLK VO和8-bit并行視頻數(shù)據(jù)都是由FPGA解碼處理后傳輸過(guò)來(lái)的。編碼器的工作頻率為27MHz,F(xiàn)PGA解碼后的視頻數(shù)據(jù)經(jīng)過(guò)SAA7121編碼器的綜合視頻信號(hào)CVBS送給監(jiān)視器。同時(shí)也設(shè)計(jì)了一個(gè)備用的YC分量視頻接口。
2.4 視頻傳輸
采集的視頻數(shù)據(jù)經(jīng)過(guò)FPGA解碼處理后需要通過(guò)PCIe總線傳輸給嵌入式CPU以便于實(shí)時(shí)壓縮存儲(chǔ)。實(shí)現(xiàn)高速的PCIe總線是海量數(shù)據(jù)傳輸?shù)年P(guān)鍵。數(shù)據(jù)傳輸總線技術(shù)是不斷更新發(fā)展的過(guò)程。在數(shù)據(jù)通訊的起初階段,串行通訊因?yàn)樾盘?hào)簡(jiǎn)單、實(shí)現(xiàn)方便而應(yīng)用廣泛,占有統(tǒng)治地位,例如RS422串行通訊,盡管速率不高,目前仍然很有生命力。為解決串行通訊的瓶頸問(wèn)題,開(kāi)始采用并行傳輸總線,并行通訊的速率取決于時(shí)鐘頻率和數(shù)據(jù)寬度。目前最流行33MHz/32bit的PCI總線,峰值傳輸速率可達(dá)132Mbps。當(dāng)繼續(xù)提高時(shí)鐘頻率時(shí),并行通訊總線的數(shù)據(jù)寬度卻成為繼續(xù)提高速率的障礙。由于極高頻下的線路串?dāng)_和反饋,難以保證多路并行總線信號(hào)數(shù)據(jù)同步的一致性,數(shù)據(jù)通訊的傳輸技術(shù)從并行回歸到串行,并行雙向的PCI總線發(fā)展為串行單向的PCIe總線。速率高達(dá)2.5Gbps的PCIe總線有三對(duì)差分信號(hào),即同步時(shí)鐘CLK+/CLK-、接收信號(hào)R+/R-和發(fā)送信號(hào)T+/T-。PCIe總線設(shè)計(jì)電路如圖5所示。

在PCIe這種高速信號(hào)傳輸總線中,數(shù)據(jù)不是直接通過(guò)信號(hào)導(dǎo)線的電壓信號(hào),而是通過(guò)高頻耦合方式傳輸?shù)摹D5中的C1、C2就是發(fā)送方的耦合電容,應(yīng)盡量靠近橋片。每一對(duì)差分信號(hào)都應(yīng)該有耦合電容,圖5中時(shí)鐘和接收信號(hào)對(duì)的耦合電容,隱含在PCIe的主控方。
3 系統(tǒng)的邏輯設(shè)計(jì)
在硬件設(shè)計(jì)的基礎(chǔ)上,邏輯設(shè)計(jì)成為整個(gè)系統(tǒng)性能實(shí)現(xiàn)的關(guān)鍵。邏輯設(shè)計(jì)完成整個(gè)系統(tǒng)的時(shí)序控制、視頻數(shù)據(jù)流的采集與解碼、視頻回放的編碼和PCIe橋接口的設(shè)計(jì)。
3.1 視頻解碼
在邏輯設(shè)計(jì)中,視頻解碼的功能是將DS90LV032所轉(zhuǎn)換的單端信號(hào)解碼后寫(xiě)入FIFO緩沖,由后續(xù)邏輯讀取處理。其邏輯接口的VHDL形式描述如下:

攝像頭作為視頻源,在每一個(gè)CLK的上升沿輸出一個(gè)3-bit數(shù)據(jù)。與之相反,解碼邏輯在CLK的下降沿鎖存一個(gè)3-bit數(shù)據(jù),進(jìn)行流水線鎖存,重新還原視頻的灰度數(shù)據(jù)。對(duì)一個(gè)16-bit的數(shù)據(jù),共需發(fā)6次。
3.2 視頻編碼
為支持SAA7121編碼器,視頻回放邏輯包括為初始化而提供的I2C接口和PAL制的視頻編碼。SAA7121的寄存器是8-bit的,則其I2C接口可以描述如下:

上層邏輯調(diào)用此模塊,每調(diào)用一次,配置一個(gè)寄存器。所有128個(gè)寄存器的配置數(shù)據(jù)是預(yù)先定制的,存放在常量數(shù)組中。
經(jīng)過(guò)初始化后的SAA7121可以正常工作了。此時(shí)邏輯應(yīng)該不斷輸送視頻數(shù)據(jù)。其邏輯接口可以描述如下:

3.3 PCIe橋接口設(shè)計(jì)
數(shù)據(jù)高速傳輸主要體現(xiàn)在PCIe總線的實(shí)際吞吐量,此為解碼后的數(shù)據(jù)傳輸?shù)钠款i。邏輯設(shè)計(jì)要特別考慮到軟件的方便和高效。接口邏輯設(shè)計(jì)集中在中斷邏輯和數(shù)據(jù)傳輸?shù)腷urst方式上。
需要傳輸?shù)囊曨l數(shù)據(jù),首先送入一個(gè)FIFO,寫(xiě)入端為32k×16bit,讀出端為16k×32bit,寫(xiě)入時(shí)既適合了視頻數(shù)據(jù)的寬度,讀出傳輸時(shí)又發(fā)揮了PCI32-bit總線的優(yōu)勢(shì),加快了轉(zhuǎn)換。中斷邏輯設(shè)計(jì)如下:
(1)當(dāng)寫(xiě)入數(shù)據(jù)達(dá)到FIFO容量的1/4時(shí),即寫(xiě)夠4k×32bit時(shí)產(chǎn)生中斷。這個(gè)條件可根據(jù)FIFO的可編程空判斷,亦即PRG1 Empty=‘0’時(shí)產(chǎn)生中斷。
(2)當(dāng)主機(jī)響應(yīng)中斷,開(kāi)始讀FIFO數(shù)據(jù)時(shí)撤銷中斷。
(3)當(dāng)本次burst讀結(jié)束后,才允許根據(jù)條件重新判斷中斷條件。
PCIe橋接口的邏輯設(shè)計(jì)最重要的部分是為它的局部總線(Local bus)提供無(wú)縫的粘合邏輯,支持PCIe的單次訪問(wèn)和burst訪問(wèn)。其接口狀態(tài)機(jī)如下:


橋片的局部總線設(shè)計(jì)了50MHz的時(shí)鐘,對(duì)32-bit數(shù)據(jù)寬度,理論上可以達(dá)到200Mb/s的吞吐率。經(jīng)過(guò)應(yīng)用軟件的實(shí)測(cè),可以達(dá)到143Mb/s的速率,考慮到軟件的許多開(kāi)銷,這個(gè)速率已經(jīng)比較理想了。
4 系統(tǒng)的軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)平臺(tái)采用WindowsXP Embedded,軟件分為針對(duì)本硬件系統(tǒng)的驅(qū)動(dòng)程序和視頻壓縮與處理的應(yīng)用程序。應(yīng)用程序把視頻存為普通播放器能播放的視頻格式,每幀視頻為256行×256列共64K像素。在驅(qū)動(dòng)軟件中,當(dāng)打開(kāi)設(shè)備時(shí),申請(qǐng)一組緩沖,共128個(gè)緩沖。這個(gè)緩沖對(duì)應(yīng)用程序是透明的,每個(gè)緩沖可以存放一個(gè)完整的視頻幀,如圖6所示。驅(qū)動(dòng)程序中有兩個(gè)主要線程,中斷線程和數(shù)據(jù)讀出線程。
在邏輯設(shè)計(jì)時(shí),每當(dāng)FIFO中寫(xiě)入4kx32bi時(shí)產(chǎn)生中斷,則驅(qū)動(dòng)程序的中斷線程在響應(yīng)中斷時(shí),每次至少讀16kB。在中斷響應(yīng)讀取FIFO數(shù)據(jù)時(shí),不要用類似于for(;;)的軟件循環(huán)實(shí)現(xiàn),這種策略在硬件時(shí)序上屬于單次訪問(wèn),效率低下。只有DMA才能觸發(fā)邏輯設(shè)計(jì)中的burst周期,最大限度利用硬件性能。在啟動(dòng)DMA時(shí),一定要使能它的burst位操作長(zhǎng)度固定為16kB。這樣,每次中斷響應(yīng)就變成了維護(hù)DMA當(dāng)前寫(xiě)入緩沖的指針,填入當(dāng)前寫(xiě)入緩沖地址,然后啟動(dòng)DMA。

在應(yīng)用程序中,使用一個(gè)定時(shí)線程,通過(guò)驅(qū)動(dòng)程序讀取視頻數(shù)據(jù),然后經(jīng)過(guò)壓縮,存放成JPEG2000格式的視頻文件。定時(shí)讀取視頻數(shù)據(jù)的算法需要進(jìn)行優(yōu)化,因?yàn)槿绻麛?shù)據(jù)讀出線程太慢,中斷線程寫(xiě)入時(shí)可能覆蓋未讀走的緩沖,會(huì)造成存儲(chǔ)視頻出現(xiàn)丟失數(shù)據(jù)幀的現(xiàn)象,影響記錄視頻的連續(xù)性。
5 結(jié)束語(yǔ)
本文采用FPGA與嵌入式CPU大容量數(shù)據(jù)存儲(chǔ)相結(jié)合的方案,在系統(tǒng)各個(gè)處理環(huán)節(jié)均充分考慮到對(duì)視頻數(shù)據(jù)采集記錄實(shí)時(shí)性和可靠性的要求,設(shè)計(jì)了機(jī)載多通道實(shí)時(shí)視頻數(shù)據(jù)采集記錄系統(tǒng)。系統(tǒng)硬件設(shè)計(jì)簡(jiǎn)單,并且可同時(shí)采集多路視頻數(shù)據(jù)。在某型數(shù)字化對(duì)抗訓(xùn)練評(píng)估系統(tǒng)中的應(yīng)用表明,本設(shè)計(jì)方案滿足了預(yù)期的指標(biāo)要求,解決了載機(jī)任務(wù)系統(tǒng)多路視頻數(shù)據(jù)采集與實(shí)時(shí)記錄的關(guān)鍵問(wèn)題,在實(shí)時(shí)視頻信息采集和數(shù)據(jù)記錄應(yīng)用中具有較好的通用性和擴(kuò)展性。