【盤古100Pro+開發板實驗例程】FPGA學習 | HDMI 回環實驗

本原創文章由深圳市小眼睛科技有限公司創作,版權歸本公司所有,如需轉載,需授權并注明出處(www.meyesemi.com)

1. 實驗簡介

實驗目的:

? ? ??完成 HDMI 回環實驗

實驗環境:

? ? ? Window11

? ? ? PDS2022.2-SP6.4

硬件環境:

? ? ??MES2L676-100HP

2. 實驗原理

? ? ??HDMI 輸入接口采用宏晶微 MS7200 HMDI 接收芯片,HDMI 輸出接口采用宏晶微 MS7210 HMDI 發送芯片。 芯片兼容 HDMI1.4b 及以下標準視頻的 3D 傳輸格式,最高分辨率高達 4K@30Hz,最高采樣率達到 300MHz, 支持 YUV 和 RGB 之間的色彩空間轉換,數字接口支持 YUV 及 RGB 格式。

? ? ??MS7200 和 MS7210 的 IIC 配置接口與 FPGA 的 IO 相連,通過 FPGA 的編程來對芯片進行初始化和配置操作。

? ? ??MES2L100HP 開發板上將 MS7200 的 SA 管腳下拉到地,故 IIC 的 ID 地址為 0x56,將 MS7210 的 SA 管腳 上拉到電源電壓,故 IIC 的 ID 地址為 0xB2。

2.1. 顯示原理

? ? ??下圖表示一個 8*8 像素的畫面,圖中每個格子表示一個像素點,顯示圖像時像素點快速點亮的過程按表格中 編號的順序逐個點亮,從左到右,從上到下,按圖中箭頭方向的“Z”字形順序。

?

? ? ??以上圖為例,每行 8 個像素點,每完成一行信號的傳輸,會轉到下一行信號傳輸,直到完成第 8 行數據的傳輸, 就完成了一個畫面的數據傳輸了,一個畫面也稱為一場或一幀,顯示每秒中刷新的幀數稱為幀率。比如 1920*1080P 像素,就是 1 行有效像素點 1920,一場有效行為 1080 行。

? ? ??每個像素點的像素值數據,對應每個像素點的顏色。常見的像素值表示格式比如:RGB888,RGB 分別代表: 紅 R,綠 G,藍 B,888 是指 R、G、B 分別有 8bit,也就是 R、G、B 每一色光有 28=256 級階調,通過 RGB 三色光的 不同組合,一個像素上最多可顯示 24 位的 256*256*256 =16,777,216 色。

? ? ??HDMI 顯示的數據源采用 verilog 編寫的顯示時序產生模塊 sync_vg 實現上圖的時序,彩條生成模塊 pattern_vg 根據像素點所在位置,即列數和行數確定像素值,實現彩條圖案。

2.2. HDMI_PHY 配置

? ? ??MS7200 為 HMDI 接收芯片,MS7210 為 HMDI 發送芯片,芯片的 IIC 配置接口已與 FPGA 的 IO 相連,芯片 正常使用需要通過 FPGA 的對芯片進行初始化和配置操作。寄存器配置切忌修改。具體配置可以參考 demo。

3. 接口列表

頂層模塊接口如下所示:

4. 工程說明

? ? ??系統時鐘 sys_clk 通過 pll 鎖相環 IP 分出 cfg_clk 給到 ms72xx_ctl 模塊,該模塊通過 IIC 配置 MS7200 與 MS7210 芯片。HDMI 輸入的數據經過 MS7200 芯片解碼后轉成標準 RGB 格式的數據輸入到 FPGA 中。再將該數 據輸出到 MS7210 芯片。MS7210 將 RGB 格式的數據編碼成 TMDS 信號對外輸出。

5. 代碼模塊說明

Ms72xx_ctl.v 模塊

module ms72xx_ctl(input clk,input rst_n,output init_over,output iic_tx_scl,inout iic_tx_sda,output iic_scl,inout iic_sda
);reg rstn_temp1, rstn_temp2;reg rstn;always @(posedge clk or negedge rst_n) beginif (!rst_n)rstn_temp1 <= 1'b0;elserstn_temp1 <= rst_n;endalways @(posedge clk) beginrstn_temp2 <= rstn_temp1;rstn <= rstn_temp2;endwire init_over_rx;wire [7:0] device_id_rx;wire iic_trig_rx;wire w_r_rx;wire [15:0] addr_rx /*synthesis PAP_MARK_DEBUG="true"*/;wire [7:0] data_in_rx;wire busy_rx;wire [7:0] data_out_rx;wire byte_over_rx;wire [7:0] device_id_tx;wire iic_trig_tx;wire w_r_tx;wire [15:0] addr_tx /*synthesis PAP_MARK_DEBUG="true"*/;wire [7:0] data_in_tx;wire busy_tx;wire [7:0] data_out_tx;wire byte_over_tx;ms7200_ctl ms7200_ctl(.clk      (clk),           // input.rstn     (rstn),          // input.init_over(init_over_rx),  // output reg.device_id(device_id_rx),  // output [7:0].iic_trig (iic_trig_rx),   // output reg.w_r      (w_r_rx),       // output reg.addr     (addr_rx),       // output reg [15:0].data_in  (data_in_rx),    // output reg [7:0].busy     (busy_rx),       // input.data_out (data_out_rx),   // input [7:0].byte_over(byte_over_rx)   // input);ms7210_ctl ms7210_ctl(.clk      (clk),           // input.rstn     (init_over_rx),  // input.init_over(init_over),     // output reg.device_id(device_id_tx), // output [7:0].iic_trig (iic_trig_tx),  // output reg.w_r      (w_r_tx),       // output reg.addr     (addr_tx),      // output reg [15:0].data_in  (data_in_tx),   // output reg [7:0].busy     (busy_tx),      // input.data_out (data_out_tx),  // input [7:0].byte_over(byte_over_tx)  // input);wire sda_in     /*synthesis PAP_MARK_DEBUG="true"*/;wire sda_out    /*synthesis PAP_MARK_DEBUG="true"*/;wire sda_out_en /*synthesis PAP_MARK_DEBUG="true"*/;iic_dri #(.CLK_FRE    (27'd10_000_000),  // system clock frequency.IIC_FREQ   (20'd400_000),     // I2c clock frequency.T_WR       (10'd1),           // I2c transmit delay ms.ADDR_BYTE  (2'd2),            // I2C addr byte number.LEN_WIDTH  (8'd3),            // I2C transmit byte width.DATA_BYTE  (2'd1)             // I2C data byte number) iic_dri_rx (.clk        (clk),.rstn       (rstn),.device_id  (device_id_rx),.pluse      (iic_trig_rx),     // I2C transmit trigger.w_r        (w_r_rx),         // I2C transmit direction 1:send 0:receive.byte_len   (4'd1),            // I2C transmit data byte length.addr       (addr_rx),         // I2C transmit addr.data_in    (data_in_rx),      // I2C send data.busy       (busy_rx),         // I2C bus status.byte_over  (byte_over_rx),    // I2C byte transmit over flag.data_out   (data_out_rx),     // I2C receive data.scl        (iic_scl),.sda_in     (sda_in),.sda_out    (sda_out),.sda_out_en (sda_out_en));assign iic_sda = sda_out_en ? sda_out : 1'bz;assign sda_in = iic_sda;wire sda_tx_in     /*synthesis PAP_MARK_DEBUG="true"*/;wire sda_tx_out    /*synthesis PAP_MARK_DEBUG="true"*/;wire sda_tx_out_en /*synthesis PAP_MARK_DEBUG="true"*/;iic_dri #(.CLK_FRE    (27'd10_000_000),  // system clock frequency.IIC_FREQ   (20'd400_000),     // I2c clock frequency.T_WR       (10'd1),           // I2c transmit delay ms.ADDR_BYTE  (2'd2),            // I2C addr byte number.LEN_WIDTH  (8'd3),            // I2C transmit byte width.DATA_BYTE  (2'd1)             // I2C data byte number) iic_dri_tx (.clk        (clk),.rstn       (rstn),.device_id  (device_id_tx),.pluse      (iic_trig_tx),     // I2C transmit trigger.w_r        (w_r_tx),          // I2C transmit direction 1:send 0:receive.byte_len   (4'd1),            // I2C transmit data byte length.addr       (addr_tx),         // I2C transmit addr.data_in    (data_in_tx),      // I2C send data.busy       (busy_tx),         // I2C bus status.byte_over  (byte_over_tx),    // I2C byte transmit over flag.data_out   (data_out_tx),     // I2C receive data.scl        (iic_tx_scl),.sda_in     (sda_tx_in),.sda_out    (sda_tx_out),.sda_out_en (sda_tx_out_en));assign iic_tx_sda = sda_tx_out_en ? sda_tx_out : 1'bz;assign sda_tx_in = iic_tx_sda;endmodule

? ? ??該模塊主要完成對 ms7210 和 ms7200 芯片的 IIC 配置。具體代碼不詳細分析,按照 IIC 協議去完成即可, 然后就是配置 ms7210 和 ms7200 的寄存器即可。以下給出 IIC 協議的時序說明,如下圖所示:

? ? ??當 SDA 和 SCL 都處于高電平時,表示空閑狀態,因此在硬件設計時其實也要通過上拉電阻將信號拉高,表示 空閑。當 SCL 保持高電平時,SDA 拉低時表示 IIC 總線啟動,標志一次數據傳輸的開始,在開始前,IIC 總線必須處 于空閑狀態。在數據傳輸過程中,SDA 上逐位串行傳輸每一位數據,在 SCL 高電平期間,SDA 必須保持穩定。當 SCL 為低電平時,SDA 才允許改變。

? ? ??IIC 總線每次傳輸一個字節,也就是傳輸 8 個 bit,每 8bit 后要收到一個來自接收方反饋的 ACK(應答信號), 該應答信號為高電平時,表示接收方接收字節失敗。為低電平時,表示有效。之后,在 SCL 高電平期間,SDA 重新 拉高,則表示傳輸結束,IIC 總線回到空閑狀態。

6. 實驗現象

連接好 MES2L100HP 開發板、視頻源和顯示器;

? ? ? 注意視頻源必須為 1920*1080P@60,下圖為設置分辨率步驟,下載程序,可以看到顯示器顯示與視頻源一致的圖像。

? ? ? 上圖為 FPGA 的 HDMI_OUT 輸出的圖像。

? ? ? 注意事項:

? ? ? 需要插上 HDMI 接口,板子上電時才會對 HDMI 芯片進行配置,否則將配置失敗。

? ? ? 我們對 HDMI 芯片配置時使用的是 RGB888 協議,如果視頻源的顏色格式不是 RGB888,會出現一些問題。 如上圖,視頻源的顏色格式是 YCbCr444,回環實驗中,在顯示器上顯示視頻源的畫面,顯示器上的畫面顏色會偏綠。

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

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

相關文章

鴻蒙系統PC安裝指南

鴻蒙系統PC安裝指南一、安裝DevEco Studio集成開發環境二、下載鴻蒙系統PC三、啟動鴻蒙系統及使用一、安裝DevEco Studio集成開發環境首先訪問華為官網上&#xff0c;注冊并登錄華為賬號&#xff0c;以開始下載所需的軟件。若尚未注冊&#xff0c;請先注冊一個。在官網頁面中&a…

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集 前言 準備工作 第一部分:后端實現 - `allpairspy` API 1. 創建 `allpairspy` 服務 2. 創建 `allpairspy` API 視圖 3. 注冊 API 路由 第二部分:前端實現 - `Allpairspy` 工具界面 1. 創建 API 服務 (`s…

ZooKeeper 深度實踐:從原理到 Spring Boot 全棧落地

在 Kubernetes 為主流注冊發現的今天&#xff0c;給出如何在 Spring Boot 中基于 ZooKeeper 實現服務注冊/發現、分布式鎖、配置中心以及集群協調的完整代碼與最佳實踐。所有示例均可直接復制運行。 1. ZooKeeper 架構與核心原理 1.1 角色 Leader&#xff1a;處理寫請求&…

可驗證隨機函數-VRF

可驗證隨機函數&#xff08;Verifiable Random Function, VRF&#xff09;是一種結合密碼學技術的偽隨機數生成器&#xff0c;其核心特點是生成的隨機數可被公開驗證&#xff0c;且具有不可預測性和唯一性。以下是VRF的詳細解析&#xff1a;1. 基本定義與核心特性 可驗證性&…

極客大挑戰2020(部分wp)

Roamphp1-Welcome 405請求方法不允許&#xff0c;改一下請求方法 數組繞過&#xff0c;在頁面搜索flag即可&#xff01;本題&#xff1a;就是知道了405是請求方法不允許&#xff01; Roamphp2-Myblog&#xff08;zip協議加文件包含&#xff09; 首先進來就是一個博客頁面&…

ESP32 外設驅動開發指南 (ESP-IDF框架)——GPIO篇:基礎配置、外部中斷與PWM(LEDC模塊)應用

目錄 一、前言 二、GPIO 2.1 GPIO簡介 2.2 GPIO函數解析 2.3 LED驅動 2.4 KEY驅動 三、EXIT 3.1 EXIT簡介 3.2 EXIT函數解析 3.3 EXIT驅動 四、LEDC 4.1 PWM原理解析 4.2 ESP32的LED PWM控制器介紹 4.3 LEDC函數解析 4.3.1 SW_PWM 4.3.2 HW_PWM 4.4 LEDC驅動 …

鴻蒙 ArkWeb 加載優化方案詳解(2025 最佳實踐)

適用平臺&#xff1a;HarmonyOS NEXT / API 10 關鍵詞&#xff1a;ArkWeb、WebviewController、NodeController、預加載、預連接、預渲染、性能優化一、前言&#xff1a;為什么必須優化 ArkWeb 加載&#xff1f;在鴻蒙生態中&#xff0c;ArkWeb 是系統級的 Web 容器引擎&#x…

JavaScript案例(乘法答題游戲)

項目概述 使用原生JavaScript實現一個乘法答題游戲&#xff0c;隨機生成乘法題目&#xff0c;判斷答案正誤并記錄分數&#xff0c;通過localStorage實現分數持久化存儲。 核心功能需求 隨機題目生成&#xff1a;動態生成1-10之間的乘法題答題交互&#xff1a;輸入答案并提交…

EXCEL刪除數據透視表

wps版 點擊紅框內任意區域 在頂部工具欄選擇刪除Excel 版 1.點擊紅框內任意區域2. 點擊Enable Selection,再按住鍵盤上的Delete鍵&#xff0c;記住不是Backspace鍵

Python 飛機大戰:從零開發經典 2D 射擊游戲

引言&#xff1a;重溫經典游戲開發 飛機大戰作為經典的 2D 射擊游戲&#xff0c;承載了許多人的童年回憶。使用 Python 和 Pygame 開發這樣一款游戲不僅能重溫經典&#xff0c;更是學習游戲開發絕佳的實踐項目。本文將帶你從零開始&#xff0c;一步步實現一個完整的飛機大戰游…

Vue項目中實現瀏覽器串口通信:Web Serial API完整指南

前言 在現代Web開發中&#xff0c;隨著IoT設備和硬件交互需求的增長&#xff0c;瀏覽器與串口設備的通信變得越來越重要。本文將詳細介紹如何在Vue項目中使用Web Serial API實現串口通信功能&#xff0c;為開發者提供一個完整的解決方案。 技術背景 傳統方案的局限性 傳統的串口…

Github怎么只下載某個目錄文件?(Git稀疏檢出、GitZip for Github插件、在線工具DownGit)Github下載目錄

文章目錄**方法一&#xff1a;使用 Git 的稀疏檢出&#xff08;Sparse Checkout&#xff09;**&#xff08;略&#xff09;**步驟&#xff1a;****方法二&#xff1a;使用 SVN 下載特定目錄**&#xff08;略&#xff09;**步驟&#xff1a;****方法三&#xff1a;使用瀏覽器插件…

把“多視圖融合、深度傳感”組合在一起,今天分享3篇3D傳感技術干貨

關注gongzhonghao【計算機sci論文精選】3D傳感技術起源于工業領域高精度測量需求&#xff0c;早期以激光三角測量、結構光等技術為主&#xff0c;主要服務于制造業的零部件檢測與形變分析。隨著消費電子智能化升級&#xff0c;蘋果iPhone X的Face ID將結構光技術推向大眾市場&a…

dubbo源碼之消費端啟動的高性能優化方案

一、序言 dubbo作為一款最流行的服務治理框架之一,在底層做了很多的優化,比如消費端在啟動的時候做了很多性能提升的設計,接下來從連接的層面、序列化功能的層面進行介紹下。 二、優化點 1、消費端在服務啟動的時候會調用DubboProtocol類的protocolBindingRefer方法來創建…

zookeeper常見命令和常見應用

前言 ZooKeeper自帶一個交互式命令行工具&#xff08;通過zkCli.sh或zkCli.cmd啟動&#xff09;&#xff0c;提供了一系列操作ZooKeeper數據節點的命令 下面我們對zookeeper常用命令進行介紹 使用prettyZoo命令行窗口 使用prettyZoo客戶端鏈接zookeeper 打開zookeeper命令…

前端異步任務處理總結

一、異步任務常見場景網絡請求&#xff1a;fetch()、axios 等 API 調用定時操作&#xff1a;setTimeout、setInterval用戶交互&#xff1a;事件監聽回調資源加載&#xff1a;圖片/腳本動態加載Web Workers&#xff1a;后臺線程計算二、核心處理方案1. Promise&#xff08;ES6&a…

機器學習第三課之邏輯回歸(二)LogisticRegression

目錄 簡介 一.分類評估?法 1.混淆矩陣 2.精確率(Precision)與召回率(Recall) 3.F1-score 4.分類評估報告api 2.正則化懲罰 3.?擬合和過擬合 4.K折交叉驗證 5.代碼分析 簡介 接上一篇博客最后 機器學習第二課之邏輯回歸&#xff08;一&#xff09;LogisticRegres…

基于ELK Stack的實時日志分析與智能告警實踐指南

基于ELK Stack的實時日志分析與智能告警實踐指南 一、業務場景描述 在生產環境中&#xff0c;服務實例數量眾多&#xff0c;日志量激增&#xff0c;傳統的文本 grep 或 SSH 登錄方式已無法滿足實時監控與故障定位需求。我們需要搭建一個可擴展、低延遲的日志收集與分析平臺&…

需求變更過程中出現的團隊資源沖突問題處理的一些小技巧

??一、資源沖突的典型場景?? ??技術資源爭奪??:多個需求同時需要同一開發人員或技術專家支持 ??人力資源過載??:突發需求導致團隊成員工作量超負荷(如同時處理3個緊急需求) ??設備/環境沖突??:測試服務器資源不足或特定開發工具許可證被占用 ??跨團隊協…

基于Matlab圖像處理的液晶顯示器表面缺陷檢測與分類研究

本課題設計并實現了一種基于 MATLAB 的圖像缺陷檢測系統&#xff0c;系統集成中值濾波、對比度增強、梯度檢測與區域分析等圖像處理技術&#xff0c;能夠對圖像中的點狀、線狀和塊狀缺陷進行有效識別與分類。用戶可通過圖形用戶界面&#xff08;GUI&#xff09;導入待測圖像&am…