本帖最后由 正点原子运营 于 2023-11-24 18:07 编辑
1)实验平台:正点原子 ATK-DFPGL22G开发板
2) 章节摘自【正点原子】ATK-DFPGL22G之FPGA开发指南_V1.0
6)FPGA技术交流QQ群:435699340
在HDMI彩条显示实验中,我们成功地在显示器上显示出了静态的彩条图案。本章我们通过在屏幕上显示一个移动的小方块,来给大家演示如何使用HDMI接口显示动态图案。
1.1 简介 我们在“HDMI彩条显示实验”中对HDMI视频传输标准作了详细的介绍,包括HDMI接口定义、行场同步时序、以及显示分辨率等。如果大家对这部分内容不是很熟悉的话,请参考“HDMI彩条显示实验”中的简介部分。
1.2 实验任务 本章的实验任务是使用ATK-DFPGL22G开发板上的HDMI接口在显示器上显示一个不停移动的方块,要求方块移动到边界处时能够改变移动方向。显示分辨率为1280*720,刷新速率为60hz。
1.3 硬件设计 HDMI接口部分的硬件设计原理及本实验中各端口信号的管脚分配与“HDMI彩条显示实验”完全相同,请参考“HDMI彩条显示实验”中的硬件设计部分。
1.4 程序设计 图 25.4.1是根据本章实验任务画出的系统框图。其中,时钟生成IP核(pll_clk)生成1280*720分辨率所需的像素时钟75MHz、以及TMDS编码驱动IP核所需的像素时钟的5倍频率即75 * 5 = 375MHz。视屏驱动模块(video_driver)负责产生RGB时序,并输出来自RGB显示模块(video_display)的RGB数据。RGB数据被送入TMDS编码驱动模块(rgb2dvi_0)并最后输出到HDMI接口。 在“HDMI彩条显示实验”中,我们利用RGB驱动模块输出的像素点的横坐标,在RGB显示模块中完成了彩条图案的绘制。而在本次实验中,为了完成方块的显示,需要同时使用像素点的横坐标和纵坐标来绘制方块所在的矩形区域,另外还需要知道矩形区域左上角的顶点坐标。由于RGB显示的图像在行场同步信号的同步下不停的刷新,因此只要连续改变方块左上角顶点的坐标,并在新的坐标点处重新绘制方块,即可实现方块移动的效果。 图 25.4.2中的顶层模块(hdmi_block_move_top)、时钟分频IP核(pll_clk)、TMDS编码驱动模块(rgb2dvi_0)以及视频驱动模块(video_driver)均与“HDMI彩条显示实验”完全相同,只对视频显示模块(video _display)作了修改。因此,这里我们重点讲解视频显示模块,其他部分大家可以参考“HDMI彩条显示实验”。 代码中14至18行声明了一系列的参数,方便大家修改边框尺寸、方块大小、以及各部分的颜色等。其中边框尺寸和方块宽度均以像素点为单位。当方块的宽度确定时,如果我们知道方块左上方顶点的坐标,就能轻而易举的画出整个方块区域。因此,我们将方块的移动简化为其左上角顶点的移动。 由于像素时钟相对于方块移动速度而言过快,我们通过计数器对时钟计数,得到一个频率为100hz的脉冲信号move_en,用它作为使能信号来控制方块的移动(33~45行)。方块的移动方向分为水平方向h_direct和竖直方向v_direct,由代码的47至70行可知,当方块移动到上下边框时,竖直移动方向改变;当方块移动到左右边框时,水平移动方向改变。代码72至93行根据方块的移动方向,在使能信号move_en到来时改变其左上角顶点的纵横坐标值。当move_en的频率为100hz时,方块每秒钟在水平和竖直方向上分别移动100个像素点的距离,也可以通过调整move_en的频率,来加快或减慢方块移动的速度。 代码第95至110行根据RGB驱动模块输出的纵横坐标判断当前像素点所在的区域,对不同区域中的像素点赋以不同的颜色值,从而实现边框、方块以及背景颜色的绘制。
1.5 下载验证 编译工程并生成比特流.sbit文件。然后将HDMI电缆的一端与ATK-DFPGL22G开发板上HDMI插座相连接,另一端与显示器的HDMI接口相连接,如下图所示。 最后将下载器一端连电脑,另一端与开发板上的JTAG端口连接,连接电源线并打开电源开关。 接下来我们下载比特流.sbit文件,验证HDMI显示方块移动的功能。下载完成后观察显示器显示的图案如下图所示,图中的黑色方块能够不停的移动,且碰撞到蓝色边框时能改变移动方向,说明HDMI方块移动程序下载验证成功。 |