HDMI色块移动——FPGA学习笔记13

一、方块移动原理

二、实验任务

        使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块,要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480,刷新速率为90hz。(480p分辨率为800*480,像素时钟频率Vga_clk = 800x480x90 = 33264000 ≈33.3Mhz(误差忽略不计))

三、程序设计

1、video_display框图:

`timescale 1ns / 1psmodule video_display(input               pixel_clk   ,//驱动时钟input               sys_rst_n   ,//复位信号   input       [10:0]  pixel_xpos  ,//像素点横坐标input       [10:0]  pixel_ypos  ,//像素点纵坐标output  reg [23:0]  pixel_data   //像素点数据);parameter   H_DISP  = 11'd800       ;           //分辨率   行
parameter   V_DISP  = 11'd480       ;           //分辨率   列
parameter   DIV_CNT = 22'd750000    ;           //分辨率计数器localparam  SIDE_W  = 11'd40        ;           //屏幕边框宽度
localparam  BLOCK_W = 11'd20        ;           //方块宽度
localparam  BLUE    = 24'h0000ff    ;           //屏幕边框颜色          蓝色
localparam  WHITE   = 24'hffffff    ;           //背景颜色              白色
localparam  BLACK   = 24'h000000    ;           //方块颜色              黑色reg     [10:0]  block_x = SIDE_W    ;           //方块左上角横坐标
reg     [10:0]  block_y = SIDE_W    ;           //方块左上角纵坐标
reg     [21:0]  div_cnt             ;           //时钟分频计数器
reg             h_direct            ;           //方块水平位移方向   1:右移    0:左移
reg             v_direct            ;           //方块竖直位移方向   1:向下    0:向上  wire            move_en             ;           //方块移动使能信号  频率100hzassign  move_en = (div_cnt == DIV_CNT - 1'd1) ? 1'd1 : 1'd0;//时钟计数器,实现时钟分频
always @(posedge pixel_clk or negedge sys_rst_n ) beginif (!sys_rst_n) begindiv_cnt <= 22'd0;    end else beginif (div_cnt < DIV_CNT - 1'd1) begin            div_cnt <= div_cnt + 1'd1;end else begindiv_cnt <= 22'd0;    //技术到10ms清零endend
end//当方块移动到边界时,改变移动方向always @(posedge pixel_clk or negedge sys_rst_n) beginif (!sys_rst_n) beginh_direct <= 1'b1;                       //方块初始水平向右移动v_direct <= 1'b1;                       //方块初始竖直向下移动end else beginif (block_x == SIDE_W + 1'b1) begin     //到达左边界,水平向右h_direct <= 1'b1;end else begin                              //到达有边界,水平向左  if(block_x == H_DISP - SIDE_W - BLOCK_W + 1'd1)beginh_direct <= 1'b0; endelse beginh_direct <= h_direct;endendif (block_y == SIDE_W + 1'b1) begin     //到达上边界,竖直向下v_direct <= 1'b1;end else begin                              //到达下边界,竖直向上if(block_y == V_DISP - SIDE_W - BLOCK_W + 1'b1)begin                          v_direct <= 1'b0;                           endelse beginv_direct <= v_direct;endend endend//根据方块移动方向,改变横纵坐标
always @(posedge pixel_clk or negedge sys_rst_n ) beginif (!sys_rst_n) begin block_x <= SIDE_W + 1'b1;               //方块初始位置横坐标block_y <= SIDE_W + 1'b1;               //方块初始位置纵坐标end else if(move_en == 1'b1)beginif (h_direct == 1'b1) beginblock_x <= block_x + 1'b1;          //方块向右移动end else beginblock_x <= block_x -1'b1;           //方块向左移动endif (v_direct == 1'b1) beginblock_y <= block_y + 1'b1;          //方块向下移动    end else beginblock_y <= block_y -1'b1;           //方块向上移动endendelse beginblock_x <= block_x;block_y <= block_y;end
end//对区域给出颜色数据
always @(posedge pixel_clk or negedge sys_rst_n ) beginif (!sys_rst_n) beginpixel_data <= BLACK;end else beginif ((pixel_xpos < SIDE_W) || (pixel_xpos >= H_DISP - SIDE_W) || (pixel_ypos <= SIDE_W) || (pixel_ypos > V_DISP - SIDE_W)) beginpixel_data <= BLUE;end else beginif ((pixel_xpos >= block_x -1'b1) && (pixel_xpos < block_x + BLOCK_W - 1'b1) && (pixel_ypos >= block_y) && (pixel_ypos < block_y + BLOCK_W - 1'b1)) beginpixel_data <= BLACK;end else beginpixel_data <= WHITE;endend    end
endendmodule

其他部分完全延用上一章代码

HDMI彩条显示——FPGA学习笔记12-CSDN博客

2、整体代码框架

3、bug更正 

上一章中该部分表述错误

实际应为800*480*90 = 34560000约等于33.3Mhz

四、仿真分析

五、下载验证

六、总结 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143187.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

EmguCV学习笔记 VB.Net 11.9 姿势识别 OpenPose

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

spring boot 定时器配置

1、首先在主类上加EnableScheduling注解 2、在应用类上加Scheduled注解&#xff0c;同时记得添加spring的组件注解Component&#xff0c;不然无法成功

JavaEE初阶——初识EE(Java诞生背景,CPU详解)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能帮到你&#xff01; 目录 零&#xff1a;Java的发展背景介绍 一&#xff1a;EE的概念 二&#xff1a;计算机的构成 1&#xff1a;CU…

玖逸云黑系统源码 v1.3.0全解无后门 +搭建教程

功能带有卡密生成和添加黑名单等&#xff0c;反正功能也不是很多具体的自己看程序截图即可。 搭建教程 完成 1.我们先添加一个站点 2.PHP选择7.3 3.上传源码解压 4.导入数据库 5.配置数据库信息config.php 源码下载&#xff1a;https://download.csdn.net/download/m0_6…

openFrameworks_如何设置标题图标

openframework在一些东西的时候很方便&#xff0c;但是有些关于windows设置方面的东西提供的库却很有限。 ofSetWindowTitle("MoTeng Motion Detection Tool v1.0"); HWND handle WindowFromDC(wglGetCurrentDC());//取得环境句柄 setIcon(handle, "data//I…

接口幂等性和并发安全的区别?

目录标题 幂等性并发安全总结 接口幂等性和并发安全是两个不同的概念&#xff0c;虽然它们在设计API时都很重要&#xff0c;但侧重点不同。 幂等性 定义&#xff1a;幂等性指的是无论对接口进行多少次相同的操作&#xff0c;结果都是一致的。例如&#xff0c;HTTP的PUT和DELE…

在网络环境中怎么保护个人信息安全?

在网络环境中保护个人信息安全非常重要&#xff0c;以下是一些基本的建议来帮助您保护自己的个人信息&#xff1a; 使用强密码&#xff1a;确保您的所有在线账户都使用强密码。强密码通常包含大写字母、小写字母、数字以及特殊字符&#xff0c;并且长度至少为12位以上。 启用双…

WAAP解决方案:守护数字时代的安全盾牌

在当今这个数字化、数据驱动的时代&#xff0c;网络安全已成为企业运营中不可或缺的一环。随着Web应用程序和API接口在业务中的广泛应用&#xff0c;其面临的安全威胁也日益复杂多变。为此&#xff0c;WAAP&#xff08;Web Application and API Protection&#xff09;解决方案…

制造业的智能化革命:工业物联网(IIoT)的优势、层级应用及挑战解析

在全球制造业的蓬勃发展中&#xff0c;工业物联网&#xff08;IIoT&#xff09;作为一股颠覆性力量&#xff0c;正逐步重塑传统制造业的面貌。IIoT技术通过无缝连接设备、系统与人员&#xff0c;促进了数据的即时流通与处理&#xff0c;不仅极大地提升了制造效率&#xff0c;还…

Oracle EBS form个性化中调用带参数的存储过程或者函数

方式1 通过活动-消息 调用 这个方式的特点是会有一个消息弹框&#xff0c;不需要弹框时可以用方式2 方式2 通过 内置-执行过程 这个地方【变元】中的引用有点复杂&#xff0c;其中参数要用如下格式进行 #三个单引号||项目的表达式 ||${item.BLOCKNAME.FIELDNAME.value}|| #如…

2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线

短剧系统技术栈 前端&#xff1a;vue3uniapp 后端&#xff1a; php 数据库&#xff1a;mysql 服务器环境&#xff1a; centos7.6 宝塔 php7.4 MySQL5.7 一、短剧系统功能 短剧用户端&#xff1a; 小程序、抖音小程序、快手小程序、APP、 z付宝小程序 系统用户端详细功能&…

产业创新不息,产业运营中心如何成为你的创意孵化器?

在这个产业创新浪潮涌动的时代&#xff0c;产业运营中心正以其独特的魅力&#xff0c;成为众多创业者和企业的创意孵化器。那么&#xff0c;它究竟是如何做到的呢&#xff1f; 1、产业运营中心首先为你提供了一个充满活力和创新氛围的空间。在这里&#xff0c;你将与来自不同领…

【计算机网络】详解TCP/IP分层模型局域网和跨网络通信的原理

一、网络协议 两个概念&#xff1a;交换机&#xff1a;实现位于同一个子网中的主机数据交换。路由器&#xff1a;实现数据包的跨网络转发。 两台主机的距离变远了&#xff0c;会引发出一系列问题&#xff1a; 1、如何使用数据的问题 2、数据的可靠性问题 3、主机定位问题 4、…

第六部分:1---进程间通信,匿名管道

目录 进程间通信 进程间通信的目的&#xff1a; 进程间通信的本质&#xff1a; 管道&#xff1a; 管道的定义&#xff1a; 匿名管道 单向通信的管道通路&#xff1a; 进程和文件之间的解耦&#xff1a; 单向管道的读写端回收问题&#xff1a; 管道通信主要实现动态数…

CS61C 2020计算机组成原理Lecture03

1、C Operators Operator Precedence 2、Arrays 1、Pointing to Different Size Objects 2、sizeof&#xff08;&#xff09; 3、 Struct Alignment 四字节边界&#xff1a;指的是内存地址能够被4整除的情况。在计算机内存中&#xff0c;每个存储位置都有一个唯一的地址。当…

算法训练——day16快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

【数据结构】数据结构系列学习笔记——导航篇

一&#xff1a;概述 数据结构是计算机科学中的核心概念之一&#xff0c;是优化算法性能和资源利用率的关键。在软件开发和数据处理中&#xff0c;选择合适的数据结构对于算法的效率至关重要。数据结构的选择通常基于数据的使用模式&#xff0c;包括数据元素之间的关系、数据的存…

STM32 单片机最小系统全解析

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统&#xff0c;包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要&#xff0c;由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面&#xff0c;采用 3.3V 直流电源供…

WPF 的TreeView的TreeViewItem下动态生成TreeViewItem

树形结构仅部分需要动态生成TreeViewItem的可以参考本文。 xaml页面 <TreeView MinWidth"220" ><TreeViewItem Header"功能列表" ItemsSource"{Binding Functions}"><TreeViewItem.ItemTemplate><HierarchicalDataTempla…

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤&#xff1a; (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…