【盘古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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…