女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA 大神 Adam Taylor 使用 ALINX VD100(AMD Versal系列)開發平臺實現圖像處理

FPGA技術專欄 ? 來源:FPGA技術專欄 ? 作者:FPGA技術專欄 ? 2025-05-16 09:46 ? 次閱讀

本篇文章來自 FPGA 大神、Ardiuvo & Hackster.IO 知名博主 Adam Taylor。在這里感謝 Adam Taylor 對 ALINX 產品的關注與測試。為了讓文章更易閱讀,我們在原文的基礎上作了一些靈活的調整,包括對一些專業名詞進行了補充解釋,便于初學者快速理解。原文鏈接已貼在文章底部。歡迎大家在評論區友好互動。


最近,我在辦公室里搞了一塊ALINX VD100



這是一塊基于AMD Versal Edge AI平臺的開發板,功能特別強大,可以用來做圖像處理、人工智能等各種高階應用。


為了方便隨時開發,我把它連到了公司局域網,遠程就能連接,由此開始了我的折騰之旅。


這次,我最想探索的是:怎么在這塊板子上跑圖像處理的應用


VD100不僅帶了兩個 MIPI 攝像頭接口,還能直接連上LCD屏幕,基本滿足了圖像應用開發的需求。


第一步:讓屏幕先亮起來!


搞攝像頭太復雜,我決定先從屏幕入手——先通過測試圖案生成器(Test Pattern Generator)驗證 LCD 屏幕圖像顯示鏈路的有效性。


ALINX VD100開發板支持的 LCD 屏幕,分辨率是1280×720(WXGA 標準)


數據傳輸采用的是VESA 標準的 LVDS 接口


這里稍微解釋一下:

LVDS(低壓差分信號)是一種高速又抗干擾的數據傳輸方式,特別適合屏幕傳輸高速畫面。

VESA 和 JEIDA 是常見的兩種 LVDS 傳輸標準,咱們用的是 VESA。VESA 更國際通用,JEIDA 常見于日本廠商。


在 VESA 標準下使用 RG888 格式時,屏幕的每一幀圖像數據和控制信號(如同步信號 hsync、vsync)會被打包進 4 條數據通道里,同時還有第 5 條通道專門傳時鐘(Clock),方便接收端正確還原數據。


wKgZPGgmmPOAY4ghAAAjOE6CVmI04.webp


每次時鐘跳動時,每條數據通道都會同步傳7 位數據。


聽起來有點復雜?簡單說就是:用 4+1 條小路,高速搬運屏幕畫面。


開發流程:搭建系統設計


為了讓板子順利傳屏幕數據,我們需要在 Vivado(AMD/Xilinx 的開發工具)里做一套設計,包括:


CIPS
→ 配置 VD100 平臺上的 V100 SoM。

NOC
→ 配置 DDRMC,并開兩條 MAXI 輸出,提供數據存取支持。

視頻測試圖生成器 (Video Test Pattern Generator, TPG)
→ 通過 AXI Lite 總線連接到 NOC,生成標準圖像(比如彩條、棋盤格)。

視頻時序生成器 (Video Timing Controller, VTC)
→ 通過 AXI Lite 總線連接到 NOC,生成 LCD 顯示需要的同步信號(如 hsync、vsync)。

AXI4-Stream to Video Out
→ 與上述兩個生成器相連,把測試圖和時序信息組織成并行視頻流(RGB888格式)。

LCD_LVDS IP核
→ 把并行視頻信號轉成符合 LVDS 規范的數據流。

Advanced IO Wizard
→ 負責真正的串行化操作,把數據以 LVDS 標準發出去(包括 4 路數據+ 1 路時鐘)。


最終 LCD 屏幕接收到 LVDS 信號并顯示圖像。


這套設計(可以在我的 GitHub 上找到)如下所示:


wKgZO2gmmPSASNduAAB2nuH_aHI71.webp


通過這個系統,我們可以使用 CIPS 內置的處理器來控制測試圖案,從而驗證各顏色通道是否正常。


設置和驅動 LCD 顯示器的 CIPS 端代碼也非常簡單,如下所示:

#include 
#include "platform.h"
#include "xil_printf.h"
#include "xvtc.h"
#include "xparameters.h"
#include "xv_tpg.h"
#include "xvidc.h"
#include"vga.h"

XV_tpg      tpg;
XVtc	    VtcInst;
VideoMode   video;
XVtc_Config *vtc_config ;

int main()
{
    XVtc_SourceSelect SourceSelect;
    XVtc_Timing vtcTiming;
    u32 height,width,status;
    init_platform();

    print("Setting up Timingnr");
    vtc_config = XVtc_LookupConfig(XPAR_XVTC_0_BASEADDR);        
    XVtc_CfgInitialize(&VtcInst,vtc_config ,XPAR_XVTC_0_BASEADDR);
    
    print("Setting up Videonr");
    video = VMODE_1280x720 ;
	vtcTiming.HActiveVideo = video.width;	
	vtcTiming.HFrontPorch = video.hps - video.width;	
	vtcTiming.HSyncWidth = video.hpe - video.hps;		
	vtcTiming.HBackPorch = video.hmax - video.hpe + 1;	
	vtcTiming.HSyncPolarity = video.hpol;	
	vtcTiming.VActiveVideo = video.height;	
	vtcTiming.V0FrontPorch = video.vps - video.height;	
	vtcTiming.V0SyncWidth = video.vpe - video.vps;	
	vtcTiming.V0BackPorch = video.vmax - video.vpe + 1;;	
	vtcTiming.V1FrontPorch = video.vps - video.height;	
	vtcTiming.V1SyncWidth = video.vpe - video.vps;	
	vtcTiming.V1BackPorch = video.vmax - video.vpe + 1;
	vtcTiming.VSyncPolarity = video.vpol;	
	vtcTiming.Interlaced = 0;

    print("Setting up TPGnr");
        
    	XV_tpg_Initialize(&tpg,XPAR_XV_TPG_0_BASEADDR );
    	status = XV_tpg_IsIdle(&tpg);
    	XV_tpg_Set_height(&tpg, (u32) video.height);
	XV_tpg_Set_width(&tpg, (u32) video.width);
	height = XV_tpg_Get_height(&tpg);
	width = XV_tpg_Get_width(&tpg);
	XV_tpg_Set_colorFormat(&tpg,XVIDC_CSF_RGB);
    	XV_tpg_Set_bckgndId(&tpg,XTPG_BKGND_TARTAN_COLOR_BARS);
	XV_tpg_Set_maskId(&tpg, 0x0);
	XV_tpg_Set_motionSpeed(&tpg, 0x4);
    	XV_tpg_EnableAutoRestart(&tpg);
	XV_tpg_Start(&tpg);
    
    print("Setting up Sourcenr");

    memset((void *)&SourceSelect, 0, sizeof(XVtc_SourceSelect));
	SourceSelect.VBlankPolSrc = 1;
	SourceSelect.VSyncPolSrc = 1;
	SourceSelect.HBlankPolSrc = 1;
	SourceSelect.HSyncPolSrc = 1;
	SourceSelect.ActiveVideoPolSrc = 1;
	SourceSelect.ActiveChromaPolSrc= 1;
	SourceSelect.VChromaSrc = 1;
	SourceSelect.VActiveSrc = 1;
	SourceSelect.VBackPorchSrc = 1;
	SourceSelect.VSyncSrc = 1;
	SourceSelect.VFrontPorchSrc = 1;
	SourceSelect.VTotalSrc = 1;
	SourceSelect.HActiveSrc = 1;
	SourceSelect.HBackPorchSrc = 1;
	SourceSelect.HSyncSrc = 1;
	SourceSelect.HFrontPorchSrc = 1;
	SourceSelect.HTotalSrc = 1;

    print("Run Timing Gennr");    
	
	XVtc_SetGeneratorTiming(&VtcInst, &vtcTiming);
	XVtc_SetSource(&VtcInst, &SourceSelect);
	XVtc_EnableGenerator(&VtcInst);
    XVtc_RegUpdateEnable(&VtcInst);
	XVtc_Enable(&VtcInst);

    while(1){

    };

    cleanup_platform();
    return 0;
}


LCD_LVDS 這個模塊,我是直接從 ALINX 的 GitHub 倉庫上下載的。


下載好后,把它加到 Vivado 里面,就能像拼積木一樣拖進設計里。

LCD_LVDS 下載鏈接:https://github.com/alinxalinx/VD100_2023.2/tree/master/Demo/course_s1


寫好所有程序后,我們讓開發板運行,屏幕上果然顯示出了測試圖案,色彩鮮明,說明各個顏色通道都正常了。開發板和屏幕之間的溝通,算是正式打通了!


wKgZPGgmmPSAAYUWAABx7CtEwZo47.webp

wKgZO2gmmPSARyVfAACVymrdhl078.webp


不過,這里面有個很有意思的事情。


Advanced IO Wizard 這個模塊,默認是按 8 位一組來打包數據發出去的。


而我們的 VESA LVDS 傳輸,要求 7 位一組。這咋辦?


我用到了一個叫做 Gearbox 的小模塊,把 7 位數據轉換成 4 位數據輸出。


然后,用 Advanced IO Wizard 把 4 位數據高速串行發出去。


這樣就實現了 7 位序列化,雖然中間多了一步變換,但整體還是很高效的。


不過,其實只要手動配置一下,Advanced IO Wizard 也是可以支持直接 7 位打包發送的,只是這次參考了 AMD 的官方應用筆記(參考代碼叫 tx_piso_7to1),所以先用了 Gearbox 的方式。


未來有機會的話,我想試著優化一下,直接用 7 位串行模式,把系統做得更簡潔高效!


接下來要做的


現在圖像輸出環節已經搞定了,接下來就是更刺激的前端部分:


通過 MIPI 接口接入攝像頭,把真實拍到的圖像,實時顯示到屏幕上。


真正的圖像處理任務,馬上就要開始啦!


(未完待續)


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1643

    文章

    21966

    瀏覽量

    614131
  • amd
    amd
    +關注

    關注

    25

    文章

    5564

    瀏覽量

    135889
  • 圖像處理
    +關注

    關注

    27

    文章

    1325

    瀏覽量

    57715
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺之準備工作(1)

    AMD Versal AI Edge 自適應計算加速平臺之準備工作,包含軟件環境、硬件環境。
    的頭像 發表于 03-07 15:49 ?1103次閱讀
    【<b class='flag-5'>ALINX</b> 技術分享】<b class='flag-5'>AMD</b> <b class='flag-5'>Versal</b> AI Edge 自適應計算加速<b class='flag-5'>平臺</b>之準備工作(1)

    ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺Versal 介紹(2)

    ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺Versal 介紹,以及
    的頭像 發表于 03-07 16:03 ?1583次閱讀
    【<b class='flag-5'>ALINX</b> 技術分享】<b class='flag-5'>AMD</b> <b class='flag-5'>Versal</b> AI Edge 自適應計算加速<b class='flag-5'>平臺</b>之 <b class='flag-5'>Versal</b> 介紹(2)

    在Vivado中構建AMD Versal可擴展嵌入式平臺示例設計流程

    為了應對無線波束形成、大規模計算和機器學習推斷等新一代應用需求的非線性增長,AMD 開發了一項全新的創新處理技術 AI 引擎,片內集成該AI Engine的FPGA
    的頭像 發表于 04-09 15:14 ?1967次閱讀
    在Vivado中構建<b class='flag-5'>AMD</b> <b class='flag-5'>Versal</b>可擴展嵌入式<b class='flag-5'>平臺</b>示例設計流程

    使用ALINX VD100開發板實現圖像處理

    這是一塊基于 AMD Versal Edge AI 平臺開發板,功能特別強大,可以用來做圖像處理
    的頭像 發表于 05-12 09:23 ?319次閱讀
    使用<b class='flag-5'>ALINX</b> <b class='flag-5'>VD100</b><b class='flag-5'>開發板實現</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>

    求助圖像差分代碼開發

    我現在用的是黑金ALINX822 FPGA視頻處理開發平臺。我想做的是接入一路AV視頻,取該視頻流的第一幀作為背景,其后的每一幀都和該幀做差
    發表于 04-15 10:55

    基于DSP和FPGA的通用圖像處理平臺設計

    設計一種基于DSP和FPGA架構的通用圖像處理平臺,運用FPGA實現
    發表于 12-25 17:06 ?61次下載

    基于DSP和FPGA的通用圖像處理平臺設計

    基于DSP和FPGA的通用圖像處理平臺設計 摘要:設計一種基于DSP和FPGA架構的通用圖像
    發表于 02-01 11:10 ?1573次閱讀
    基于DSP和<b class='flag-5'>FPGA</b>的通用<b class='flag-5'>圖像</b><b class='flag-5'>處理</b><b class='flag-5'>平臺</b>設計

    Adam Taylor玩轉MicroZed系列第80部分

    Adam Taylor玩轉MicroZed系列的前期部分中,我們介紹了IP棧的概念。(見Adam Taylor玩轉MicroZed
    發表于 01-13 11:17 ?1279次閱讀
    <b class='flag-5'>Adam</b> <b class='flag-5'>Taylor</b>玩轉MicroZed<b class='flag-5'>系列</b>第80部分

    Adam Taylor玩轉MicroZed系列,第79部分

    By Adam Taylor 在本系列博客的前兩部分中,我們研究了帶有Zynq SoC PS(處理器系統)的以太網MAC(介質訪問控制層),包括深入探討了一個MAC使用范例。以太網MA
    發表于 01-13 11:24 ?898次閱讀

    有哪些小技巧可以改進圖像處理開發

    Adam Taylor討論了使用Zynq?和Zynq UltraScale +?SoC開發圖像處理應用程序時學到的一些技巧
    的頭像 發表于 11-30 06:37 ?2364次閱讀

    ALINX VERSAL SOM產品介紹

    近日,2024 AMD Adaptive Computing Summit(AMD ACS)在深圳舉行,芯驛電子應邀出席作主題分享:《ALINX 基于 Versal
    的頭像 發表于 08-05 10:33 ?1056次閱讀

    ALINX FPGA+GPU異架構視頻圖像處理開發平臺介紹

    Alinx 最新發布的新品 Z19-M 是一款創新的 FPGA+GPU 異構架構視頻圖像處理開發平臺
    的頭像 發表于 08-29 14:43 ?1911次閱讀

    AMD推出第二代Versal Premium系列

    近日,AMD(超威,納斯達克股票代碼:AMD )今日宣布推出第二代 AMD Versal Premium 系列,這款自適應 SoC
    的頭像 發表于 11-13 09:27 ?789次閱讀

    ALINX 發布 AXVU13P:AMD Virtex UltraScale+ 高端 FPGA PCle 3.0 綜合開發平臺

    ALINX 正式發布 AMD Virtex UltraScale+ 系列 FPGA PCIe 3.0 綜合開發
    的頭像 發表于 12-20 16:46 ?738次閱讀
    <b class='flag-5'>ALINX</b> 發布 AXVU13P:<b class='flag-5'>AMD</b> Virtex UltraScale+ 高端 <b class='flag-5'>FPGA</b> PCle 3.0 綜合<b class='flag-5'>開發</b><b class='flag-5'>平臺</b>

    面向AI與機器學習應用的開發平臺 AMD/Xilinx Versal? AI Edge VEK280

    AMD/Xilinx Versal? AI Edge VEK280評估套件是一款面向AI與機器學習應用的開發平臺,專為邊緣計算場景優化設計。以下從核心配置、技術特性、應用場景及
    的頭像 發表于 04-11 18:33 ?1070次閱讀
    面向AI與機器學習應用的<b class='flag-5'>開發</b><b class='flag-5'>平臺</b> <b class='flag-5'>AMD</b>/Xilinx <b class='flag-5'>Versal</b>? AI Edge VEK280