16.1 - VDMA視頻轉發實驗之TPG

文章目錄

  • 1 實驗任務
  • 2 系統框圖
  • 3 硬件設計
    • 3.1 IP核配置
    • 3.2 注意事項
  • 4 軟件設計
    • 4.1 注意事項
    • 4.2 工程源碼
      • 4.2.1 main.c文件

1 實驗任務

基于14.1,使用Xilinx TPG(Test Pattern Generator) IP提供視頻源,將視頻數據通過VDMA寫入PS側內存,然后再通過VDMA將視頻數據從PS側內存讀出來,最后通過HDMI接口發送出去,即實現視頻轉發的功能。

2 系統框圖

基于14.1,添加TPG IP核作為視頻源,連接到VDMA的寫通道,如下圖所示:
在這里插入圖片描述

3 硬件設計

3.1 IP核配置

  1. 配置VDMA IP核
    • (1)Basic頁面
      • 1)Frame Buffers:選擇默認值3,即緩存3幀圖像數據
      • 2)Enable Write Channel:勾選,使能寫通道
      • 3)Write Burst Size:選擇256,最大化傳輸效率
      • 4)Line Buffer Depth:選擇2048,圖像分辨率為1920x1080,能夠緩存一行像素數據
        在這里插入圖片描述
    • (2)Advanced頁面
      • 1)保持默認值,采用動態同步鎖相模式,寫通道為主,讀通道為從
        在這里插入圖片描述
  2. 配置TGP IP核
    • (1)全部保持默認即可
      在這里插入圖片描述

3.2 注意事項

為各個接口自動連線:必須手動指定主從接口和互聯模塊的時鐘

  1. 為VDMA的M_AXI_S2MM接口連線:從接口是PS的S_AXI_HP0接口
    在這里插入圖片描述
  2. 為TPG的s_axi_CTRL接口連線:主接口是PS的M_AXI_GP0接口,注意
    • (1)TPG只有一個時鐘接口ap_clk,該時鐘是AXI4-Stream data interface和AXI4-Lite control interface共用,所以時鐘源選擇的是Clocking Wizard輸出的clk_out1時鐘,即視頻時鐘,使輸入視頻和輸出視頻同步
      在這里插入圖片描述
  3. 將TPG和VDMA連接起來,為VDMA的s_axis_s2mm_aclk連線,自動識別為Clocking Wizard輸出的clk_out1時鐘,即視頻時鐘
    在這里插入圖片描述

4 軟件設計

4.1 注意事項

  1. TPG IP核生成一個背景為純白,疊加一個黑色移動小方塊的視頻
  2. 當VDMA寫通道停止時
    • (1)VDMA寫通道暫停接收視頻數據,TPG暫停產生視頻數據
    • (2)VDMA讀通道依然在發送數據
      • 1)顯示器上小方塊停止移動
      • 2)說明VDMA讀通道在重復發送同一幀視頻數據,該幀視頻數據是VDMA寫通道在停止前寫入的最后一幀
      • 3)符合動態同步鎖相模式的工作機制,即讀通道(Dynamic Genlock Slave)會操作寫通道(Dynamic Genlock Master)上一個周期操作的幀
  3. 當VDMA寫通道重啟時
    • (1)TPG恢復產生視頻數據
    • (2)顯示器上小方塊繼續從停止的位置開始移動

4.2 工程源碼

4.2.1 main.c文件

/********************************************************************/#include "vdma/vdma_api.h"#include "xparameters.h"
#include "stdio.h"
#include "sleep.h"
#include "xv_tpg.h"/********************************************************************/#define TPG_DEVICE_ID		XPAR_V_TPG_0_DEVICE_ID
#define VDMA_DEVICE_ID		XPAR_AXIVDMA_0_DEVICE_ID
#define MEMORY_BASEADDR		XPAR_PS7_DDR_0_S_AXI_BASEADDR#define IMAGE_WIDTH			1920
#define IMAGE_HEIGHT		1080/********************************************************************//********************************************************************/XV_tpg TpgInst;
XAxiVdma VdmaInst;int FrameBufferAddr = (MEMORY_BASEADDR + 0x02000000);/********************************************************************/int main()
{//int Status;u32 BackGndPatternId;u32 ForeGndPatternId;u32 BoxSize;u32 BoxColorRed;u32 BoxColorGreen;u32 BoxColorBlue;u32 MotionSpeed;//printf("Vdma Video Forward Test.\n");//Status = XV_tpg_Initialize(&TpgInst, TPG_DEVICE_ID);if (Status == XST_FAILURE) {printf("Error : video test pattern generator initialization failed.\n");return XST_FAILURE;}//BackGndPatternId = 0x8;ForeGndPatternId = 0x1;BoxSize       = 0x20;BoxColorRed   = 0x00;BoxColorGreen = 0x00;BoxColorBlue  = 0x00;MotionSpeed = 0x2;XV_tpg_Set_width(&TpgInst, IMAGE_WIDTH);XV_tpg_Set_height(&TpgInst, IMAGE_HEIGHT);XV_tpg_Set_bckgndId(&TpgInst, BackGndPatternId);XV_tpg_Set_boxSize(&TpgInst, BoxSize);XV_tpg_Set_boxColorR(&TpgInst, BoxColorRed);XV_tpg_Set_boxColorG(&TpgInst, BoxColorGreen);XV_tpg_Set_boxColorB(&TpgInst, BoxColorBlue);XV_tpg_Set_motionSpeed(&TpgInst, MotionSpeed);XV_tpg_Set_ovrlayId(&TpgInst, ForeGndPatternId);XV_tpg_Start(&TpgInst);XV_tpg_EnableAutoRestart(&TpgInst);// 啟動VDMA讀寫操作Status = run_vdma_frame_buffer(&VdmaInst, VDMA_DEVICE_ID, IMAGE_WIDTH, IMAGE_HEIGHT, FrameBufferAddr, 0, 0, BOTH);if (Status == XST_FAILURE) {printf("Error : run vdma frame buffer failed.\n");return XST_FAILURE;}//while (1) {//sleep(10);printf("Stop vdma channel.\n");
//    	XAxiVdma_DmaStop(&VdmaInst, XAXIVDMA_READ);XAxiVdma_DmaStop(&VdmaInst, XAXIVDMA_WRITE);//sleep(5);printf("Start vdma channel.\n");
//		XAxiVdma_DmaStart(&VdmaInst, XAXIVDMA_READ);XAxiVdma_DmaStart(&VdmaInst, XAXIVDMA_WRITE);}//return XST_SUCCESS;
}/*****************************************************************************//*****************************************************************************/

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

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

相關文章

認識Docker/安裝Docker

一、認識Docker Docker的定義 Docker 是一個開源的應用容器引擎,允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。容器化技術使得應用可以在任何支持 Docker 的環境中運行,確保環境一致性。 Docker的核心組件 Docker Engine:負責…

實用工具:微軟軟件PowerToys(完全免費),實現多臺電腦共享鼠標和鍵盤(支持window系統)

實用工具:微軟軟件 PowerToys 讓多臺電腦共享鼠標和鍵盤 在如今的數字化辦公與生活場景中,我們常常會面臨同時使用多臺電腦的情況。例如,辦公時可能一臺電腦用于處理工作文檔,另一臺用于運行專業軟件或查看資料;家庭環…

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕 1 配置文件2 插件控制3 命令框架 位置locationURI備注菜單欄menu:org.eclipse.ui.main.menu添加到傳統菜單工具欄toolbar:org.eclipse.ui.main.toolbar添加到工具欄 style 值含義顯示效果push普通按鈕(默…

React中巧妙使用異步組件Suspense優化頁面性能。

文章目錄 前言一、為什么需要異步組件?1. 性能瓶頸分析2. 異步組件的價值 二、核心實現方式1. React.lazy Suspense(官方推薦)2. 路由級代碼分割(React Router v6) 總結 前言 在 React 應用中,隨著功能復…

現在環保方面有什么新的技術動態

環保領域的技術發展迅速,尤其在“雙碳”目標、數字化轉型和可持續發展背景下,涌現出許多創新技術和應用。以下是當前環保領域的新技術動態(截至2024年): 一、碳中和與碳減排技術 CCUS(碳捕集、利用與封存&a…

solidwors插件 開發————仙盟創夢IDE

SolidWorks VBS SolidWorks 支持通過 VBScript(.vbs)腳本 進行簡單的二次開發(如自動化建模、批量操作等),但嚴格來說這屬于 腳本編程,而非傳統的插件(Plug-in)開發(插件…

docker(二)初識 docker

在第一章的容器化架構中,我們已經了解到了 docker 是一個容器化技術,本章將詳細介紹什么是虛擬化、容器化技術,以及什么是 docker。 一、物理機 VS 虛擬化 VS 容器化 物理機: 實際的服務器或者計算機。是相對于虛擬機而言的對實體…

ChatGPT + DeepSeek 聯合潤色的 Prompt 模板指令合集,用來潤色SCI論文太香了!

對于非英語母語的作者來說,寫SCI論文的時候經常會碰到語法錯誤、表達不夠專業、結構不清晰以及術語使用不準確等問題。傳統的潤色方式要么成本高、效率低,修改過程又耗時又費力。雖然AI工具可以幫助我們來潤色論文,但單獨用ChatGPT或DeepSeek都會存在內容泛泛、專業性不足的…

python打包exe報錯:處理文件時錯誤:Excel xlsx file; not supported

背景:最近用python寫一個excel解析工具,然后打包成exe可執行文件的時候,遇到這樣的問題 1.在我自己編譯器運行是可以正常將上傳后的excel進行解析,但是在打包成exe后,就無法正常解析excel 問題排查: 1.切換…

Ubuntu操作合集

UFWUncomplicated Firewall 查看狀態和規則: 1查看狀態sudo ufw status, 2查看詳細信息sudo ufw status verbose, 默認策略配置: 1拒絕所有入站sudo ufw default deny incoming 2允許所有出戰sudo ufw default allow outgoing …

怎么用Origin畫出MATLAB效果的3D時頻圖

MATLAB畫3D時頻圖的效果比Origin差遠了....但用Origin去畫MATLAB需要一些過程 本帖讓你輕輕松松把MATLAB的時頻圖搬移到Origin中,然后擁有高級視圖的3D時頻圖,并且可以隨心調整格式 一、數據搬移 首先,在MATLAB中打開時頻圖變量 復制 在O…

OpenEvidence AI臨床決策支持工具平臺研究報告

平臺概述 OpenEvidence是一個專為醫療專業人士設計的臨床決策支持工具,旨在通過整合各類臨床計算器和先進的人工智能技術,提高醫生的診療決策效率和準確性。作為一款綜合性醫療平臺,OpenEvidence將復雜的醫學計算流程簡化,同時提供個性化的臨床建議,使醫生能夠更快、更準…

vim - v

在 Vim 中,使用 可視模式(Visual Mode) 可以選中文本并進行復制、剪切、粘貼等操作。以下是詳細的使用方法: 1. 進入可視模式 命令功能v字符可視模式(按字符選擇)V(大寫)行可視模式…

GUI圖形化演示

目錄 概述 常用組件如下: JFrame: 一.新建JFrame對象: 二.設置JFrame的大小: 三.設定JFrame的關閉方式 布局方式: setLayout 方法概述 常用布局管理器 自定義布局 注意事項 面板與布局的嵌套: 監聽器&#…

Visual Studio已更新為17.14+集成deepseek實現高效編程

01 Visual Studio 2022 v17.14。 此更新側重于全面提供出色的開發人員體驗,側重于穩定性和安全性以及 AI 改進。 02 GPT-4o代碼完成模式 我們非常高興地宣布,新的 GPT-4o Copilot 代碼完成模型現已在 Visual Studio 17.14 中為 GitHub Copilot 用戶…

URP相機如何將場景渲染定幀模糊繪制

1)URP相機如何將場景渲染定幀模糊繪制 2)為什么Virtual Machine會隨著游戲時間變大 3)出海項目,打包時需要勾選ARMv7嗎 4)Unity是手動還是自動調用GC.Collect 這是第431篇UWA技術知識分享的推送,精選了UWA社…

OpenAI推出Codex — ChatGPT內置的軟件工程Agents

OpenAI繼續讓ChatGPT對開發者更加實用。 幾天前,他們增加了連接GitHub倉庫的支持,可以"Deep Research"并根據你自己的代碼提問。 今天,該公司在ChatGPT中推出了Codex的研究預覽版,這是迄今為止最強大的AI編碼Agent。 它可以編寫代碼、修復錯誤、運行測試,并在…

Python × CARLA:如何在自動駕駛仿真世界里打造智能駕駛系統?

Python CARLA:如何在自動駕駛仿真世界里打造智能駕駛系統? 在人工智能與自動駕駛的浪潮中,真實世界的測試成本高昂,而自動駕駛仿真已成為開發者訓練和測試 AI 駕駛算法的關鍵技術手段。其中,CARLA(Car Learning to Act)作為開源自動駕駛仿真平臺,憑借其真實感強、高度…

低空態勢感知:基于AI的DAA技術是低空飛行的重要安全保障-機載端地面端

低空態勢感知:基于AI的DAA技術是低空飛行的重要安全保障-機載端&地面端 目前空中已經有大量無人機和其他飛機,未來幾年還會有空中出租車。目前,美國每年平均發生 15 到 25 起空中相撞事故。 檢測和避免 (DAA) 檢測和避免 (DAA) 技術可…

【springcloud學習(dalston.sr1)】Eureka 客戶端服務注冊(含源代碼)(四)

d該系列項目整體介紹及源代碼請參照前面寫的一篇文章【springcloud學習(dalston.sr1)】項目整體介紹(含源代碼)(一) springcloud學習(dalston.sr1)系統文章匯總如下: 【springcloud學習(dalsto…