国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持

這篇具有很好參考價值的文章主要介紹了FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、前言

沒玩過圖像拼接都不好意思說自己玩兒過FPGA,這是CSDN某大佬說過的一句話,鄙人深信不疑。。。
圖像拼接在實際項目中應(yīng)用廣泛,特別是在醫(yī)療和軍工行業(yè),目前市面上的圖像拼接方案主要有Xilinx官方推出的Video Mixer方案和自己手撕代碼的自定義方案;Xilinx官方推出的Video Mixer方案直接調(diào)用IP,通過SDK配置即可實現(xiàn),但他的使能難度較高,且對FPGA資源要求也很高,不太適合小規(guī)模FPGA,在zynq和K7以上平臺倒是很使用,如果對Video Mixer方案感興趣,可以參考我之前的博客,博客地址:
點擊直接前往

本文使用Xilinx的Kintex7 FPGA純verilog代碼實現(xiàn)8路視頻圖像拼接,視頻源有兩種,分別對應(yīng)開發(fā)者手里有沒有攝像頭的情況,一種是使用廉價的OV5640攝像頭模組;如果你得手里沒有攝像頭,或者你得開發(fā)板沒有攝像頭接口,則可使用代碼內(nèi)部生成的靜態(tài)彩條模擬攝像頭視頻;視頻源的選擇通過代碼頂層的`define宏定義進(jìn)行,默認(rèn)使用ov5640作為視頻源;由于我的手里只有一個攝像頭,所以fpga采集攝像頭數(shù)據(jù)后,直接復(fù)制多份,用來模擬多路攝像頭輸入;使用我常用的FDMA方案實現(xiàn)圖像的三幀緩存,不同的視頻緩存在DDR3中不同的地址,讀視頻時一次性將視頻緩存區(qū)域讀完,從而實現(xiàn)視頻拼接的功能;輸出視頻分辨率為1920x1080,實現(xiàn)8路視頻拼接,所以每路視頻的分辨率就為480x540,這樣剛好8路視頻占滿輸出屏幕,看起來美觀一些;讀出視頻后,用純verilog顯示的HDMI輸出模塊送顯示器顯示即可;

本博客詳細(xì)描述了FPGA純verilog實現(xiàn)視頻拼接的設(shè)計方案,工程代碼可綜合編譯上板調(diào)試,可直接項目移植,適用于在校學(xué)生、研究生項目開發(fā),也適用于在職工程師做學(xué)習(xí)提升,可應(yīng)用于醫(yī)療、軍工等行業(yè)的高速接口或圖像處理領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請耐心看到最后;

版本更新說明

此版本為第2版,根據(jù)讀者的建議,對第1版工程做了如下改進(jìn)和更新:
1:增加了輸入視頻靜態(tài)彩條的選擇,有的讀者說他手里沒有OV5640攝像頭或者攝像頭原理圖和我的不一致,導(dǎo)致在移植過程中困難很大,基于此,增加了靜態(tài)彩條,它由FPGA內(nèi)部產(chǎn)生,不需要外接攝像頭就可以使用,使用方法在后文有說明;
2:優(yōu)化了FDMA,之前的FDMA內(nèi)AXI4的數(shù)據(jù)讀寫突發(fā)長度為256,導(dǎo)致在低端FPGA上帶寬不夠,從而圖像質(zhì)量不佳,基于此,將FDMA內(nèi)AXI4的數(shù)據(jù)讀寫突發(fā)長度改為128;
3:優(yōu)化了HDMI輸出模塊,之前用的自定義IP,有讀者說IP無法更新,雖能正常使用,但看源碼不方便,基于此,將HDMI輸出模塊改為純verilog實現(xiàn)的,直接了當(dāng);

免責(zé)聲明

本工程及其源碼即有自己寫的一部分,也有網(wǎng)絡(luò)公開渠道獲取的一部分(包括CSDN、Xilinx官網(wǎng)、Altera官網(wǎng)等等),若大佬們覺得有所冒犯,請私信批評教育;基于此,本工程及其源碼僅限于讀者或粉絲個人學(xué)習(xí)和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導(dǎo)致的法律問題,與本博客及博主無關(guān),請謹(jǐn)慎使用。。。

2、我已有的FPGA視頻拼接疊加融合方案

我的主頁目前有FPGA視頻拼接疊加融合專欄,改專欄收錄了我目前手里已有的FPGA視頻拼接疊加融合方案,從實現(xiàn)方式分類有基于HSL實現(xiàn)的視頻拼接、基于純verilog代碼實現(xiàn)的視頻拼接;從應(yīng)用上分為單路、2路、3路、4路、8路、16路視頻拼接;視頻縮放+拼接;視頻融合疊加;從輸入視頻分類可分為OV5640攝像頭視頻拼接、SDI視頻拼接、CameraLink視頻拼接等等;以下是專欄地址:
點擊直接前往

3、設(shè)計思路框架

本博客提供1套vivado工程源碼,工程設(shè)計框圖如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理

視頻源選擇

視頻源有兩種,分別對應(yīng)開發(fā)者手里有沒有攝像頭的情況,如果你的手里有攝像頭,或者你的開發(fā)板有攝像頭接口,則使用攝像頭作為視頻輸入源,我這里用到的是廉價的OV5640攝像頭模組;如果你得手里沒有攝像頭,或者你得開發(fā)板沒有攝像頭接口,則可使用代碼內(nèi)部生成的靜態(tài)彩條模擬攝像頭視頻,動態(tài)彩條是移動的畫面,完全可以模擬視頻;默認(rèn)使用ov5640作為視頻源;視頻源的選擇通過代碼頂層的`define宏定義進(jìn)行;如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
選擇邏輯代碼部分如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
選擇邏輯如下:
當(dāng)(注釋) define USE_SENSOR時,輸入源視頻是靜態(tài)彩條;
當(dāng)(不注釋) define USE_SENSOR時,輸入源視頻是ov5640攝像頭;

OV5640攝像頭配置及采集

OV5640攝像頭需要i2c配置才能使用,需要將DVP接口的視頻數(shù)據(jù)采集為RGB565或者RGB888格式的視頻數(shù)據(jù),這兩部分均用verilog代碼模塊實現(xiàn),代碼位置如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
其中攝像頭配置為分辨率480x540,如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
攝像頭采集模塊支持RGB565和RGB888格式的視頻輸出,可由參數(shù)配置,如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
RGB_TYPE=0輸出本RGB565格式;
RGB_TYPE=1輸出本RGB888格式;
設(shè)計選擇RGB565格式;

靜態(tài)彩條

靜態(tài)彩條可配置為不同分辨率的視頻,視頻的邊框?qū)挾?,動態(tài)移動方塊的大小,移動速度等都可以參數(shù)化配置,我這里配置為辨率480x540,動態(tài)彩條模塊代碼位置和頂層接口和例化如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理

視頻拼接算法

視頻拼接方案如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
輸出屏幕分辨率為1920X1080;
輸入攝像頭分辨率為480X540;
8路輸入剛好可以占滿整個屏幕;
多路視頻的拼接顯示原理如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
以把 2 個攝像頭 CAM0 和 CAM1 輸出到同一個顯示器上為列,為了把 2 個圖像顯示到 1 個顯示器,首先得搞清楚以下關(guān)系:
hsize:每 1 行圖像實際在內(nèi)存中占用的有效空間,以 32bit 表示一個像素的時候占用內(nèi)存大小為 hsize4;
hstride:用于設(shè)置每行圖像第一個像素的地址,以 32bit 表示一個像素的時候 v_cnt
hstride4;
vsize:有效的行;
因此很容易得出 cam0 的每行第一個像素的地址也是 v_cnt
hstride4;
同理如果我們需要把 cam1 在 hsize 和 vsize 空間的任何位置顯示,我們只要關(guān)心 cam1 每一行圖像第一個像素的地址,可以用以下公式 v_cnt
hstride*4+offset;
uifdma_dbuf 支持 stride 參數(shù)設(shè)置,stride 參數(shù)可以設(shè)置輸入數(shù)據(jù) X(hsize)方向每一行數(shù)據(jù)的第一個像素到下一個起始像素的間隔地址,利用 stride 參數(shù)可以非常方便地擺放輸入視頻到內(nèi)存中的排列方式。
關(guān)于uifdma_dbuf,可以參考我之前寫的文章點擊查看:FDMA實現(xiàn)視頻數(shù)據(jù)三幀緩存
根據(jù)以上鋪墊,每路攝像頭緩存的基地址如下:
CAM0:ADDR_BASE=0x80000000;
CAM1:ADDR_BASE=0x80000000+(1920-480X1)X4;
CAM2:ADDR_BASE=0x80000000+(1920-480X2)X4;
CAM3:ADDR_BASE=0x80000000+(1920-480X3)X4;
CAM4:ADDR_BASE=0x80000000+(1080-540)X1920X4;
CAM5:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-480X1)X4;
CAM6:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-480X2)X4;
CAM7:ADDR_BASE=0x80000000+(1080-540)X1920X4+(1920-480X3)X4;
地址設(shè)置完畢后基本就完事兒了;

圖像緩存

經(jīng)??次也┛偷睦戏蹜?yīng)該都知道,我做圖像緩存的套路是FDMA,他的作用是將圖像送入DDR中做3幀緩存再讀出顯示,目的是匹配輸入輸出的時鐘差和提高輸出視頻質(zhì)量,關(guān)于FDMA,請參考我之前的博客,博客地址:點擊直接前往
這里8路視頻拼接時,調(diào)用8路FDMA進(jìn)行緩存,具體講就是每一路視頻調(diào)用1路FDMA;
調(diào)用8路FDMA,其中7路配置為寫模式,因為這7路視頻在這里只需要寫入DDR3,讀出是由另一個FDMA完成,配置如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
另外1路FDMA配置為讀寫模式,因為8路視頻需要同時一并讀出,配置如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
視頻拼接的關(guān)鍵點在于8路視頻在DDR3中緩存地址的不同,8路FDMA的寫地址以此為:
第1路視頻緩存寫基地址:0x80000000;
第2路視頻緩存寫基地址:0x80000780;
第3路視頻緩存寫基地址:0x80000f00;
第4路視頻緩存寫基地址:0x80001680;
第5路視頻緩存寫基地址:0x803f4800;
第6路視頻緩存寫基地址:0x803f4f80;
第7路視頻緩存寫基地址:0x803f5700;
第8路視頻緩存寫基地址:0x803f5e80;
視頻緩存讀基地址:0x80000000;

視頻輸出

視頻從FDMA讀出后,經(jīng)過VGA時序模塊和HDMI發(fā)送模塊后輸出顯示器,代碼位置如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
VGA時序配置為1920X1080,HDMI發(fā)送模塊采用verilog代碼手寫,可以用于FPGA的HDMI發(fā)送應(yīng)用,關(guān)于這個模塊,請參考我之前的博客,博客地址:點擊直接前往

4、vivado工程詳解

開發(fā)板FPGA型號:Xilinx–Kintex7–xc7k325tffg676-2;
開發(fā)環(huán)境:Vivado2019.1;
輸入:OV5640攝像頭或動態(tài)彩條,分辨率480x540;
輸出:HDMI,1080P分辨率下的8塊480x540有效區(qū)域顯示;
工程作用:FPGA純verilog實現(xiàn)8路視頻拼接顯示;
工程BD如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
因為這里用了8路FDMA,7路配置為只寫模式,另一路配置為讀寫模式;
工程代碼架構(gòu)如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
工程的資源消耗和功耗如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理

5、工程移植說明

vivado版本不一致處理

1:如果你的vivado版本與本工程vivado版本一致,則直接打開工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開工程后,點擊文件–>另存為;但此方法并不保險,最保險的方法是將你的vivado版本升級到本工程vivado的版本或者更高版本;
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
3:如果你的vivado版本高于本工程vivado版本,解決如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
打開工程后會發(fā)現(xiàn)IP都被鎖住了,如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
此時需要升級IP,操作如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理

FPGA型號不一致處理

如果你的FPGA型號與我的不一致,則需要更改FPGA型號,操作如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理
更改FPGA型號后還需要升級IP,升級IP的方法前面已經(jīng)講述了;

其他注意事項

1:由于每個板子的DDR不一定完全一樣,所以MIG IP需要根據(jù)你自己的原理圖進(jìn)行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據(jù)你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;

6、上板調(diào)試驗證并演示

靜態(tài)演示

8路ov5640攝像頭480x540拼接輸出效果如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理

動態(tài)演示

動態(tài)視頻演示如下:

FPGA-8路視頻拼接

7、福利:工程源碼獲取

福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下:
FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持,菜鳥FPGA圖像處理專題,FPGA視頻拼接疊加融合,fpga開發(fā),verilog,視頻拼接,圖像處理文章來源地址http://www.zghlxwxcb.cn/news/detail-718821.html

到了這里,關(guān)于FPGA純verilog實現(xiàn)8路視頻拼接顯示,提供工程源碼和技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包