在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    21944

    瀏覽量

    613423
  • amd
    amd
    +關注

    關注

    25

    文章

    5555

    瀏覽量

    135766
  • 圖像處理
    +關注

    關注

    27

    文章

    1324

    瀏覽量

    57643
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    AMD Versal AI Edge 自適應計算加速平臺之準備工作,包含軟件環境、硬件環境。
    的頭像 發表于 03-07 15:49 ?1069次閱讀
    【<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 ?1520次閱讀
    【<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 ?1920次閱讀
    在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 ?287次閱讀
    使用<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 ?1572次閱讀
    基于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 ?1274次閱讀
    <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 ?896次閱讀

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

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

    ALINX VERSAL SOM產品介紹

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

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

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

    AMD推出第二代Versal Premium系列

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

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

    ALINX 正式發布 AMD Virtex UltraScale+ 系列 FPGA PCIe 3.0 綜合開發
    的頭像 發表于 12-20 16:46 ?702次閱讀
    <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 ?982次閱讀
    面向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
    主站蜘蛛池模板: 亚洲精品久久婷婷爱久久婷婷 | 国产区一区二区三 | 狠狠做深爱婷婷综合一区 | 午夜视频免费在线 | 在线免费看高清视频大全 | 五月婷丁香 | 久久久一本波多野结衣 | 一级待一黄aaa大片在线还看 | 国产特黄一级毛片特黄 | 狠狠插狠狠操 | 四虎音影| 天天舔日日干 | 久色国产 | 中文字幕一区二区三区在线观看 | 中国日韩欧美中文日韩欧美色 | 天天射天天爱天天干 | 日本精品高清一区二区2021 | 国产三级在线观看免费 | 色播在线永久免费视频网站 | 国模私拍视频在线 | 精品国产午夜久久久久九九 | 色综合视频在线观看 | 国产午夜精品理论片免费观看 | 国产欧美网站 | 日韩xx00| 天天草夜夜草 | 黄 色 免 费 网站在线观看 | 老师你好滑下面好湿h | 天天上天天干 | 色爽视频 | 亚洲精品mv在线观看 | 久久久久久久影院 | 美女拍拍拍免费视频观看 | 视频一区亚洲 | 午夜免费小视频 | 黄色在线看网站 | 天天av天天翘天天综合网 | 色综合久久五月 | 亚洲狠狠操 | 国产69精品久久久久9999 | 国产牛仔裤系列在线观看 |