当前位置: 首页 > news >正文

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

四、仿真分析

五、下载验证

六、总结 

相关文章:

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

一、方块移动原理 二、实验任务 使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块&#xff0c;要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480&#xff0c;刷新速率为90hz。&#xff08;480p分辨率为800*480&#xff0c;像素时钟频率Vga_clk 800x4…...

MySQL中去除重复

除去相同的行 SELECT DISTINCT 列名 FROM 表名; 示例&#xff1a;查询employees表&#xff0c;显示唯一的部门ID select distinct department_id from employees;...

【C++】vector容器的基本使用

一、vector是什么 vector是STL第一个正式的容器&#xff0c;它的底层其实就是动态数组&#xff0c;插入数据时当容量满了会自动扩容&#xff0c;它和string差不多&#xff0c;不同的之处之一在于vector本身是一个模板&#xff0c;它这个容器中可以存放各种各样的类型的数据&am…...

【强化学习系列】Gym库使用——创建自己的强化学习环境2:拆解官方标准模型源码/规范自定义类+打包自定义环境

目录 一、 官方标准环境的获取与理解 二、根据官方环境源码修改自定义 1.初始化__init__() 2.重置环境 reset() 三、打包环境 1.注册与创建自定义环境 2.环境规范化 在本文的早些时候&#xff0c;曾尝试按照自己的想法搭建自定义的基于gym强化学习环境。 【强化学习系列】Gy…...

PyQt5实现按钮选择文件夹及文件夹

目录 1、选择文件夹并显示 2、选择文件 3、选择多个文件 4、设置保存文件路径 1、选择文件夹并显示 from PyQt5 import QtWidgetsdirectory QtWidgets.QFileDialog.getExistingDirectory(None, "选取文件夹", "./") # 起始路径 print(directory) 2…...

Gin渲染

HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹&#xff0c;然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…...

前端——JS基础

定义变量&#xff1a;let / var 字符串 字符串拼接&#xff1a; 字符串和数字拼&#xff1a;您.... 25 ; 这个25会转成字符串再拼接 字符串和数组拼&#xff1a;10以内的质数有&#xff1a; [2,3,5,7] > 10以内的质数有&#xff1a;2,3,5,7 字符串长度&#xff1a;leng…...

MATLAB入门教程

MATLAB安装教程可参考链接&#xff1a;matlab怎么安装 matlab安装教程-电脑软件-PHP中文网 1.MATLAB的工作环境 &#xff08;1&#xff09;命令窗(command window) 是对MATLAB进行操作的主要载体。默认情况下&#xff0c;启动MATLAB时就打开命令窗。MATLAB的所有所数…...

muduo - 概要简述

作者&#xff1a;陈硕 编程语言&#xff1a;C 架构模式&#xff1a;Reactor 代码链接&#xff1a;GitHub - chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C11 设计自述&#xff1a;https://www.cnblogs.com/Solstice/archive/2010/08…...

Selenium点击元素的方法

前言 点击方法在web自动化测试中经常用到,下面就来介绍一下selenium常用和不常用的点击方法; 1、常用方法 1.1、使用 click() 方法: 这是最简单和最常用的方法。通过选中要点击的元素,然后使用 click() 方法来触发点击事件。 示例代码: element = self.driver.find_e…...

kali里面搭建docker容器

注意事项&#xff1a;kali版本&#xff0c;镜像源 &#xff08;1&#xff09;权限为管理员&#xff1a; sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了&#xff0c;应该是更新源出问题了。 &#xff08;3&#xff09;更换镜像源&am…...

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲&#xff0c;我们已经见过了WebGL中的部分基础语法&#xff…...

go多线程

1、简单使用&#xff08;这个执行完成&#xff0c;如果进程执行比较久&#xff0c;这里不会等待它们结束&#xff09; package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…...

【话题】如何看待IBM中国研发部裁员?

&#xff08;一&#xff09;背景 在全球化的大趋势下&#xff0c;跨国公司的业务布局一直处于动态调整之中。IBM 作为全球知名的 IT 企业&#xff0c;在中国市场已经运营多年&#xff0c;其在中国的研发中心曾经为公司的全球业务发展做出了重要贡献。近年来&#xff0c;全球经…...

【C/C++】涉及string类的经典OJ编程题

【C/C】涉及string类的经典OJ编程题 一. 把字符串转化成整数&#xff08;atoi&#xff09;解法一&#xff1a;&#xff08;不用long&#xff09;完整代码&#xff1a;解法二&#xff1a;&#xff08;用long&#xff09; 二.字符串相加代码实现&#xff08;含注释&#xff09;&a…...

淘系等电商平台API接口系列:商品详情数据解析,json数据返回参考

——在成长的路上&#xff0c;我们都是同行者。这篇关于商品详情API接口的文章&#xff0c;希望能帮助到您。期待与您继续分享更多API接口的知识&#xff0c;请记得关注Anzexi58哦&#xff01; 在淘系&#xff08;如淘宝、天猫&#xff09;等电商平台中&#xff0c;商品详情数据…...

vue组件之间的数据共享

一、组件之间的关系 1.父子关系 2.兄弟关系 3.后代关系 二、父子组件之间的数据共享 1.父-->子共享数据 父组件通过v-bind属性绑定向子组件共享数据&#xff0c;子组件需要使用props接受数据。 <template><p>父组件</p><Son :msg"msg"…...

LangChain:构建强大的LLM应用的全方位框架

LangChain&#xff1a;构建强大的LLM应用的全方位框架 引言 在人工智能和大语言模型&#xff08;LLMs&#xff09;快速发展的今天&#xff0c;开发者们迫切需要一个强大而灵活的框架来简化LLM应用的开发过程。LangChain应运而生&#xff0c;它不仅提供了丰富的工具和组件&…...

自有平台自有品牌如何利用电商API接口做定价参考(多平台商品详情数据接口)

如今&#xff0c;多数自有商城自有品牌在为产品做定价时都会参考淘宝|天猫|京东等主流电商平台的商品价格以做参考&#xff0c;这一行为的好处主要有以下几点&#xff1a; 通过参考主流平台价格&#xff0c;用户更能了解目标市场中消费者对产品的接受度&#xff0c;从而制定出符…...

三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)

&#x1f9f8;本篇博客重在讲解Java基础的面试题&#xff0c;将会实时更新&#xff0c;欢迎大家添加作者文末联系方式交流 &#x1f4dc;JAVA面试题专栏&#xff1a;JAVA崭新面试题——2024版_dream_ready的博客-CSDN博客 &#x1f4dc;作者首页&#xff1a; dream_ready-CSDN博…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...