您的位置:首頁>正文

在Digilent Nexys Video板卡上實現HDMI I/O視頻處理系統之軟體配置介紹

Nexys Video多媒體音視頻開發板

音視頻處理, 帶你從入門到放肆

嵌入式視覺是當今科技最激動人心的領域之一。

關於使用Zynq SoC的嵌入式視覺應用, 熱心群眾們說的太多, 我就不贅述了。 今天我們換一個新的視角, 來看看如何使用純FPGA來實現嵌入式視覺方案。

這篇文章, 將帶你瞭解如何使用Digilent Nexys Video Artix-7 FPGA多媒體音視頻開發板來實現一個簡單的HDMI輸入/輸出視頻處理系統。 特別是如果你是一名新手, 通過本文, 你會對基於FPGA的視頻處理有更多基本的理解。

上篇(←點擊瞭解), 我們對如何用Nexys Video來實現一個簡單的HDMI輸入/輸出視頻處理系統做了扼要的概述。

接著上篇, 我們來看一下這一專案的軟體配置部分。

在Nexys Video Artix-7 FPGA開髮卡上啟動並運行MicroBlaze軟核處理器系統後, 我們需要使用一些軟體來生成視頻輸出信號。 在這個示例中, 我們將使用MicroBlaze處理器生成測試模式。 為了實現這個設計, 我們將向Nexys Video板卡的DDR SDRAM中寫入資料, 然後VDMA讀出這些資料並且通過HDMI輸出。

軟體部分我們首選要做的是定義視頻幀, 它將會被存儲到記憶體並通過VDMA輸出。 我們將在記憶體中定義三個視頻幀。 每個視頻幀的定義採用二維陣列:

u8 frameBuf[DISPLAY_NUM_FRAMES][DEMO_MAX_FRAME];

將參數DISPLAY_NUM_FRAME設置為3, DEMO_MAX_FRAME設置為1920 * 1080 * 3。 這裡需要考慮到最大幀解析度, 最後乘以3適用到每個圖元(紅, 黃, 藍圖元都採用8位元來表示)。

為了能夠訪問這些幀, 我們使用陣列指標指向每個幀緩存空間。

用這種方式定義會簡化我們與視頻幀之間的交互。

定義好視頻幀後, 下一步就是初始化和配置這個設計的流水線。 具體如下:

VDMA – 使用DMA將資料從板上的DDR SDRAM搬運到視頻輸出鏈路中。

動態時鐘IP – 輸出圖元時鐘頻率以及這個頻率的倍數用於HDMI輸出。

視頻時序控制器0 – 根據解析度定義輸出顯示時序。

視頻時序控制器 1 – 在輸出接收端決定視頻時序。 在這個示例中, 這個控制器從一個源獲取輸入視頻幀。

為了確保VDMA功能的正常, 我們需要定義步幅, 即DDR記憶體中每行之間的間隔。 對於本項目, 步幅設置為3 * 1920, 這是每行的最大長度。

在這一項目中, 我們能設置不同的顯示解析度, 從640x480 到 1920x1080。

無論我們選擇什麼樣的解析度, 我們都能夠使用測試模式在螢幕上借助軟體功能向DDR SDRAM寫入資料。

當我們改變功能時, 我們還需要重新配置VDMA、視頻時序生成器 0和動態時鐘模組。

下一步則是生成視頻輸出。 在這個示例中主應用程式有很多功能可以生成、採集和顯示視頻。 具體如下:

Bar測試模式 – 在螢幕上生成多個顏色條

混合測試模式 – 在螢幕上生成混合顏色測試條

流模式, 從HDMI輸入到HDMI輸出

抓取一個輸入幀將顏色反轉

抓取一個輸入幀並按比例擴展到當前的顯示解析度

按照下方的代碼就可以輕鬆的實現設置紅、藍、綠圖元的值。 每個圖元的顏色值都是無符號8位元整數。

frame[iPixelAddr] = wRed;

frame[iPixelAddr + 1] = wBlue;

frame[iPixelAddr + 2] = wGreen;

當運行應用時, 通過UART終端視窗我們可以看到輸出的選項功能表, 通過選擇我們可以執行不同的功能來進行測試:

設置程式輸出顏色條, 混合測試模式輸出的效果如下圖所示:

通過本文, 相信大家現在已經知道如何向DDR記憶體中寫入資訊並將它顯示到螢幕上了。 如果你喜歡此文, 記得分享給你身邊對“基於純FPGA的視頻處理”有同好的小夥伴哦~~

專案實現全過程, 可點擊「閱讀原文」收藏。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示