Zynq-7000系列FPGA使用 Video Processing Subsystem 實現圖像縮放,提供工程源碼和技術支持

目錄

  • 1、前言
    • 免責聲明
  • 2、相關方案推薦
    • FPGA圖像處理方案
    • FPGA圖像縮放方案
    • 自己寫的HLS圖像縮放方案
  • 3、設計思路詳解
    • Video Processing Subsystem 介紹
  • 4、工程代碼詳解
    • PL 端 FPGA 邏輯設計
    • PS 端 SDK 軟件設計
  • 5、工程移植說明
    • vivado版本不一致處理
    • FPGA型號不一致處理
    • 其他注意事項
  • 6、上板調試驗證并演示
    • 準備工作
    • 輸出靜態演示
  • 7、福利:工程源碼獲取

Zynq-7000系列FPGA使用 Video Processing Subsystem 實現圖像縮放,提供工程源碼和技術支持

1、前言

沒玩過圖像縮放都不好意思說自己玩兒過FPGA,這是CSDN某大佬說過的一句話,鄙人深信不疑。。。
目前市面上主流的FPGA圖像縮放方案如下:
1:Xilinx的HLS方案,該方案簡單,易于實現,但只能用于Xilinx自家的FPGA;
2:非純Verilog方案,大部分代碼使用Verilog實現,但中間的fifo或ram等使用了IP,導致移植性變差,難以在Xilinx、Altera和國產FPGA之間自由移植;
3:純Verilog方案;

本文使用Xilinx Zynq7000系列FPGA Zynq7020實現Video Processing Subsystem圖像縮放,輸入視頻源采用OV5640攝像頭模組;FPGA采集OV5640攝像頭視頻DVP轉RGB888,調用Zynq軟核的片內i2c控制器將OV5640配置為1280x720@30Hz分辨率;然后調用Xilinx官方的Video In to AXI4-Stream IP核將RGB視頻流轉換為AXI4-Stream視頻流;然后調用Xilinx官方的Video Processing Subsystem IP核將輸入視頻進行任意尺寸圖像縮放操作,該操作通過Zynq軟核SDK軟件配置,其本質為通過AXI_Lite 做寄存器配置;然后調用Xilinx官方的VDMA IP將視頻做PS側DDR3的視頻緩存操作,調用Zynq將VDMA配置為三幀緩存,其本質為通過AXI_Lite 做寄存器配置;然后調用Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP將AXI4-Stream視頻流轉換為RGB視頻流;然后添加自定義的HDMI發送IP將RGB視頻轉換為TMDS的差分視頻送顯示器顯示;提供一套vivado2019.1版本的工程源碼和技術支持;

本博客詳細描述了Zynq-7000系列FPGA使用 Video Processing Subsystem 實現圖像縮放的設計方案,工程代碼可綜合編譯上板調試,可直接項目移植,適用于在校學生、研究生項目開發,也適用于在職工程師做學習提升,可應用于醫療、軍工等行業的高速接口或圖像處理領域;整個工程調用Zynq軟核做IP的配置,Zynq的配置在SDK里以C語言軟件代碼的形式運行,所以整個工程包括FPGA邏輯設計和SDK軟件設計兩部分,需要具備FPGA和嵌入式C語言的綜合能力,不適合初學者或者小白;

提供完整的、跑通的工程源碼和技術支持;
工程源碼和技術支持的獲取方式放在了文章末尾,請耐心看到最后;

免責聲明

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

2、相關方案推薦

FPGA圖像處理方案

我的主頁目前有FPGA圖像處理專欄,改專欄收錄了我目前手里已有的FPGA圖像處理方案,包括圖像縮放、圖像識別、圖像拼接、圖像融合、圖像去霧、圖像疊加、圖像旋轉、圖像增強、圖像字符疊加等等;以下是專欄地址:
點擊直接前往

FPGA圖像縮放方案

我的主頁目前有FPGA圖像縮放專欄,改專欄收錄了我目前手里已有的FPGA圖像縮放方案,從實現方式分類有基于HSL實現的圖像縮放、基于純verilog代碼實現的圖像縮放;從應用上分為單路視頻圖像縮放、多路視頻圖像縮放、多路視頻圖像縮放拼接;從輸入視頻分類可分為OV5640攝像頭視頻縮放、SDI視頻縮放、MIPI視頻縮放等等;以下是專欄地址:
點擊直接前往

自己寫的HLS圖像縮放方案

之前寫過一篇自己寫的HLS圖像縮放的博客,該方案與官方的Video Processing Subsystem區別在于手寫的看得到;以下是博客地址:
點擊直接前往

3、設計思路詳解

本文使用Xilinx Zynq7000系列FPGA Zynq7020實現Video Processing Subsystem圖像縮放,輸入視頻源采用OV5640攝像頭模組;FPGA采集OV5640攝像頭視頻DVP轉RGB888,調用Zynq軟核的片內i2c控制器將OV5640配置為1280x720@30Hz分辨率;然后調用Xilinx官方的Video In to AXI4-Stream IP核將RGB視頻流轉換為AXI4-Stream視頻流;然后調用Xilinx官方的Video Processing Subsystem IP核將輸入視頻進行任意尺寸圖像縮放操作,該操作通過Zynq軟核SDK軟件配置,其本質為通過AXI_Lite 做寄存器配置;然后調用Xilinx官方的VDMA IP將視頻做PS側DDR3的視頻緩存操作,調用Zynq將VDMA配置為三幀緩存,其本質為通過AXI_Lite 做寄存器配置;然后調用Xilinx官方的Video Timing Controller IP和AXI4-Stream to Video Out IP將AXI4-Stream視頻流轉換為RGB視頻流;然后添加自定義的HDMI發送IP將RGB視頻轉換為TMDS的差分視頻送顯示器顯示;提供一套vivado2019.1版本的工程源碼和技術支持;
工程源碼設計框圖如下:
在這里插入圖片描述
框圖解釋:箭頭表示數據流向,箭頭內文字表示數據格式,箭頭外數字表示數據柳巷的步驟;

Video Processing Subsystem 介紹

由于工程所用到的IP都是常用IP,所以這里重點介紹一下Video Processing Subsystem;
Video Processing Subsystem有縮放、去隔行、顏色空間轉換等功能,這里僅使用圖像縮放功能;其特點如下:
適用于Xilinx所有系列的FPGA器件;
支持最大分辨率:8K,即可以處理高達8K的視頻;
輸入視頻格式:AXI4-Stream;
輸出視頻格式:AXI4-Stream;
需要SDK軟件配置,其本質為通過AXI_Lite 做寄存器配置;
提供自定義的配置API,通過調用該庫函數即可輕松使用,具體參考SDK代碼;
模塊占用的FPGA邏輯資源更小,相比于自己寫的HLS圖像縮放而言,官方的Video Processing Subsystem資源占用大約減小30%左右,且更高效:
Video Processing Subsystem邏輯資源如下,請謹慎評估你的FPGA資源情況;
在這里插入圖片描述
Video Processing Subsystem IP配置如下:這里配置為雙線性插值圖像縮放算法;
在這里插入圖片描述
在這里插入圖片描述

4、工程代碼詳解

PL 端 FPGA 邏輯設計

開發板FPGA型號:Xilinx–Zynq7020–xc7z020clg400-2;
開發環境:Vivado2019.1;
輸入:OV5640攝像頭,分辨率1280x720p;
輸出:HDMI,1080P分辨率下的有效區域顯示;
工程作用:Zynq-7000系列FPGA使用Video Processing Subsystem實現圖像縮放, HDMI 輸出;
工程BD如下:
在這里插入圖片描述
工程代碼架構如下:
在這里插入圖片描述
工程的資源消耗和功耗如下:
在這里插入圖片描述

PS 端 SDK 軟件設計

PS 端 SDK 軟件工程代碼架構如下:
在這里插入圖片描述
主函數通過如下的五個宏定義設計了五種不同的圖像縮放方案:
ov5640輸入分辨率1280x720,HDMI輸出分辨率1280x720;
ov5640輸入分辨率1280x720,HDMI輸出分辨率640x480;
ov5640輸入分辨率1280x720,HDMI輸出分辨率300x300;
ov5640輸入分辨率1280x720,HDMI輸出分辨率1600x800;
ov5640輸入分辨率1280x720,HDMI輸出分辨率1920x1080;
在這里插入圖片描述
主函數進行相應的圖像縮放操作,并打印相關信息,代碼如下:
在這里插入圖片描述

5、工程移植說明

vivado版本不一致處理

1:如果你的vivado版本與本工程vivado版本一致,則直接打開工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開工程后,點擊文件–>另存為;但此方法并不保險,最保險的方法是將你的vivado版本升級到本工程vivado的版本或者更高版本;
在這里插入圖片描述
3:如果你的vivado版本高于本工程vivado版本,解決如下:
在這里插入圖片描述
打開工程后會發現IP都被鎖住了,如下:
在這里插入圖片描述
此時需要升級IP,操作如下:
在這里插入圖片描述
在這里插入圖片描述

FPGA型號不一致處理

如果你的FPGA型號與我的不一致,則需要更改FPGA型號,操作如下:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
更改FPGA型號后還需要升級IP,升級IP的方法前面已經講述了;

其他注意事項

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

6、上板調試驗證并演示

準備工作

Zynq7000系列開發板;
OV5640攝像頭;
HDMI顯示器或者LCD顯示屏,我用到的LCD顯示屏為4.3寸分辨率800x480;

輸出靜態演示

ov5640輸入分辨率1280x720,HDMI輸出分辨率1280x720;
HDMI顯示輸出和串口打印分別如下:
在這里插入圖片描述
在這里插入圖片描述
ov5640輸入分辨率1280x720,HDMI輸出分辨率640x480;
HDMI顯示輸出和串口打印分別如下:
在這里插入圖片描述
在這里插入圖片描述
ov5640輸入分辨率1280x720,HDMI輸出分辨率300x300;
HDMI顯示輸出和串口打印分別如下:
在這里插入圖片描述
在這里插入圖片描述
ov5640輸入分辨率1280x720,HDMI輸出分辨率1600x800;
HDMI顯示輸出和串口打印分別如下:
在這里插入圖片描述
在這里插入圖片描述
ov5640輸入分辨率1280x720,HDMI輸出分辨率1920x1080;
HDMI顯示輸出和串口打印分別如下:
在這里插入圖片描述
在這里插入圖片描述

7、福利:工程源碼獲取

福利:工程代碼的獲取
代碼太大,無法郵箱發送,以某度網盤鏈接方式發送,
資料獲取方式:私,或者文章末尾的V名片。
網盤資料如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給sprite上增加刷光動效

游戲引擎 —— cocos creator 3.52 此動效給動態修改尺寸的圖片增加一層刷光的效果,直接貼代碼 CCEffect %{techniques:- passes:- vert: sprite-vs:vertfrag: sprite-fs:fragdepthStencilState:depthTest: falsedepthWrite: falseblendState:targets:- blend: tr…

Charles 網絡抓包工具詳解與實戰指南

文章目錄 導讀軟件版本Charles基本原理核心功能下載及安裝界面介紹網絡包展示 常用場景介紹PC 端網絡抓包移動端網絡抓包PC 端配置手機端配置 開啟 SSL 代理PC 端和移動端 CA 證書安裝Charles 直接安裝Charles 下載 CA 文件手動安裝 常用操作請求重發請求改寫、動態改寫斷點&am…

Qt+SQLITE數據庫設計的會員卡管理系統

一、前言 本項目演示在QT中使用SQLITE數據庫存儲數據管理的過程。當前以會員卡管理系統為例,寫了一個界面,完成會員卡的注冊,添加,充值,查詢,注銷,導出顧客信息EXECL表格 等功能的實現。 演示 SQLITE數據庫的建表、增、刪、改、查等語句功能實現。 SQLite是一款輕型的…

計算機網絡——物理層相關習題(計算機專業考研全國統考歷年真題)

目錄 2012-34 原題 答案 解析 2018-34 原題 答案 解析 2009/2011-34 原題 答案 解析 2016-34 原題 答案 解析 2014-35/2017-34 原題 答案 解析 2013-34 原題 答案 解析 2015-34 原題 答案 解析 物理層的協議眾多,這是因為物理層…

為啥 有了錘子,看啥都是釘子?

壞處:有了錘子,看啥都是釘子,有何壞處? 事倍功半,甚至適得其反。比如具有高并發設計經驗的人,在初創系統初期,就設計高并發架構,其復雜度大概率無法支持試點業務快速落地&#xff0…

【DevOps】Git 圖文詳解(九):工作中的 Git 實踐

本系列包含: Git 圖文詳解(一):簡介及基礎概念Git 圖文詳解(二):Git 安裝及配置Git 圖文詳解(三):常用的 Git GUIGit 圖文詳解(四)&a…

【SpringMVC】 三層架構

一.lombok工具包 中央倉庫查找這個工具包:https://mvnrepository.com/ 給類添加Data注解就可以獲取gettter和setter方法 , 這樣我們就不必寫getter 和 setter 方法. 也可以給成員屬性添加單獨的getter 和 setter , 針對某個成員屬性單獨添加setter或setter方法. 二.如果使用spr…

ORACLE手動建庫

1.確定oracle的實例名,以及數據庫名 實例名稱: ORACLE_SIDtest 數據庫名稱: test 2.手工創建如下目錄: /oracle/admin/test/adump --對應的是spfile里參數audit_file_dest …

一起學docker系列之七docker容器卷技術

目錄 1 為什么使用容器數據卷?2 數據卷的特點和優勢3 使用數據卷的方法3.1 創建容器并掛載數據卷3.2 容器間數據卷的共享與繼承 4 數據卷的權限設置5 注意事項5.1 解決權限問題5.2 路徑自動創建 結語 對于容器化應用程序的數據管理和持久化,Docker 數據卷…

鏈表的回文結構

題目描述 題目鏈接:鏈表的回文結構_牛客題霸_牛客網 (nowcoder.com) 題目分析 我們的思路是: 找到中間結點逆置后半段比對 我們可以簡單畫個圖來表示一下: ‘ 奇數和偶數都是可以的 找中間結點 我們可以用快慢指針來找中:l…

如何實現圖片輪播(python版)

為了實現圖片自動輪播,我們可以使用Python編寫一個簡單的腳本。首先,我們需要安裝一個名為Pillow的庫來處理圖片。在命令行中輸入以下命令進行安裝: pip install Pillow 接下來,我們編寫一個名為image_slideshow.py的腳本&#x…

leetcode.884——字符串分割(substr),哈希(unordered_map)的練習

884. 兩句話中的不常見單詞 句子 是一串由空格分隔的單詞。每個 單詞 僅由小寫字母組成。 如果某個單詞在其中一個句子中恰好出現一次,在另一個句子中卻 沒有出現 ,那么這個單詞就是 不常見的 。 給你兩個 句子 s1 和 s2 ,返回所有 不常用…

成為AI產品經理——模型構建流程(下)

目錄 1.模型訓練 2.模型驗證 3.模型融合 4.模型部署 上節課我們講了模型設計、特征工程,這節課我們來講模型構建剩下的三個部分:模型訓練、模型驗證和模型融合。 1.模型訓練 模型訓練就是要不斷地訓練、驗證、調優直至讓模型達到最優。 那么怎么達…

Python“牽手”京東商品詳情接口運營場景,京東商品詳情接口調用指南

京東商品詳情接口是一種程序化的接口,通過這個接口,商家或開發者可以使用自己的編程技能,獲取京東平臺上的商品詳細信息。這個接口允許商家根據自身的需求,獲取商品的標題、價格、促銷價、優惠券、庫存、銷量、詳情圖片、SKU屬性、…

YOLOv5分割訓練,從數據集標注到訓練一條龍解決

最近進行了分割標注,感覺非常好玩,也遇到了很多坑,來跟大家分享一下,老樣子有問題評論區留言,我會的就會回答你。 第一步:準備數據集 1、安裝標注軟件labelme如果要在計算機視覺領域深入的同學&#xff0…

TC397 EB MCAL開發從0開始系列 之 [15.2] Fee配置 - QsBlock demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹IIC通信簡單…

致遠M3 反序列化RCE漏洞復現(XVE-2023-24878)

0x01 產品簡介 M3移動辦公是致遠互聯打造的一站式智能工作平臺,提供全方位的企業移動業務管理,致力于構建以人為中心的智能化移動應用場景,促進人員工作積極性和創造力,提升企業效率和效能,是為企業量身定制的移動智慧…

15.Python 異常處理和程序調試

1. 異常處理 異常就是在程序執行過程中發生的超出預期的事件。一般情況下,當程序無法正常執行時,都會拋出異常。 在開發過程中,由于疏忽或考慮不周,出現的設計錯誤。因此,在后期程序調試中應該根據錯誤信息&#xff…

系統高可用設計-有感

文章目錄 系統設計原則是 冗余 取舍系統運維的原則是規避線上異常 高可用設計通常從 系統設計和 系統運維 2 個層面來著手突破。 系統設計原則是 冗余 取舍 冗余:指集群部署 故障轉移取舍:常見手段包括:超時控制、降級、限流 系統運維…