FPGA高端項(xiàng)目:解碼索尼IMX327 MIPI相機(jī)+圖像縮放+HDMI輸出,提供開(kāi)發(fā)板+工程源碼+技術(shù)支持
1、前言
FPGA圖像采集領(lǐng)域目前協(xié)議最復(fù)雜、技術(shù)難度最高之一的應(yīng)該就是MIPI協(xié)議了,MIPI解碼難度之高,令無(wú)數(shù)英雄競(jìng)折腰,以至于Xilinx官方不得不推出專(zhuān)用的IP核供開(kāi)發(fā)者使用,不然太高端的操作直接嚇退一大批FPGA開(kāi)發(fā)者,就沒(méi)人玩兒了。
本設(shè)計(jì)基于Xilinx的Kintex7-325T中端FPGA開(kāi)發(fā)板,采集IMX327 MIPI攝像頭的4 Lane MIPI視頻,IMX327 攝像頭配置為 MIPI4 Lane RAW12模式,輸出有效分辨率為1920x1080@60Hz;IMX327 MIPI攝像頭引腳經(jīng)過(guò)權(quán)電阻方案分出LP電路后接入FPGA的HS BANK的LVDS差分IO;采用自定義的MIPI CSI RX解碼IP實(shí)現(xiàn)MIPI的D_PHY+CSI_RX功能,輸出AXI4-Stream格式的RAW12格式視頻,該IP由本博免費(fèi)提供;至此,MIPI視頻解碼工作完成,但此時(shí)的視頻還是原始的RAW12格式,遠(yuǎn)遠(yuǎn)達(dá)不到輸出顯示要求,所以還需進(jìn)行圖像處理操作,也就是圖像ISP操作;本博提供及其完整的圖像ISP,具體流程包括Bayer轉(zhuǎn)RGB888、自動(dòng)白平衡、色彩校正、伽馬校正、RGB888轉(zhuǎn)YCrCb444、圖像增強(qiáng)、YCrCb444轉(zhuǎn)RGB888、AE自動(dòng)曝光等一系列操作;經(jīng)過(guò)ISP處理后的圖像顏色飽滿、畫(huà)質(zhì)清晰,輸出RGB888格式的視頻;然后用本博自研、基于HLS實(shí)現(xiàn)的、任意比例任意尺寸縮放的、AXIS接口的、傻瓜式使用的圖像縮放IP,實(shí)現(xiàn)對(duì)MIPI視頻的縮放處理;然后再使用Xilinx官方的VDMA圖像緩存架構(gòu)將視頻緩存到板載的DDR3中;然后在VGA時(shí)序的控制下將緩存視頻從DDR3中讀出,再使用本博常用的HDMI輸出模塊將圖像輸出到顯示器顯示即可;針對(duì)目前市面上主流的索尼IMX系列相機(jī),本方案一共移植了1套工程源碼,詳情如下:
工程源碼1:Xilinx Kintex7-325T FPGA 解碼索尼的 IMX327 MIPI相機(jī),IMX327 被配置為 4 Lane RAW12 1080P分辨率;經(jīng)FPGA解碼、ISP圖像處理、圖像縮放、VDMA圖像緩存(Xilinx官方IP)、VGA時(shí)序同步、HDMI視頻輸出等操作后,通過(guò)板載的HDMI接口輸出顯示器;本工程的相機(jī)接在配套FPGA開(kāi)發(fā)板的P4接口;
IMX327-MIPI相機(jī)在FPGA開(kāi)發(fā)板P4口的連接方式如下圖:
2、相關(guān)方案推薦
本博主所有FPGA工程項(xiàng)目–>匯總目錄
其實(shí)一直有朋友反饋,說(shuō)我的博客文章太多了,亂花漸欲迷人,自己看得一頭霧水,不方便快速定位找到自己想要的項(xiàng)目,所以寫(xiě)了一篇匯總目錄的博文并置頂,列出我目前已有的所有項(xiàng)目,并給出總目錄,每個(gè)項(xiàng)目的文章鏈接,當(dāng)然,本博文實(shí)時(shí)更新。。。博客鏈接如下:
點(diǎn)擊直接前往
我這里已有的 MIPI 編解碼方案
我這里目前已有豐富的基于FPGA的MIPI編解碼方案,主要是MIPI解碼的,既有純vhdl實(shí)現(xiàn)的MIPI解碼,也有調(diào)用Xilinx官方IP實(shí)現(xiàn)的MIPI解碼,既有2line的MIPI解碼,也有4line的MIPI解碼,既有4K分辨率的MIPI解碼,也有小到720P分辨率的MIPI解碼,既有基于Xilinx平臺(tái)FPGA的MIPI解碼也有基于Altera平臺(tái)FPGA的MIPI解碼,還有基于Lattice平臺(tái)FPGA的MIPI解碼,后續(xù)還將繼續(xù)推出更過(guò)國(guó)產(chǎn)FPGA的MIPI解碼方案,畢竟目前國(guó)產(chǎn)化方案才是未來(lái)主流,后續(xù)也將推出更多MIPI編碼的DSI方案,努力將FPGA的MIPI編解碼方案做成白菜價(jià)。。。
基于此,我專(zhuān)門(mén)建了一個(gè)MIPI編解碼的專(zhuān)欄,并將MIPI編解碼的博客都放到了專(zhuān)欄里整理,對(duì)FPGA編解碼MIPI有項(xiàng)目需求或?qū)W習(xí)興趣的兄弟可以去我的專(zhuān)欄看看,專(zhuān)欄地址如下:
點(diǎn)擊直接前往專(zhuān)欄
3、本 MIPI CSI-RX IP 介紹
本設(shè)計(jì)采用本博自研的MIPI CSI RX解碼IP實(shí)現(xiàn)MIPI的D_PHY+CSI_RX功能,輸出AXI4-Stream格式的RAW12顏色視頻,該IP由本博免費(fèi)提供;該IP目前只適用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12圖像,輸入分辨率最高支持4K @30幀;IP UI配置界面如下:
該自定義IP只提供網(wǎng)表不提供源碼,但用戶依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一樣,沒(méi)有本質(zhì)區(qū)別,因?yàn)镸IPI CSI-2 RX Subsystem也是看不到源碼的;MIPI CSI-RX IP資源消耗如下:
4、個(gè)人 FPGA高端圖像處理開(kāi)發(fā)板簡(jiǎn)介
本博客提供的工程源碼需配合本博提供的FPGA高端圖像處理開(kāi)發(fā)板才能使用,亦或者讀者自己拿去移植,但本博推薦使用本博客提供的工程源碼需配合本博提供的FPGA高端圖像處理開(kāi)發(fā)板,該開(kāi)發(fā)板截圖如下:
此開(kāi)發(fā)板專(zhuān)為高端FPGA圖像處理設(shè)計(jì),適合公司項(xiàng)目研發(fā)、研究所項(xiàng)目預(yù)研、高校項(xiàng)目開(kāi)發(fā)、個(gè)人學(xué)習(xí)進(jìn)步等場(chǎng)景需求,本博之前專(zhuān)門(mén)寫(xiě)過(guò)一篇博文詳細(xì)介紹了該開(kāi)發(fā)板的情況,感興趣的請(qǐng)移步那篇博文,博客地址如下:
點(diǎn)擊直接前往
5、詳細(xì)設(shè)計(jì)方案
設(shè)計(jì)原理框圖
工程源碼的設(shè)計(jì)原理框圖如下:
IMX327 及其配置
本設(shè)計(jì)使用本博提供的專(zhuān)用SONY公司的 IMX327 MIPI相機(jī),該相機(jī)輸出分辨率達(dá)到了1920x1080,采用焦距可調(diào)的鏡頭,清晰度極高,適用于高端項(xiàng)目開(kāi)發(fā),相機(jī)截圖如下:
IMX327 MIPI相機(jī)需要 i2c配置才能正確使用,本設(shè)計(jì)調(diào)用本博自定義的i2c主機(jī)IP實(shí)現(xiàn)對(duì)IMX327的配置,該IP掛載與AXI-Lite總線上,通過(guò)MicroBlaze軟核運(yùn)行的C語(yǔ)言代碼實(shí)現(xiàn)配置,此外,本博還設(shè)計(jì)了自動(dòng)曝光程序,實(shí)時(shí)讀取IMX327 RAW12像素,通過(guò)寫(xiě)IMX327對(duì)應(yīng)寄存器的方式實(shí)現(xiàn)實(shí)時(shí)的自動(dòng)曝光算法,使得IMX327在暗黑的環(huán)境下也能輸出明亮的圖像;
本博提供的FPGA開(kāi)發(fā)板有兩個(gè)MIPI CSI-RX接口,分別位于P3、P4接口,因此可以接兩個(gè)MIPI相機(jī),其中,P4接口的相機(jī)采用螺絲固定方式連接,適用于FPGA開(kāi)發(fā)板需要移動(dòng)的項(xiàng)目,如小車(chē)等;P3接口的相機(jī)采用FPC軟排線方式連接,適用于FPGA開(kāi)發(fā)板不需要移動(dòng)的項(xiàng)目,如固定檢測(cè)等,具體連接方式如下圖:
MIPI CSI RX
本設(shè)計(jì)采用自定義的MIPI CSI RX解碼IP實(shí)現(xiàn)MIPI的D_PHY+CSI_RX功能,輸出AXI4-Stream格式的RAW12顏色視頻,該IP由本博免費(fèi)提供;該IP目前只適用于Xilinx A7及其以上系列器件,支持的 4 lane RAW12圖像,輸入分辨率最高支持4K @30幀;IP UI配置界面如下:
該自定義IP只提供網(wǎng)表不提供源碼,但用戶依然可以自由使用,和使用Xilixn官方的 MIPI CSI-2 RX Subsystem一樣,沒(méi)有本質(zhì)區(qū)別,因?yàn)镸IPI CSI-2 RX Subsystem也是看不到源碼的;
圖像 ISP 處理
本博提供及其完整的圖像ISP,具體流程包括Bayer轉(zhuǎn)RGB888、自動(dòng)白平衡、色彩校正、伽馬校正、RGB888轉(zhuǎn)YCrCb444、圖像增強(qiáng)、YCrCb444轉(zhuǎn)RGB888、AE自動(dòng)曝光等一系列操作;經(jīng)過(guò)ISP處理后的圖像顏色飽滿、畫(huà)質(zhì)清晰,輸出YCrCb422格式的視頻;圖像 ISP 處理在工程 Block Design中如圖:
這些IP均為Xilinx的免費(fèi)IP,有的需要配置才能使用,在MicroBlaze軟核運(yùn)行的C語(yǔ)言代碼已經(jīng)提供了配置程序;其中AE自動(dòng)曝光采用SDK C語(yǔ)言AE算法實(shí)現(xiàn),F(xiàn)PGA實(shí)時(shí)讀取IMX327的亮度值,然后與AE模型進(jìn)行比較,亮度不足則補(bǔ)光,亮度太高則降光,通過(guò)控制IMX327內(nèi)部寄存器實(shí)現(xiàn),C代碼需要在MicroBlaze軟核運(yùn)行;
自研HLS圖像縮放詳解
工程圖像縮放采用HLS方案C++代碼實(shí)現(xiàn),并綜合成RTL后封裝為IP,可在vivado中調(diào)用該IP,關(guān)于這個(gè)方案詳情,請(qǐng)參考我之前的博客,博客鏈接如下:
點(diǎn)擊直接前往
該IP在vivado中的綜合資源占用情況如下:
HLS圖像縮放需要在SDK中運(yùn)行驅(qū)動(dòng)和用戶程序才能正常工作,我在工程中給出了C語(yǔ)言程序,具體參考工程源碼;通過(guò)調(diào)用驅(qū)動(dòng)API,可自由改變縮放后的輸出分辨率;
圖像緩存
工程使用VDMA圖像緩存方案,VDMA架構(gòu)使用Xilinx官方力推的VDMA圖像緩存架構(gòu)實(shí)現(xiàn)圖像3幀緩存,VDMA圖像緩存架構(gòu)由Video In to AXI4-Stream、VDMA、Video Timing Controller、AXI4-Stream To Video Out構(gòu)成;其在Block Design中如下:
VDMA需要驅(qū)動(dòng)才能正常工作,本工程提供C語(yǔ)言驅(qū)動(dòng);
HDMI輸出
HDMI輸出架構(gòu)由VGA時(shí)序和HDMI輸出模塊構(gòu)成,VGA時(shí)序負(fù)責(zé)產(chǎn)生輸出的1920x1080@60Hz的時(shí)序,并控制FDMA數(shù)據(jù)讀出,HDMI輸出模塊負(fù)責(zé)將VGA的RGB視頻轉(zhuǎn)換為差分的TMDS視頻,代碼架構(gòu)如下:
HDMI輸出模塊采用verilog代碼手寫(xiě),可以用于FPGA的HDMI發(fā)送應(yīng)用,關(guān)于這個(gè)模塊,請(qǐng)參考我之前的博客,博客地址:點(diǎn)擊直接前往
工程源碼架構(gòu)
工程源碼的vivado Block Design設(shè)計(jì)截圖如下:
工程源碼截圖如下:
工程源碼需要運(yùn)行MicroBlaze軟核,用于配置ISP、圖像縮放、VDMA等;SDK工程架構(gòu)如下:
時(shí)序約束
由于本工程使用的時(shí)鐘較多,有MIPI輸入的差分時(shí)鐘,有MIG使用的差分時(shí)鐘,有MIPI相機(jī)使用的像素時(shí)鐘,有HDMI模塊使用的差分時(shí)鐘,所以必須做時(shí)序分組約束,在代碼的XDC文件里已經(jīng)做好;此外,由于MIG輸出的用戶時(shí)鐘達(dá)到了200M,所以整個(gè)系統(tǒng)的時(shí)鐘太高,又加之整個(gè)工程使用的AXI總線較多,就導(dǎo)致時(shí)序很不收斂,所以我們將MIPI解碼輸出的時(shí)鐘控制在100M,這樣一來(lái),圖像從MIPI解碼到VDMA之間時(shí)鐘保持在100M的較低頻率下,而軟核控制的AXI總線系統(tǒng)依然跑200M,所以時(shí)序就收斂很多;如果不做上述時(shí)序約束,會(huì)導(dǎo)致MicroBlaze軟核程序直接跑飛,整個(gè)系統(tǒng)無(wú)法運(yùn)行嗎,甚至在SDK里都無(wú)法進(jìn)入DEBUG;
6、工程源碼1詳解–>IMX327解碼+HLS圖像縮放+HDMI輸出
開(kāi)發(fā)板FPGA型號(hào):Xilinx–Kintex7–xc7k325tffg676-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:IMX327 MIPI相機(jī),4 Lane,分辨率1920x1080@60Hz;
輸出:HDMI,分辨率1920x1080@60Hz下疊加縮放后的圖像輸出;
縮放方案:自研HLS圖像縮放方案;
輸入輸出縮放:輸入1920x1080–>輸出960x540;
圖像緩存方案:VDMA方案;
圖像緩存路徑:DDR3;
工程作用:此工程目的是讓讀者掌握FPGA實(shí)現(xiàn)IMX327相機(jī)MIPI解碼+圖像縮放+轉(zhuǎn)HDMI的設(shè)計(jì)能力,以便能夠移植和設(shè)計(jì)自己的項(xiàng)目;
工程Block Design和工程代碼架構(gòu)請(qǐng)參考第5章節(jié)“工程源碼架構(gòu)“小節(jié)內(nèi)容;
工程的資源消耗和功耗如下:
7、工程移植說(shuō)明
vivado版本不一致處理
1:如果你的vivado版本與本工程vivado版本一致,則直接打開(kāi)工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開(kāi)工程后,點(diǎn)擊文件–>另存為;但此方法并不保險(xiǎn),最保險(xiǎn)的方法是將你的vivado版本升級(jí)到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解決如下:
打開(kāi)工程后會(huì)發(fā)現(xiàn)IP都被鎖住了,如下:
此時(shí)需要升級(jí)IP,操作如下:
FPGA型號(hào)不一致處理
如果你的FPGA型號(hào)與我的不一致,則需要更改FPGA型號(hào),操作如下:
更改FPGA型號(hào)后還需要升級(jí)IP,升級(jí)IP的方法前面已經(jīng)講述了;
其他注意事項(xiàng)
1:由于每個(gè)板子的DDR不一定完全一樣,所以MIG IP需要根據(jù)你自己的原理圖進(jìn)行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據(jù)你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;
8、上板調(diào)試驗(yàn)證
準(zhǔn)備工作
需要準(zhǔn)備的器材如下:
本博提供的FPGA開(kāi)發(fā)板;
本博提供的IMX327 MIPI相機(jī);
HDMI顯示器;
我的開(kāi)發(fā)板了連接如下:
1920x1080縮放到960x540–>視頻輸出演示
通過(guò)調(diào)用圖像縮放API驅(qū)動(dòng)程序,可自由改變縮放后的輸出分辨率,以下是1920x1080縮放到960x540的輸出演示:
SDK里API調(diào)用程序如下:
視頻輸出如下:
IMX327縮放960x540
1920x1080縮放到1280x720–>視頻輸出演示
通過(guò)調(diào)用圖像縮放API驅(qū)動(dòng)程序,可自由改變縮放后的輸出分辨率,以下是1920x1080縮放到1280x720的輸出演示:
SDK里API調(diào)用程序如下:
視頻輸出如下:
IMX327縮放720P文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-850967.html
9、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無(wú)法郵箱發(fā)送,以某度網(wǎng)盤(pán)鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤(pán)資料如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-850967.html
到了這里,關(guān)于FPGA高端項(xiàng)目:解碼索尼IMX327 MIPI相機(jī)+圖像縮放+HDMI輸出,提供開(kāi)發(fā)板+工程源碼+技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!