0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AXI VDMA IP 的高級(jí)用例

Hack電子 ? 來(lái)源:Hack電子 ? 2023-02-15 11:25 ? 次閱讀
引言

展示的是可以如何使用 AXI Video Direct Memory Access (VDMA) IP 來(lái)實(shí)現(xiàn)視頻剪裁、畫(huà)中畫(huà)或軟模式生成器功能。

示例 1:使用 AXI VDMA IP 的視頻裁剪

視頻裁剪

在某些情況下,您可能需要輸出分辨率比輸入分辨率小。視頻剪裁是您可以通過(guò) AXI 視頻直接存儲(chǔ)器訪問(wèn)(VDMA) IP 執(zhí)行的一項(xiàng)操作。

視頻剪裁是對(duì)圖像的特定部分進(jìn)行的“剪切”。我們可以通過(guò)只讀取傳入視頻的一部分來(lái)完成此操作。

bdf6c57e-ac5c-11ed-bfe3-dac502259ad0.png

通過(guò)AXI VDMA IP來(lái)實(shí)現(xiàn)

在此示例中,我要將測(cè)試模式生成器(TPG) IP 用作源,并且將 AXI VDMA IP 配置為已啟用讀寫(xiě)通道。這與視頻系列 24 中的設(shè)計(jì)相同。

be1a77c6-ac5c-11ed-bfe3-dac502259ad0.jpg

在這個(gè)應(yīng)用中,我要把TPG IP設(shè)置為可以生成分辨率為1024x768的視頻(而會(huì)把HDMI輸出分辨率固定為800x600)

//Configure the TPG
app_hdmi_conf_tpg(&tpg_inst, 768, 1024, 0x2, XTPG_BKGND_COLOR_BARS);

必須完成的主要配置是 AXI VDMA IP。

寫(xiě)入接口被設(shè)置為1024x768

//S2MM Frame delay / Stride register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 1024*2);
// S2MM HSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 1024*2);
// S2MM VSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 768);

讀取接口被設(shè)置為 800x600。

// MM2S Frame delay / Stride register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 1024*2);
// MM2S HSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 800*2);
// MM2S VSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 600);

請(qǐng)注意,此處的 STRIDE 參數(shù)不等于 HSIZE 參數(shù)。這是我們確實(shí)可以使用此參數(shù)的一種情況。

如果 STRIDE 等于 HSIZE,那么 AXI VDMA IP 會(huì)在沒(méi)有任何跳轉(zhuǎn)的情況下讀取幀緩存。但是,由于輸入大小大于輸出大小,我們需要在地址之間跳轉(zhuǎn)以便能夠正確地對(duì)齊下一行的開(kāi)頭。


STRIDE 參數(shù)用于描述每個(gè)視頻行第一個(gè)像素之間的地址的字節(jié)數(shù)。

be37fe4a-ac5c-11ed-bfe3-dac502259ad0.png

如果我們想在輸入幀中移動(dòng)剪裁窗口,我們只需在幀緩存地址中添加偏移,使 HSIZE 和 STRIDE 參數(shù)值保持一致即可。

be59ba8a-ac5c-11ed-bfe3-dac502259ad0.png

例如,如果我們想要讓剪裁窗口水平居中,可以為讀取接口的幀緩存地址添加 224 的偏移((hsize_in –hsize_out)/2 * bytes/pixel = (1024 - 800)/2 * 2 = 224)。

// MM2S Start Address 1
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C, 0x10000000 + 224);
// MM2S Start Address 2
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x60, 0x10200000 + 224);
// MM2S Start Address 3
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x64, 0x10400000 + 224);

注意:在此示例中,偏移需要是存儲(chǔ)器映射數(shù)據(jù)寬度字節(jié)(32 位)的倍數(shù),因?yàn)樵凇癆XI VDMA IP”配置中未啟用“Allow Unaligned Transfers”。

示例 2:使用 AXI VDMA IP 的畫(huà)中畫(huà)

畫(huà)中畫(huà)

如果設(shè)計(jì)中的輸入分辨率小于輸出分辨率,則可能采用的解決方案就是使用畫(huà)中畫(huà)。例如,我們可以添加藍(lán)色背景,然后使輸入居中。

be70d314-ac5c-11ed-bfe3-dac502259ad0.png

通過(guò)AXI VDMA IP來(lái)實(shí)現(xiàn)

設(shè)計(jì)的硬件與示例 1 中的硬件相同。

在這個(gè)應(yīng)用中,TPG IP被設(shè)置為可以生成分辨率為640x480的視頻(而HDMI輸出分辨率固定為800x600)

//Configure the TPG
app_hdmi_conf_tpg(&tpg_inst,480,640, 0x2, XTPG_BKGND_COLOR_BARS);

我們需要做的第一件事就是用背景的藍(lán)色填充幀緩存。

這是通過(guò)代碼中的以下行來(lái)完成的:

UINTPTR Addr1=0x10000000,Addr2=0x10200000,Addr3=0x10400000;
…
print("Initialize frame buffer data...");
//Disable the data cache to initialize the frame buffer with a blue color
Xil_DCacheDisable();
//Write a blue background in the memory
for(line=0; line < OUTPUT_HEIGHT; line++)
{
for(column=0; column < OUTPUT_WIDTH/2; column++)
{
//Write the blue color to the frame buffer(0x6B1DFF1D in YUV422)
Xil_Out32(Addr1, 0x6B1DFF1D);
Xil_Out32(Addr2, 0x6B1DFF1D);
Xil_Out32(Addr3, 0x6B1DFF1D);

Addr1+=4;
Addr2+=4;
Addr3+=4;
}

}
//Re-enable the data cache
Xil_DCacheEnable();
print("Done

");

您可以看到,在將數(shù)據(jù)寫(xiě)入內(nèi)存之前,我會(huì)禁用數(shù)據(jù)高速緩存(Xil_DCacheDisable())并在寫(xiě)入完成后重新啟用它。

寫(xiě)入或讀入高速緩存存儲(chǔ)器而不是 DDR 存儲(chǔ)器是一個(gè)常見(jiàn)的錯(cuò)誤。使用內(nèi)存時(shí),您需要確保從正確的位置讀取/寫(xiě)入。

然后,在進(jìn)行 AXI VDMA IP 配置時(shí),我們將執(zhí)行與示例 1 中所執(zhí)行操作相反的操作。

在這個(gè)示例中,我們會(huì)使用寫(xiě)入接口(而不是前面示例中的讀取接口)上的步幅(現(xiàn)在已與 HSIZE 不同)在 800 * 600背景上正確地寫(xiě)入內(nèi)存。

對(duì)于緩存存儲(chǔ)器地址,我添加了一個(gè)偏移以便能夠使輸入水平和垂直居中。

//Offset to center the pattern on the buffer
offset = 0x177A0;
//S2MM Start Address 1
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, 0x10000000 + offset);
//S2MM Start Address 2
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xB0, 0x10200000 + offset);
//S2MM Start Address 3
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xB4, 0x10400000 + offset);
//S2MM Frame delay / Stride register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, OUTPUT_WIDTH*2);
// S2MM HSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 640*2);
// S2MM VSIZE register
Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 480);

示例 3:使用 AXI VDMA IP 的軟模式發(fā)生器

通過(guò)AXI VDMA IP來(lái)實(shí)現(xiàn)

在此示例中,AXI VDMA IP 配置為僅啟用讀取接口。

在應(yīng)用開(kāi)始時(shí),處理器在 DDR 中寫(xiě)入模式。

在 Vivado Design 中,我刪除了“測(cè)試模式生成器”:

be8882ac-ac5c-11ed-bfe3-dac502259ad0.jpg

因?yàn)槲覀冋谧x取一個(gè)靜止模式,所以在 AXI VDMA IP 讀取時(shí)不會(huì)同時(shí)寫(xiě)入與幀緩存對(duì)應(yīng)的存儲(chǔ)器。因此,AAXI VDMA IP 中只需要一個(gè)幀緩存器。

bea6ffe8-ac5c-11ed-bfe3-dac502259ad0.jpg

寫(xiě)入存儲(chǔ)器的方式與示例 2 中所用的方式類(lèi)似,在需要訪問(wèn) DDR 存儲(chǔ)器時(shí)禁用高速緩存。

另外請(qǐng)注意,在配置 AXI VDMA IP 的 MM2S 接口時(shí),同步鎖相會(huì)被禁用。

構(gòu)建SDK工作空間和Vivado Designs

注意:這些示例僅針對(duì) ZC702 電路板。

構(gòu)建SDK工程
  1. 下載教程文件,然后解壓縮文件夾。

  2. 啟動(dòng)賽靈思軟件命令行工具(XSCT) 2018.1。

  • 從 Windows 菜單中選擇以下內(nèi)容:

“Start > All Program > Xilinx Design Tools > Xilinx Software Command Line Tool 2018.1”。

  • 從命令行:

使用 xsct 命令(需要設(shè)置 SDK 2018.1 的環(huán)境變量)。

  1. 在 xsct 中,使用 cd 導(dǎo)航到您要構(gòu)建的示例的路徑(example_x/sw)。

    然后輸入下列命令:
    source create_SW_proj.tcl

  2. 打開(kāi) SDK,然后選擇“example_x/sw/sdk_workspace”作為工作空間。

構(gòu)建Vivado Design
  1. 打開(kāi) Vivado 。

  2. 在 Tcl 控制臺(tái)中,使用 cd 導(dǎo)航到解壓縮的目錄(cd example_x/hw)。

  3. 在 Tcl 控制臺(tái)中,用 source 來(lái)寫(xiě)腳本 tcl (source ./create_proj.tcl)。


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7366

    瀏覽量

    163096
  • 分辨率
    +關(guān)注

    關(guān)注

    2

    文章

    1008

    瀏覽量

    41736
  • AXI
    AXI
    +關(guān)注

    關(guān)注

    1

    文章

    127

    瀏覽量

    16514

原文標(biāo)題:AXI VDMA IP 的高級(jí)用例

文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    XILINX FPGA IPAXI Traffic Generator

    AXI Traffic Generator IP 用于在AXI4和AXI4-Stream互連以及其他AXI4系統(tǒng)外設(shè)上生成特定序列(流量)。
    的頭像 發(fā)表于 11-23 16:03 ?1866次閱讀
    XILINX FPGA <b class='flag-5'>IP</b>之<b class='flag-5'>AXI</b> Traffic Generator

    AXI VDMA可以工作,但是少數(shù)線(xiàn)路不正確,總是丟包

    大家好我在Zedboard上遇到了AXI Video DMA的問(wèn)題。我正在嘗試在zedboard上進(jìn)行簡(jiǎn)單的vdma測(cè)試演示。這是我的步驟。我想發(fā)送自己的圖片(每像素32位)進(jìn)行FPGA處理。我將自
    發(fā)表于 03-01 12:26

    什么會(huì)導(dǎo)致VDMAAXI視頻直接存儲(chǔ)器訪問(wèn))的S2MM中的幀計(jì)數(shù)器中斷?

    我使用VDMAAXI互連器和DDR3進(jìn)行了設(shè)計(jì),以實(shí)現(xiàn)視頻幀緩沖。我遇到了一個(gè)問(wèn)題,即在完成第一幀之后,VDMA卡在第二幀的開(kāi)頭。我通過(guò)AXI lite讀取了
    發(fā)表于 03-14 15:28

    zynq上的AXI視頻直接內(nèi)存訪問(wèn)v6.2 IP

    大家好,有一個(gè)AXI VDMA IP,它可以很好地使用HP端口從zynq zc706上的PS DDR獲取1920x1080 @ 60Hz視頻。我們可以使用相同的IP在zynq zc70
    發(fā)表于 04-09 06:10

    如何將兩個(gè)VDMA的同步鎖相模式和Axi的定時(shí)模式設(shè)置為視頻OUTIP?

    嗨,我在ZYNQ-7000 XC7Z045開(kāi)發(fā)板和FMC-IMAGEON FMC模塊(Avnet)上有一個(gè)系統(tǒng)。我的配置如下:HDMI輸入 - >視頻輸入Axi-> VDMA
    發(fā)表于 11-08 06:02

    如何使用axi tpg和axi vdma?

    嗨,我將使用axi tpg和axi vdma在zedboard上的ddr3中編寫(xiě)幀數(shù)據(jù),但我不知道,如何在vivado 2014.4和我的項(xiàng)目的sdk c應(yīng)用程序代碼中設(shè)計(jì)vivado塊設(shè)計(jì),請(qǐng)幫幫我是zedboard的新用戶(hù)。
    發(fā)表于 04-06 17:25

    請(qǐng)問(wèn)如何擴(kuò)展AXI VDMA幀緩沖器?

    為了減少VDMA調(diào)用的數(shù)量,我需要一個(gè)更大的幀緩沖32.我想擴(kuò)展它,但我沒(méi)有找到任何源文檔或驗(yàn)證測(cè)試平臺(tái)。有人可以推薦一種方法嗎?我還考慮過(guò)使用AXI DMA。使用分辨率,我可以緩沖超過(guò)32幀,但仍然不夠。感謝您的支持!
    發(fā)表于 04-27 08:05

    IP definition not found for VLNV: xilinx.com:ip:axi_vdma:6.2 ERROR: [Common 17-39] 'create_bd_cell' failed due to earlier errors.要如何解決呢

    : xilinx.com:ip:axi_vdma:6.2 ERROR: [Common 17-39] 'create_bd_cell' failed due to earlier errors. while
    發(fā)表于 10-06 22:22

    Xilinx VDMA 24位流輸出與32位AXI總線(xiàn)的內(nèi)存流數(shù)據(jù)關(guān)系

    個(gè)HDMI核是32位的,我自己寫(xiě)了個(gè)axis_24_32的位寬轉(zhuǎn)換的ip,這個(gè)暫且按下不表: BEGIN axi_vdma PARAMETER INSTANCE = axi_vdma_0 PARAMETER
    發(fā)表于 02-09 05:53 ?688次閱讀
    Xilinx <b class='flag-5'>VDMA</b> 24位流輸出與32位<b class='flag-5'>AXI</b>總線(xiàn)的內(nèi)存流數(shù)據(jù)關(guān)系

    PCIE通信技術(shù):通過(guò)AXI-Lite ip配置的VDMA使用

    XDMA是Xilinx封裝好的PCIE DMA傳輸IP,可以很方便的把PCIE總線(xiàn)上的數(shù)據(jù)傳輸事務(wù)映射到AXI總線(xiàn)上面,實(shí)現(xiàn)上位機(jī)直接對(duì)AXI總線(xiàn)進(jìn)行讀寫(xiě)而對(duì)PCIE本身TLP的組包和解包無(wú)感。
    的頭像 發(fā)表于 12-28 10:17 ?3030次閱讀

    你必須了解的AXI總線(xiàn)詳解

    DMA的總結(jié) ZYNQ中不同應(yīng)用的DMA 幾個(gè)常用的 AXI 接口 IP 的功能(上面已經(jīng)提到): AXI-DMA:實(shí)現(xiàn)從 PS 內(nèi)存到 PL 高速傳輸高速通道 AXI-HP----AXI
    的頭像 發(fā)表于 10-09 18:05 ?7211次閱讀
    你必須了解的<b class='flag-5'>AXI</b>總線(xiàn)詳解

    全面介紹ZYNQ-AXI互聯(lián)IP

    學(xué)習(xí)內(nèi)容 近期設(shè)計(jì)需要用到AXI總線(xiàn)的IP,所以就對(duì)應(yīng)常用的IP進(jìn)行簡(jiǎn)要的說(shuō)明,本文主要對(duì)AXI互聯(lián)IP進(jìn)行介紹。 基礎(chǔ)架構(gòu)
    的頭像 發(fā)表于 05-11 14:52 ?6178次閱讀
    全面介紹ZYNQ-<b class='flag-5'>AXI</b>互聯(lián)<b class='flag-5'>IP</b>

    AXI4-Stream Video 協(xié)議和AXI_VDMAIP核介紹

    本文主要介紹關(guān)于AXI4-Stream Video 協(xié)議和AXI_VDMAIP核相關(guān)內(nèi)容。為后文完成使用帶有HDMI接口的顯示器構(gòu)建圖像視頻顯示的測(cè)試工程做準(zhǔn)備。
    的頭像 發(fā)表于 07-03 16:11 ?7909次閱讀

    什么是AXI?AXI如何工作?

    Xilinx 從 Spartan-6 和 Virtex-6 器件開(kāi)始采用高級(jí)可擴(kuò)展接口 (AXI) 協(xié)議作為知識(shí)產(chǎn)權(quán) (IP) 內(nèi)核。Xilinx 繼續(xù)將 AXI 協(xié)議用于針對(duì) 7 系
    的頭像 發(fā)表于 09-27 09:50 ?1422次閱讀
    什么是<b class='flag-5'>AXI</b>?<b class='flag-5'>AXI</b>如何工作?

    LogiCORE IP AXI UART 16550內(nèi)核簡(jiǎn)介

    LogiCORE IP AXI 通用異步接收發(fā)送器 (UART) 16550 連接到高級(jí)微控制器總線(xiàn)架構(gòu) (AMBA) AXI,為異步串行數(shù)據(jù)傳輸提供控制器接口。該軟
    的頭像 發(fā)表于 10-16 11:02 ?3609次閱讀
    LogiCORE <b class='flag-5'>IP</b> <b class='flag-5'>AXI</b> UART 16550內(nèi)核簡(jiǎn)介