您当前的位置: 首页 >  fpga开发

正点原子

暂无认证

  • 0浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子FPGA连载】第二十五章HDMI方块移动实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

正点原子 发布时间:2021-11-03 10:48:35 ,浏览量:0

1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对正点原子FPGA感兴趣的同学可以加群讨论:994244016 4)关注正点原子公众号,获取最新资料更新 在这里插入图片描述

第二十五章HDMI方块移动实验

在HDMI彩条显示实验中,我们成功地在显示器上显示出了静态的彩条图案。本章我们通过在屏幕上显示一个移动的小方块,来给大家演示如何使用HDMI接口显示动态图案。 本章包括以下几个部分: 232424.1简介 24.2实验任务 24.3硬件设计 24.4程序设计 24.5下载验证

25.1简介 我们在“HDMI彩条显示实验”中对HDMI视频传输标准作了详细的介绍,包括HDMI接口定义、行场同步时序、以及显示分辨率等。如果大家对这部分内容不是很熟悉的话,请参考“HDMI彩条显示实验”中的HDMI简介部分。 25.2实验任务 本章的实验任务是驱动新起点开发板上的HDMI接口,在显示器上显示一个不停移动的方块,要求方块移动到边界处时能够改变移动方向。显示分辨率为1280*720,刷新速率为60hz。 25.3硬件设计 HDMI接口部分的硬件设计原理及本实验中各端口信号的管脚分配与“HDMI彩条显示实验”完全相同,请参考“HDMI彩条显示实验”中的硬件设计部分。 25.4程序设计 图 24.4.1是根据本章实验任务画出的系统框图,本次实验的系统框图和“HDMI彩条显示实验”一致,如下图所示: 在这里插入图片描述

图 25.4.1 系统框图 本次实验和“HDMI彩条显示实验”相比,只是修改了视频显示模块,而其它模块完全一致,因此本章只介绍视频显示模块。在“HDMI彩条显示实验”中,我们利用视频驱动模块输出的像素点的横坐标,在视频显示模块中完成了彩条图案的绘制。而在本次实验中,为了完成方块的显示,需要同时使用像素点的横坐标和纵坐标来绘制方块所在的矩形区域,另外还需要知道矩形区域左上角的顶点坐标。由于视频显示的图像在行场同步信号的同步下不停的刷新,因此只要连续改变方块左上角顶点的坐标,并在新的坐标点处重新绘制方块,即可实现方块移动的效果。

视频显示模块代码如下:
1   module  video_display(
2       input             pixel_clk,                //驱动时钟
3       input             sys_rst_n,                //复位信号
4       
5       input      [10:0] pixel_xpos,               //像素点横坐标
6       input      [10:0] pixel_ypos,               //像素点纵坐标    
7       output reg [23:0] pixel_data                //像素点数据
8       );    
9   
10  //parameter define    
11  parameter  H_DISP  = 11'd1280;                  //分辨率--行
12  parameter  V_DISP  = 11'd720;                   //分辨率--列
13  
14  localparam SIDE_W  = 11'd40;                    //屏幕边框宽度
15  localparam BLOCK_W = 11'd40;                    //方块宽度
16  localparam BLUE    = 24'b00000000_00000000_11111111;    //屏幕边框颜色 蓝色
17  localparam WHITE   = 24'b11111111_11111111_11111111;    //背景颜色 白色
18  localparam BLACK   = 24'b00000000_00000000_00000000;    //方块颜色 黑色
19  
20  //reg define
21  reg [10:0] block_x = SIDE_W ;                             //方块左上角横坐标
22  reg [10:0] block_y = SIDE_W ;                             //方块左上角纵坐标
23  reg [21:0] div_cnt;                             //时钟分频计数器
24  reg        h_direct;                            //方块水平移动方向,1:右移,0:左移
25  reg        v_direct;                            //方块竖直移动方向,1:向下,0:向上
26  
27  //wire define   
28  wire move_en;                                   //方块移动使能信号,频率为100hz
29  
30  //*****************************************************
31  //**                    main code
32  //*****************************************************
33  assign move_en = (div_cnt == 22'd742500) ? 1'b1 : 1'b0;
34  
35  //通过对vga驱动时钟计数,实现时钟分频
36  always @(posedge pixel_clk ) begin         
37      if (!sys_rst_n)
38          div_cnt             
关注
打赏
1665308814
查看更多评论
0.0432s