1、前言
FPGA圖像采集領(lǐng)域目前協(xié)議最復(fù)雜、技術(shù)難度最高的應(yīng)該就是MIPI協(xié)議了,MIPI解碼難度之高,令無數(shù)英雄競(jìng)折腰,以至于Xilinx官方不得不推出專用的IP核供開發(fā)者使用,不然太高端的操作直接嚇退一大批FPGA開發(fā)者,就沒人玩兒了。
本設(shè)計(jì)基于Lattice的LCMXO3LF-6900C-5BG256C開發(fā)板,采集IMX219攝像頭的1080P 4Line MIPI視頻,IMX219攝像頭是專門的攝像頭轉(zhuǎn)接板,提供該轉(zhuǎn)接板的原理圖和PCB源文件,可以用Altium Designer系列軟件打開,甚至可以直接打板批量生產(chǎn),Lattice FPGA自帶MIPI解碼源語,直接調(diào)用即可完成MIPI解碼,這也是Lattice FPGA在做MIPI視頻編解碼方面的獨(dú)特優(yōu)勢(shì),MIPI視頻進(jìn)入FPGA后,經(jīng)過D-PHY解串,Byte對(duì)齊,Line對(duì)齊,MIPI CSI數(shù)據(jù)包解碼,RAW10轉(zhuǎn)Bayer,Bayer轉(zhuǎn)RGB,RGB轉(zhuǎn)YUV,視頻輸出矯正,最后的視頻數(shù)據(jù)送入Cypress FX3 USB3.0接口輸出;用Cypress官方的USB3.0攝像頭上位機(jī)接收并顯示視頻;Lattice FPGA開發(fā)板提供該轉(zhuǎn)接板的原理圖和PCB源文件,可以用Altium Designer系列軟件打開,甚至可以直接打板批量生產(chǎn);
本文詳細(xì)描述了設(shè)計(jì)方案,工程代碼編譯通過后上板調(diào)試驗(yàn)證,可直接項(xiàng)目移植,適用于在校學(xué)生做畢業(yè)設(shè)計(jì)、研究生項(xiàng)目開發(fā),也適用于在職工程師做項(xiàng)目開發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字成像和圖像傳輸領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請(qǐng)耐心看到最后;
關(guān)于MIPI協(xié)議,請(qǐng)自行搜索,csdn就有很多大佬講得很詳細(xì),我就不多寫這塊了;
2、Lattice FPGA解碼MIPI的性能及其優(yōu)越性
一個(gè)字:牛逼,表現(xiàn)如下:
1:Lattice FPGA解碼MIPI,該FPGA自帶MIPI解碼源語,直接調(diào)用即可完成MIPI解碼,這也是Lattice FPGA在做MIPI視頻編解碼方面的獨(dú)特優(yōu)勢(shì),且該FPGA較為小眾,使用者和開發(fā)者都很少,提供工程源碼的更少;
2:移植性還可以,可在Lattice 系列FPGA之間移植;
3:實(shí)用性達(dá)到天花板,可以做批量的USB攝像頭,且我這里不僅提供源碼還提供原理圖和PCB;
4:支持高達(dá)4K分辨率的MIPI視頻解碼;
3、我這里已有的 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ó)產(chǎn)FPGA的MIPI解碼方案,畢竟目前國(guó)產(chǎn)化方案才是未來主流,后續(xù)也將推出更多MIPI編碼的DSI方案,努力將FPGA的MIPI編解碼方案做成白菜價(jià)。。。
基于此,我專門建了一個(gè)MIPI編解碼的專欄,并將MIPI編解碼的博客都放到了專欄里整理,對(duì)FPGA編解碼MIPI有項(xiàng)目需求或?qū)W習(xí)興趣的兄弟可以去我的專欄看看,專欄地址如下:
點(diǎn)擊直接前往專欄
4、詳細(xì)設(shè)計(jì)方案
工程設(shè)計(jì)架構(gòu)如下:
IMX219攝像頭及其轉(zhuǎn)接板
采集IMX219攝像頭的1080P 4Line MIPI視頻,IMX219攝像頭是專門的攝像頭轉(zhuǎn)接板,提供該轉(zhuǎn)接板的原理圖和PCB源文件,可以用Altium Designer系列軟件打開,甚至可以直接打板批量生產(chǎn);IMX219攝像頭轉(zhuǎn)接板插在Lattice FPGA開發(fā)板之上;如下:
下面是IMX219的實(shí)物圖和PCB截圖;
下面是用高速示波器抓取的IMX219輸出的MIPI 1920x1080 @30FPS Start of a frame波形,可以看到,這里的IMX219硬件設(shè)計(jì)師沒有問題的,可以借鑒;
D-PHY
Lattice FPGA自帶MIPI解碼源語,直接調(diào)用即可完成MIPI解碼,這也是Lattice FPGA在做MIPI視頻編解碼方面的獨(dú)特優(yōu)勢(shì),這個(gè)模塊幾乎是直接調(diào)用MIPI解碼源語,輸入是差分的MIPI視頻數(shù)據(jù),輸出為并行視頻數(shù)據(jù),由于是源語,所以不需要太多解釋,你只需要知道怎么用就行,不需要知道為什么,此模塊的頂層接口如下:
mipi_rx_ddr (alignwd, buf_clk_lp0i, buf_clk_lp0o, buf_clk_lp0t,
buf_clk_lp1i, buf_clk_lp1o, buf_clk_lp1t, clk, clk_lp0, clk_lp1,
clk_s, init, reset, rx_ready, sclk, oclk, buf_data_lp0i, buf_data_lp0o,
buf_data_lp0t, buf_data_lp1i, buf_data_lp1o, buf_data_lp1t, data_lp0,
data_lp1, datain, q)/* synthesis NGD_DRC_MASK=1 */;
input wire alignwd;
input wire buf_clk_lp0o;
input wire buf_clk_lp0t;
input wire buf_clk_lp1o;
input wire buf_clk_lp1t;
input wire clk;
input wire clk_s;
input wire init;
input wire reset;
input wire [3:0] buf_data_lp0o;
input wire [3:0] buf_data_lp0t;
input wire [3:0] buf_data_lp1o;
input wire [3:0] buf_data_lp1t;
input wire [3:0] datain;
output wire buf_clk_lp0i;
output wire buf_clk_lp1i;
output wire rx_ready;
output wire sclk;
output wire oclk;
output wire [3:0] buf_data_lp0i;
output wire [3:0] buf_data_lp1i;
output wire [31:0] q;
inout wire clk_lp0;
inout wire clk_lp1;
inout wire [3:0] data_lp0;
inout wire [3:0] data_lp1;
數(shù)據(jù)對(duì)齊
數(shù)據(jù)對(duì)齊包括Byte對(duì)齊和Line對(duì)齊;
Byte對(duì)齊模塊接收到來自D-PHY模塊的原始未對(duì)齊位輸出對(duì)齊的字節(jié),MIPI通道上的字節(jié)沒有任何定義的字節(jié)邊界,因此此模塊在線路上查找始終恒定的第一個(gè)字節(jié)0xB8,一旦找到0xB8就確定了字節(jié)邊界偏移,將輸出有效設(shè)置為determined,并在數(shù)據(jù)通道處于MIPI LP狀態(tài)時(shí)開始輸出正確的字節(jié)保持重置;
Line對(duì)齊模塊從mipi接收多Line的Byte對(duì)齊數(shù)據(jù),mipi字節(jié)時(shí)鐘在多Line mipi總線中輸出Line對(duì)齊的數(shù)據(jù),不同Line上的數(shù)據(jù)可能以不同的偏移量出現(xiàn),因此該模塊將等待,直到所有Line的有效輸出開始輸出Line對(duì)齊數(shù)據(jù),因此所有Line的字節(jié)以相同的時(shí)間刻度輸出;這樣MIPI視頻才完成了真正的數(shù)據(jù)對(duì)齊;
MIPI CSI2
該模塊的作用很簡(jiǎn)單,就是解析丟掉MIPI協(xié)議中的控制字符,提取出有效的視頻數(shù)據(jù),部分源碼截圖如下:
視頻數(shù)據(jù)格式轉(zhuǎn)換
視頻數(shù)據(jù)格式轉(zhuǎn)換的順序是:RAW10轉(zhuǎn)Bayer,Bayer轉(zhuǎn)RGB888,RGB888轉(zhuǎn)YUV422;如果要做顯示器輸出的朋友,只需要做到Bayer轉(zhuǎn)RGB888這一步即可輸出了,這里做到了RGB888轉(zhuǎn)YUV422的目的是送Cypress FX3 USB3.0接口輸出;每一個(gè)模塊的頂部都有詳細(xì)的注釋,一看就懂他的作用,以RGB888轉(zhuǎn)YUV422模塊為例截圖如下:
視頻輸出矯正
該模塊的作用是做視頻數(shù)據(jù)的位寬轉(zhuǎn)換,將64bit 4個(gè)像素時(shí)鐘的yuv422數(shù)據(jù)轉(zhuǎn)換為32bit 2個(gè)像素時(shí)鐘的yuv422數(shù)據(jù),這樣做的目的也是送Cypress FX3 USB3.0接口輸出;
5、Lattice Diamond工程詳解
Lattice Diamond是Lattice FPGA的開發(fā)工具,使用起來很簡(jiǎn)單,但國(guó)內(nèi)用的很少;
開發(fā)板FPGA型號(hào):Lattice的LCMXO3LF-6900C-5BG256C;
開發(fā)工具:Lattice Diamond3.12;
輸入:IMX219,4Line 1080P分辨率;
輸出:Cypress FX3 USB3.0接口輸出;
工程源碼架構(gòu)如下:
工程已經(jīng)編譯完成,如下:
綜合原理圖部分截圖如下:
6、上板調(diào)試驗(yàn)證
硬件需求:
Lattice FPGA開發(fā)板一塊;
IMX219攝像頭轉(zhuǎn)接板一塊;
Cypress FX3 USB3.0轉(zhuǎn)接板一塊;
連接,IMX219攝像頭轉(zhuǎn)接板作為輸入插在Lattice FPGA開發(fā)板上;Cypress FX3 USB3.0轉(zhuǎn)接板作為輸出插在Lattice FPGA開發(fā)板上;如下圖:
用Cypress官方的USB3.0攝像頭上位機(jī)接收并顯示視頻;如下:文章來源:http://www.zghlxwxcb.cn/news/detail-783520.html
7、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式1:私,或者文章末尾的V名片。
資料獲取方式2:文章末尾的公眾號(hào),回復(fù) 002006
網(wǎng)盤資料如下:
資料清單如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-783520.html
到了這里,關(guān)于Lattice FPGA解碼MIPI視頻,IMX219攝像頭4Line 1080P采集USB3.0輸出,提供工程源碼硬件原理圖PCB和技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!