[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-25 RGB转HDMI显示方案

本文主要是介绍[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-25 RGB转HDMI显示方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件版本:VIVADO2021.1

操作系统:WIN10 64bit

硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA

实验平台:米联客-MLK-H3-CZ08-7100开发板

板卡获取平台:https://milianke.tmall.com/

登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

目录

1概述

2系统框图

3顶层调用接口源码

3.1 PLL时钟设置

3.2 VTC参数设置

3.3 HDMI输出IP

4 FPGA工程

5下载演示

5.1硬件连接

5.2运行结果


1概述

本实验通过FPGA内部资源实现HDMI协议,使用HDMI直接驱动HDMI接口显示器,这是成本非常低廉的一种方案,可以实现HDMI输出1080P@60fps的视频图像。本实验需要用到前面课程中的VTC模块产生视频时序,以及TPG模块产生测试图形。关于VTC视频时序参数的设置,读者可以阅读前面VTC相关的课程内容。

2系统框图

3顶层调用接口源码

关于VTC ip 和TPG ip的源码在前文中已经给出,这里我们主要看下顶层调用接口以及PLL部分设置。

/*************HDMI 视频输出测试*************
--版本号1.1
--使用VTC产生视频时序
--使用TPG产生测试图像数据
--使用HDMI输出IP,把RGB数据转为HDMI数据输出
*********************************************************************/
`timescale 1ns / 1ns //仿真时间刻度/精度module display
(
input  I_sysclk_p,
input  I_sysclk_n,       //系统时钟输入
output O_hdmi_clk_p,     //HDMI输出时钟P端
output O_hdmi_clk_n,     //HDMI输出时钟N端
output [2:0]O_hdmi_tx_p, //HDMI输出数据P端
output [2:0]O_hdmi_tx_n  //HDMI输出数据N端
);wire I_clk;
IBUFGDS CLK_U(
.I(I_sysclk_p),
.IB(I_sysclk_n),
.O(I_clk)
);wire vtc_rst,vtc_clk,vtc_vs,vtc_hs,vtc_de;//vid 视频相关信号
wire pclkx1,pclkx5,locked;//HDMI输出需要2个时钟,pclkx1是和内部视频同步的时钟,pclkx5是HDMI IP内部用于产生输出数据和输出时钟
wire [7 :0] rgb_r ,rgb_g ,rgb_b;// 定义寄存器保存图像的颜色数据
assign vtc_clk = pclkx1; // 内部像素时钟
assign vtc_rstn = locked; //用PLL 的LOCK信号复位//MMCM/PLL时钟管理IP 输出 pclkx1和pclkx5以及locked信号
clk_wiz_0 clk_wiz0_inst(.clk_out1(pclkx1),.clk_out2(pclkx5),.locked(locked),.clk_in1(I_clk)); //例化HDMI输出IP,把TPG产生的测试图像经过HDMI输出
uihdmitx #
(
.FAMILY("7FAMILY")  //选择芯片所支持的系列"7FAMILY" "UFAMILY"     
)
uihdmitx_inst
(
.I_rstn(locked),//复位
.I_hs(vtc_hs), //hs信号
.I_vs(vtc_vs), //vs信号
.I_de(vtc_de),//de信号
.I_rgb({rgb_r,rgb_g,rgb_b}), //RGB数据
.I_pclkx1(pclkx1), //像素时钟
.I_pclkx2_5(1'b0), //2.5倍像素时钟,只有UFAMILY需要
.I_pclkx5(pclkx5), //5倍像素时钟
.O_hdmi_tx_clk_p(O_hdmi_clk_p), //HDMI时钟输出P端
.O_hdmi_tx_clk_n(O_hdmi_clk_n), //HDMI时钟输出N端
.O_hdmi_tx_p(O_hdmi_tx_p),      //HDMI输出数据P端
.O_hdmi_tx_n(O_hdmi_tx_n)       //HDMI输出数据N端
);uivtc#
(
.H_ActiveSize(1280),          //视频时间参数,行视频信号,一行有效(需要显示的部分)像素所占的时钟数,一个时钟对应一个有效像素
.H_FrameSize(1280+88+44+239), //视频时间参数,行视频信号,一行视频信号总计占用的时钟数
.H_SyncStart(1280+88),        //视频时间参数,行同步开始,即多少时钟数后开始产生行同步信号 
.H_SyncEnd(1280+88+44),       //视频时间参数,行同步结束,即多少时钟数后停止产生行同步信号,之后就是行有效数据部分
.V_ActiveSize(720),           //视频时间参数,场视频信号,一帧图像所占用的有效(需要显示的部分)行数量,通常说的视频分辨率即H_ActiveSize*V_ActiveSize
.V_FrameSize(720+4+5+28),     //视频时间参数,场视频信号,一帧视频信号总计占用的行数量
.V_SyncStart(720+4),          //视频时间参数,场同步开始,即多少行数后开始产生场同步信号 
.V_SyncEnd (720+4+5)       //视频时间参数,场同步结束,即多少行数后停止产生场同步信号,之后就是场有效数据部分
)
uivtc_inst
(
.I_vtc_clk(vtc_clk),  //系统时钟 
.I_vtc_rstn(vtc_rstn),//系统复位
.O_vtc_vs(vtc_vs),    //场同步输出
.O_vtc_hs(vtc_hs),    //行同步输出
.O_vtc_de_valid(vtc_de),      //视频数据有效
.O_vtc_user(),     //满足stream时序产生 user 信号,用于帧同步
.O_vtc_last()      //满足stream时序产生 later 信号,用于每行结束
);uitpg uitpg_inst    
(
.I_tpg_clk(vtc_clk),   //系统时钟
.I_tpg_rstn(vtc_rstn), //系统复位
.I_tpg_vs(vtc_vs),     //图像的vs信号
.I_tpg_hs(vtc_hs),     //图像的hs信号 
.I_tpg_de(vtc_de),     //de数据有效信号
.O_tpg_vs(),//和vtc_vs信号一样
.O_tpg_hs(),//和vtc_hs信号一样
.O_tpg_de(),//和vtc_de信号一样       
.O_tpg_data({rgb_r,rgb_g,rgb_b})//测试图像数据输出          
);endmodule

以上源码中,关键有2个地方需要设置好

3.1 PLL时钟设置

对于PLL的设置需要产生1:5的时钟,对于演示demo中720P的设置如下:

3.2 VTC参数设置

关于VTC参数设置具体阅读前面课程video timing controller相关内容,这里针对75M的PCLK参数如下:

.H_ActiveSize(1280), 
.H_FrameSize(1280+88+44+239), 
.H_SyncStart(1280+88), 
.H_SyncEnd(1280+88+44),
.V_ActiveSize(720),
.V_FrameSize(720+4+5+28), 
.V_SyncStart(720+4),
.V_SyncEnd (720+4+5) 

3.3 HDMI输出IP

为了能够输出测试图像,需要调用HDMI IP,这个IP是开源的。由于本文不计划对HDMI IP进行分析,这里只给出调用方法。

在参数接口中,输入”7FAMILY”代表支持7系列的FPGA,如果输入”UFAMILY”代表支持ultrascale或者ultrascale+的FPGA.

PCLKX1_i代表像素时钟;

PCLKX2_5_i代表2.5倍的像素时钟,这个时钟仅在使用ultrascale或者ultrascale+的FPGA.的时候需要配置;

PCLKX5_i代表5倍的像素时钟;

//例化HDMI输出IP,把TPG产生的测试图像经过HDMI输出
uihdmitx #
(
.FAMILY("7FAMILY")  //选择芯片所支持的系列"7FAMILY" "UFAMILY"     
)
uihdmitx_inst
(
.I_rstn(locked),//复位
.I_hs(vtc_hs), //hs信号
.I_vs(vtc_vs), //vs信号
.I_de(vtc_de),//de信号
.I_rgb({rgb_r,rgb_g,rgb_b}), //RGB数据
.I_pclkx1(pclkx1), //像素时钟
.I_pclkx2_5(1'b0), //2.5倍像素时钟,只有UFAMILY需要
.I_pclkx5(pclkx5), //5倍像素时钟
.O_hdmi_tx_clk_p(O_hdmi_clk_p), //HDMI时钟输出P端
.O_hdmi_tx_clk_n(O_hdmi_clk_n), //HDMI时钟输出N端
.O_hdmi_tx_p(O_hdmi_tx_p),      //HDMI输出数据P端
.O_hdmi_tx_n(O_hdmi_tx_n)       //HDMI输出数据N端
);
dmi_tx_n(O_hdmi_tx_n)       //HDMI输出数据N端
);

4 FPGA工程

fpga工程的创建过程不再重复,如有不清楚的请看前面实验

米联客的代码管理规范,在对应的FPGA工程路径下创建uisrc路径,并且创建以下文件夹

01_rtl:放用户编写的rtl代码

02_sim:仿真文件或者工程

03_ip:放使用到的ip文件

04_pin:放fpga的pin脚约束文件或者时序约束文件

05_boot:放编译好的bit或者bin文件(一般为空)

06_doc:放本一些相关文档(一般为空)

5下载演示

下载程序前,先确保FPGA工程已经编译好。

5.1硬件连接

(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)

请确保下载器和开发板已经正确连接,另外需要把核心板上的2P模式开关设置到JTAG模式,即ON ON,并且开发板已经上电。(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

5.2运行结果

显示器循环输出测试图形

这篇关于[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-25 RGB转HDMI显示方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130999

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.