當前位置:首頁 > > OpenFPGA

基于 FPGA 的低成本、低延時成像系統(tǒng)

副標題:優(yōu)秀的IC/FPGA開源項目(三)-低成本、低延時成像系統(tǒng)

《優(yōu)秀的IC/FPGA開源項目》是新開的系列,旨在介紹單一項目,會比《優(yōu)秀的 Verilog/FPGA開源項目》內(nèi)容介紹更加詳細,包括但不限于綜合、上板測試等。兩者相輔相成,互補互充~


目前商用領(lǐng)域的成像系統(tǒng)還是以嵌入式ASIC為主(成品時間快,性價比高),對于一些軍工、醫(yī)學等特殊領(lǐng)域還是以FPGA為主,在特殊領(lǐng)域里延遲是最先考慮的問題(成本不是主要問題),所以今天介紹一下使用FPGA實現(xiàn)低延遲的成像系統(tǒng),這里說明一下,整個系統(tǒng)調(diào)試比較麻煩(和sensor有關(guān)),很大可能調(diào)試不出圖像,所以大家只需要知道有這個架構(gòu)即可,有需求可以自己調(diào)試。

低延遲架構(gòu)

我們這次使用的是AMD-Xilinx FPGA,大部分的圖像處理都有IP可以使用,在官方文檔中有相關(guān)的架構(gòu),具體如下:

上面的架構(gòu)是比較通用的架構(gòu),官方也有例程可以參考,但是上面架構(gòu)多了一個VDMA,這就導致視頻傳輸?shù)臅r候有1到幾幀的延遲,這對于低延遲、高分辨率的情形肯定是不能容忍的。所以官方對于特殊情況建議使用下面的架構(gòu):

去掉了VDMA,但是對于時鐘系統(tǒng)要去更高,對于視頻輸入輸出在不同時鐘域情況下是使用不了的,所以整體要求比較高。但是砍掉了VDMA和DDR,所以整體成本會低很多。關(guān)于沒有VDMA情況下的各個IP的設(shè)置及測試可以看下面的文章《不使用VDMA情況下使用AXI4總線實現(xiàn)視頻輸入輸出(低延遲首選)》。

FPGA系統(tǒng)架構(gòu)設(shè)計

我們還是參考上面的架構(gòu)來設(shè)計我們的系統(tǒng)。

當我們與圖像sensor對接時,我們通常會以不同的格式接收圖像,例如 MIPI 、并行接口,在我們接收視頻之前,我們需要先配置sensor按照我們的需求運行。通常,sensor需要通過 I2C 或 SPI 進行配置。

這次演示的平臺:

  • 7系列FPGA
  • MT9M114 sensor

sensor 的接口非常簡單,可以分為視頻接口和配置接口(IIC)。

  • 視頻接口由 10 位數(shù)據(jù)(分為 8 位和 2 位)、幀和行有效、像素時鐘和參考時鐘 (24 MHz) 組成。

  • 配置接口由連接到sensor的 I2C 和 復位IO組成。

該解決方案的架構(gòu)如下:軟核處理器(MicroBlaze)通過 I2C 配置sensor。雖然圖像處理路徑將在 FPGA 中實現(xiàn),但由于這是一種低成本應用,該解決方案不會使用 DDR 存儲器中實現(xiàn)外部幀緩沖區(qū),而是圖像處理流水線將完全在 FPGA 中實現(xiàn)。

Sensor中由于我們配置的是RAW數(shù)據(jù),所以還需要使用Sensor Demosaic和Gamma(基本成像IP)IP。

該設(shè)計還將使用軟核處理器來控制視頻時序和圖像處理路徑的其他相關(guān)配置任務(wù)。

Vivado 工程構(gòu)建

搭建MicroBlaze 系統(tǒng)

這一部分比較簡單,可以看看之前的文章《【Vivado那些事兒】MicroBlaze最小系統(tǒng)搭建及程序固化

添加其他IP

整個系統(tǒng)需要的IP主要如下:

  • CAM 接口 - 此接口與 sensor接口連接,簡單處理數(shù)據(jù)(選擇RAW數(shù)據(jù)的位數(shù)),此IP非必須
  • Video to AXIS - 這會將并行視頻轉(zhuǎn)換為 AXI 流格式
  • Sensor Demosaic - 將代表 R、G 或 B 的 RAW 像素值轉(zhuǎn)換為 24 位 RGB 格式
  • Video Timing Generator - 生成輸出格式的視頻時序信號
  • AXI Stream to Video Out - 將 AXI Stream 轉(zhuǎn)換為并行視頻
  • AXI IIC - 連接到 MicroBlaze,用于配置sensor
  • AXI UART - 連接到 MicroBlaze,用于軟件調(diào)試

添加完后就可以連線了,完整的框圖應如下所示。完整的工程在文章最后給出。

在 AXI Stream 中,使用 TUser 指示幀的開始,使用 TLast 指示行的結(jié)束。

IP的關(guān)鍵設(shè)置

Video to AXIS

Sensor Demosaic

AXI IIC 設(shè)置

其他IP可以查看文章最后的工程查看。

資源使用率

在Arty S7-50 的總利用率如下所示。

SDK 中編寫軟件

生成 Vivado 硬件后,下一步就是編寫應用軟件,用于配置sensor和視頻處理IP核。

因此,軟件中將執(zhí)行以下操作:

  • 初始化 AXI IIC、VTC 和中斷控制器
  • 設(shè)置AXI 相關(guān)中斷控制器 - 這包括三個中斷服務(wù)例程。IIC 發(fā)送、接收和狀態(tài)各一個。
  • 在 VTC 配置輸出時序
  • 通過 I2C 復位sensor并點亮 sensor板子上 LED
  • 通過I2C讀取sensor-MT9M114的ID,來檢測相機是否存在(外圍設(shè)置是否正確)
  • 通過 I2C 配置和初始化相機 - 這是最浪費時間的,好在有很多資料可以參考

初始化相機后,我們將能夠在 ILA 上看到視頻流。

調(diào)試過程中測量的FPGA和sensor之間的 I2C 通信信號。

使用 AXI UART 調(diào)試軟件:

一旦相機初始化,我們可以使用 ILA 采集信號:

上圖顯示了 1280 像素的線寬。

AXI Stream 是一種單向總線,用于將數(shù)據(jù)從主機傳輸?shù)綇臋C,作為數(shù)據(jù)流,它不包含地址通道。為了通過 AXI 流控制流和傳遞視頻時序信息,我們使用了以下信號:

  • TReady - 當準備好接收數(shù)據(jù)時由下游外設(shè)斷言
  • TValid - 當輸出數(shù)據(jù)有效時通過發(fā)送外設(shè)斷言
  • TUser - 為幀的開始發(fā)出
  • TLast - 為行尾標志

由于我們沒有 使用VDMA,所以 AXIS 流上的視頻輸出是一個連續(xù)塊,并且 TValid 在活動像素周期內(nèi)不會斷言和取消斷言。

我們可以通過使用圖像處理鏈的像素時鐘來確保 Tvalid 是連續(xù)的。

軟件部分還是參考最后的工程吧,除了sensor需要單獨編寫,其他都是由SDK自帶的例程修改而來。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉