摘要: 基于AXI4Stream總線協議,在Xilinx公司提供的FPGA上實現了一個具有缺陷像素校正、色彩濾波陣列插值、圖像降噪實時圖像采集與顯示功能的視頻系統。AXI4Stream總線協議由ARM公司提出,該協議專門針對視頻、音頻、數組等數據在片內通信設計。利用IP核進行嵌入式系統開發具有簡化設計、縮短開發周期等明顯優勢。設計結果顯示,基于AXI4Stream總線的視頻系統具有通用性強、獨立、簡潔易維護等優勢。
引言
隨著科技的發展,實時視頻處理技術作為數字信號處理領域最活躍的研究方向之一得到了普遍的研究關注,并在通信、航空航天、雷達、遙測遙感和多媒體等行業中廣泛應用。與用分離元器件構建電路的模式相比,基于現場可編程門陣列(FPGA)技術的新型視頻采集系統在處理速度、可靠性、成本、擴展能力和開發周期等方面具有明顯的優勢。
近年來,基于FPGA的視頻采集系統得到了充分的研究[1,2,3,4],但鑒于此類研究對圖像數據未做通用的格式處理,使得系統過于集成,模塊間過于依賴,降低了系統通用性。AXI(Advanced eXtensible Interface)是一種總線協議,該協議是ARM公司提出的AMBA(Advanced Microcontroller Bust Architecutre)協議中重要部分,是一種面向高性能、高帶寬、低延遲的片內總線。AXI4于2010年由ARM公司發布,其中AXI4Stream屬于AXI4的子類,特別適宜流媒體數據的傳輸[5]。本文以一種專門針對視頻數據傳輸的總線,即AXI4Stream總線,對整個視頻采集系統進行重新研究。在保證高集成度的情況下,通過簡化模塊間通信接口大大提高了系統的通用性,具備良好的實用性和可擴展性。
1 AXI4Stream總線介紹
AXI4Stream總線主要應用于數字信息單向傳遞的系統中。經過采樣的物理量,例如圖像像素點數據、音頻采樣數據和經過離散數字信號系統處理的數據等,尤其適用于此總線協議。AXI4Stream 是一種單向的,由主機(master)到從機(slave)的基于握手信號傳遞數據的總線。系統采用的AXI4Stream總線是基于ARM公司發布的AMBA4 AXI4Stream Protocol v1.0參考手冊[6],該標準已廣泛應用在主流市場上的嵌入式系統當中。在保證功能完整的情況下,設計僅采用了部分信號線進行數據傳輸。相關信號線名稱和功能解釋圖略——編者注。
2 系統結構簡介
系統基于AXIStream總線,以FPGA為主控芯片,由DDR2緩存圖像數據,從CMOS圖像傳感器讀取數據并處理后,送入視頻編碼芯片,最終通過DVI接口輸出,實現了一個實時圖像采集與顯示的視頻系統。該系統硬件框圖如圖1所示。
?
圖1 系統硬件結構框圖
系統選用芯片組分別為:CMOS圖像傳感器選用Aptina公司的MT9V022,有效分辨率為752H×481V,該芯片廣泛應用于視頻監控、機器視覺等系統中;FPGA主控芯片選用Xilinx公司的Spartan6LX16,該芯片采用45 nm低功耗工藝技術,提供多達15 000個邏輯單元,滿足了低成本、大容量應用的市場要求,并極大地降低了總功耗;DDR緩存芯片選用Micro公司提供的MT47H64M16HR25E,存儲容量為1 Gb;視頻編碼芯片選用Chrontel公司提供的CH7301芯片,該芯片已廣泛應用于顯示接口電路中。
由于主控芯片選用Xilinx公司生產的FPGA,所以開發軟件采用由該公司提供的ISE(Integrated Software Environment) Design Suit套件。
系統功能模塊結構圖如圖2所示,所有模塊均采用硬件描述語言Verilog HDL在ISE內實現。
?
圖2 系統功能模塊結構框圖
對于圖1中所示功能模塊主要考慮以下幾點:
① CMOS圖像傳感器芯片和視頻編碼芯片與主控FPGA芯片通信采用的是I2 C協議,所以加入了專門的I2C通信模塊。
② 由CMOS圖像傳感器送出的圖像數據并非基于AXI4Stream總線,引入了一個通用視頻數據轉AXI4Stream模塊對數據進行AXI4Stream格式化處理。
③ 圖像傳感器存在缺陷像素(Defective Pixel),需要算法進行去除,所以數據需經過缺陷像素校正(Defective Pixel Correction)模塊處理。
④ 從圖像傳感器獲取來的像素數據是Bayer格式(Bayer Patten)的,需要轉換為RGB格式,引入了色彩濾波陣列插值(Color Filter Array Interpolation)模塊。
⑤ 經過格式轉換后的原始數據噪點較多,需要引入圖像降噪(Image Noise Reduction)模塊。
⑥ 圖像數據量龐大,而FPGA有限的存儲空間不能滿足數據吞吐需求,為了解決這個問題本文引入了外部存儲芯片DDR2,并采用專用的內存接口管理(Memory Interface Controller)模塊進行管理。
⑦ 圖像數據需要匹配相應的時序信號進行輸出,所以系統內設計了一個視頻時序信號控制(Video Timing Controller)模塊解決這個問題。
⑧ 送入視頻編碼芯片的數據格式基于AXI4Stream協議,需要引入AXI4Stream轉視頻數據模塊將圖像數據和視頻時序控制信號進行整合,轉換為編碼芯片可直接利用的數據格式。
3 功能實現模塊
3.1 I2C總線通信模塊
I2C總線協議有以下幾種不同的傳輸編碼,按順序依次為:開始位(start bit)、從設備地址(slave device address)、應答位(acknowledge bit)、數據信息(data message),以及停止位(stop bit)。一個典型的I2C總線讀、寫時序如圖3所示。其中SCK為時鐘信號線,SDA為數據信號線??臻e狀態下SCK和SDA都為高電平,讀寫開始的標志是SDA信號線拉低電平,生成一個開始位,隨后主設備送出8位從設備地址信號。從設備地址的最后一位決定了此次操作的讀寫性質,低電平表示寫操作,高電平表示讀操作。從設備隨后拉低SDA信號線以應答。主設備隨后以8位為單位進行讀或寫操作,并在應答后拉高SDA信號線表示停止位,回到空閑狀態。
?
圖3 I2C總線時序傳輸圖
3.2 視頻數據轉AXI4Stream模塊
由CMOS圖像傳感器MT9V022輸出的時序如圖4所示,其中LINE_VALID表示行數據有效,FRAME_VALID表示幀數據有效。本模塊通過偵測FRAME_VALID和LINE_VALID信號的上升和下降沿,以判斷圖像中每一行數據的開始和結束,通過結合并行傳輸的10位像素點信息,對AXI4Stream接口信號進行匹配。該模塊以主模式(master mode)接口輸出,接口信號包含:tdata表示像素點數據;TVALID和tready表示握手信號;tuser表示一幀圖像第一行第一個像素點;tlast表示每一行最后一個像素點。
該模塊在ModelSim軟件中的功能仿真圖略——編者注。經驗證,該模塊可實現數據格式轉換功能。
3.3 缺陷像素校正模塊
由于生產制造上的缺陷、日常操作中的故障,或是基于溫度或曝光差異等引起像素點電壓變化,從圖像傳感器獲取來的數據存在一定數目的缺陷像素數據。這些缺陷像素的特征大體可概括為以下幾個方面:失活(總為低),活躍(總為高),粘連(固定值)。這些異常可以進一步表征為靜態的(總是存在的)或動態的(作為曝光量或溫度的函數)。
模塊核心代碼采用Xilinx公司提供的IP核——Defective Pixel Correction IP Core[7],其編程接口如圖5所示。
?
圖5 缺陷像素校正模塊編程接口
對于圖像中較大的固定區域,此模塊需要去判斷該區域是圖像里靜止的部分還是奇異點,也就是有缺陷的像素。由于處理的數據是原始的Bayer格式,此模塊將對一個像素點相鄰且相同格式(例如同為綠色分量)的像素點進行追蹤比對,并將差值超過閾值的像素點間的信息記錄下來。
模塊里預先設定好閾值和連續比對幀數,當像素點差異在連續若干幀內都超出預定的閾值時,即可定為缺陷像素點。對于缺陷像素點,本模塊通過內插的方式將相鄰格式像素數據替換過來。
3.4 色彩濾波陣列插值模塊
由于多數圖像傳感芯片有一層色彩濾波陣列,所輸出的圖像數據是Bayer格式的,每個像素點只含有紅、綠或者藍中的一種顏色分量。要生成一幅彩色圖像,每個像素點都需要的三原色信息:紅、綠、藍。為了獲得每一個像素點的其他顏色分量,需要用該像素點相鄰區域像素的數據近似計算出其他兩種顏色分量。本模塊中采用線性插值法實現對每一個像素點的R、G、B分量的獲取。
本模塊核心代碼采用Xilinx公司提供的IP核:Color Filter Array Interpolation IP Core[8],模塊編程接口與缺陷像素校正模塊編程接口相同,所以沒有給出編程接口示意圖。模塊基本原理如下:以藍色分量這一行(BG行)的插值為例,BG行的藍色像素點的RGB分量值計算如式(1)所示,BG行的綠色像素點的RGB分量值計算如式(2)所示。
?
3.5 圖像降噪模塊
噪聲是干擾圖像質量的重要因素。一副圖像在實際應用中可能存在各種各樣的噪聲,這些噪聲可能在傳輸中產生,也可能在量化等處理過程中產生。此模塊核心代碼利用了Xilinx公司所提供的3個IP核,分別是:RGB to YCrCb ColorSpace Converter[9]、Image Noise Reduction[10]和YCrCb to RGB ColorSpace Converter[11]。3個IP間的結構原理如圖6所示。
圖像降噪模塊降噪核心采用平滑濾波器對圖像進行降噪處理?;驹韴D略——編者注。
3.6 內存接口管理模塊
本系統采用的FPGA芯片內部已經集成了MCB(Memory Controlling Block)硬核,并支持大部分廠家的存儲芯片[12]。MCB硬核能夠進行誤碼校驗和偏移時鐘校驗。另外,Xilinx提供的原語PLL_ADV工作比較穩定,而且精度較高,這些特點保證了研發產品的質量。
MIG是一種用來生成DDR2控制器IP核的軟件工具。該DDR2控制器模塊包含可修改的HDL源代碼以及相關的引腳約束和時序約束文件。用戶可以在MIG的圖形界面中選擇存儲器芯片、總線位寬,并設置CAS延遲、突發長度、引腳分配等參數。經驗證,只需在ISE軟件內配置好相關參數,并在接口編寫好簡單的讀寫控制模塊,便可實現對DDR的讀寫。
理想情況下CMOS圖像傳感器輸入數據速率和視頻編碼芯片輸出數據速率相同。但CMOS圖像傳感器需要根據光線、場景等變化實時調整曝光時長,這樣便引起了兩者數據間時序上的位移,即時序無法得到實時匹配。為了解決這個問題,在本系統中,通過內存接口管理模塊先緩存3幅圖像數據。當CMOS圖像傳感器和視頻編碼芯片吞吐速率相等時,內存里數據保持動態平衡。當CMOS圖像傳感器輸入速率小于視頻數據輸出速率時,內存里的數據面臨被讀空的風險,這時該模塊會提前進行判斷,以決定是否將上一幅圖像數據重讀一遍。由于CMOS圖像傳感器的時鐘速率和視頻編碼芯片的時鐘速率相等,故不會出現CMOS圖像數據速率超出編碼芯片數據速率(即數據溢出)的情況。
3.7 視頻時序信號控制模塊
所有的視頻顯示系統需要時序信號進行控制,一般包含了5根信號線:數據有效(data_valid),行空白(horizontal_blank),行同步(horizontal_sync),場空白(vertical_blank),場同步(vertical_sync)。所有這些信號結合起來就能讓一幅幅圖像在顯示終端連續的顯示出來。
本模塊采用有效分辨率為640×480的時序控制信號,參照視頻電子標準協會(VESA, Video Electronics Standards Association)顯示器時序標準設定參數指標。該模塊在ModelSim仿真軟件環境下的功能仿真圖略——編者注。該模塊可按照設計要求正常工作。
3.8 AXI4Stream轉視頻數據模塊
該模塊將AXI4Stream數據和視頻時序控制信號整合,使圖像中每個像素的數據按照標準的視頻時序輸出。該模塊核心代碼使用了Xilinx公司提供的IP核——AXI4Stream to Video Out IP Core[13],該模塊一般與視頻時序信號控制模塊(Video Timing Controller)結合起來使用,其功能原理框圖略——編者注。該框圖中有3個主要部分:流數據聯結器(Stream Coupler)、數據格式化器(Data Formatter)和輸出同步器(Output Synchronizer)。
流數據聯結器主要由異步讀寫FIFO(Async FIFO)和寫邏輯塊(Write Logic)組成,對該FIFO的讀寫由輸出同步器控制。該FIFO有兩個主要功能:不同主頻時鐘間緩沖,即跨時鐘域緩沖;在AXI4Stream數據和輸出處視頻信號間緩存數據,即數據緩存。數據格式化器接收來自流數據聯結器的數據和視頻信號控制模塊輸出的控制信號,并由此控制輸出同步器。
AXI4Stream數據并無一定的周期性,數據間隔時鐘周期多數沒有規律。輸出同步器作為主設備通過控制視頻信號控制模塊,使AXI4Stream數據和控制信號達到同步,同時送入數據格式化器,最終通過視頻信號輸出接口輸出。
4 系統驗證與分析
基于FPGA視頻系統的PCB板已經制作完成,并通過了板級實驗驗證。系統圖像分辨率采用標準的640×480,CMOS圖像傳感器和視頻編碼芯片工作頻率為25 MHz,主控芯片主頻為100 MHz,DDR內存芯片工作頻率為200 MHz。使用硬件描述語言Verilog HDL編寫好所有的程序代碼,并進行代碼綜合、布局布線、最后下載到Spartan6芯片內部。系統首先通過I2C通信模塊配置好CMOS圖像傳感器芯片和視頻編碼芯片,然后以末向始的順序重置所有模塊,握手信號由后一個模塊依次向前傳遞,當位于最開始的視頻數據轉AXI4Stream模塊收到后置模塊tready的信號后,系統開始正常工作。
系統工作效果如圖7所示,測試結果可以看到,系統實時圖像顯示清晰、畫面穩定、功能符合設計要求。但視頻圖像顯示效果并非為彩色,經過分析,原因是采用的圖像傳感器MT9V022并不支持彩色模式。接下來的工作就是改進CMOS圖像傳感器,采用分辨率較高且支持彩色模式的傳感器。
?
圖7 系統工作效果圖
結語
利用FPGA進行嵌入式系統開發具有設計方法靈活高效、易于實現、可移植性強、通用性強等優勢。利用多個成熟IP核進行系統開發,不僅大大減輕了設計人員的工作量,提高了工作效率,還使得個人完成大型復雜嵌入式系統變得現實可行。本文充分利用了Xilinx公司提供的IP核,系統結構清晰簡潔,各個模塊既獨立又通用,從而使得整個系統更加易于維護和升級。AXI4Stream總線協議為系統模塊間通信提供了方便。利用該總線協議不僅簡化了系統內部開發,還使得該系統與其他系統對接變得更為便利。受篇幅所限,本文僅就功能框架進行了描述,并對各個模塊進行簡要介紹。本文介紹的實例開發與設計思路具有較好的工程應用與參考價值。
評論