首页 > 其他分享 >HDMI实现方块移动

HDMI实现方块移动

时间:2023-12-04 19:57:43浏览次数:33  
标签:HDMI ypos pixel localparam 方块 移动 reg block

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2023/12/04 18:50:05
// Design Name: 
// Module Name: block_move
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module block_move (
    input                   pixel_clk,
    input                   sys_rst_n,
    input           [10:0]  pixel_xpos,
    input           [10:0]  pixel_ypos,

    output  reg     [23:0]  pixel_data

);


//parameter define
parameter H_DISP = 11'd1280;
parameter V_DISP = 11'd720;

localparam SIDE_W = 11'd40; //屏幕边框宽度
localparam BLOCK_W = 11'd40;//方块宽度
localparam BLUE = 24'b00000000_00000000_11111111;
localparam WHITE = 24'b11111111_11111111_11111111;
localparam BLACK = 24'b00000000_00000000_00000000;

//reg define
reg [10:0] block_x;//方块左上角横坐标
reg [10:0] block_y;//方块左上角纵坐标
reg [21:0] div_cnt;
reg h_direct; //方块水平移动方向, 1:右移, 0:左移
reg v_direct; //方块竖直移动方向, 1:向下, 0:向上
wire move_en;

// 10ms计数器
always @(posedge pixel_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        div_cnt <= 22'd0;
    else if(div_cnt == 22'd734214)
        div_cnt <= 22'd0;
    else    
        div_cnt <= div_cnt + 1'd1;
end

//当方块移动到边界时,改变移动方向
always @(posedge pixel_clk or negedge sys_rst_n) begin
    if(!sys_rst_n) begin
        h_direct <= 1'b1;
    end
    else if(block_x == SIDE_W)
        h_direct <= 1'b1;
    else if(block_x ==H_DISP - SIDE_W - BLOCK_W)
        h_direct <= 1'b0;
    else
        h_direct <= h_direct;
end

always @(posedge pixel_clk or negedge sys_rst_n) begin
    if(!sys_rst_n) begin
        v_direct <= 1'b1;
    end
    else if(block_x == SIDE_W)
        v_direct <= 1'b1;
    else if(block_x ==H_DISP - SIDE_W - BLOCK_W)
        v_direct <= 1'b0;
    else
        v_direct <= v_direct;
end

//根据方块移动方向,改变其纵横坐标

 always @(posedge pixel_clk or negedge sys_rst_n) begin
    if (!sys_rst_n) begin
    block_x <= SIDE_W; //方块初始位置横坐标
    block_y <= SIDE_W; //方块初始位置纵坐标
    end
    else if(move_en) begin
        if(h_direct)
            block_x <= block_x + 1'b1; //方块向右移动
        else
            block_x <= block_x - 1'b1; //方块向左移动

        if(v_direct)
            block_y <= block_y + 1'b1; //方块向下移动
        else
            block_y <= block_y - 1'b1; //方块向上移动
    end
    else begin
        block_x <= block_x;
        block_y <= block_y;
    end
 end

//给不同的区域绘制不同的颜色 边框蓝色 方块黑色 背景白色

always @(posedge pixel_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        pixel_data <= BLACK;
    else begin
        if((pixel_xpos < SIDE_W) || (pixel_xpos >= H_DISP - SIDE_W)
        || (pixel_ypos < SIDE_W) || (pixel_ypos >= V_DISP - SIDE_W))
            pixel_data <= BLUE;
        else    
        if( (pixel_xpos >= block_x) && (pixel_xpos < block_x + BLOCK_W)
        && (pixel_ypos >= block_y) && (pixel_ypos < block_y + BLOCK_W))
            pixel_data <= BLACK; //绘制方块为黑色
        else
            pixel_data <= WHITE;    
    end
end

endmodule

标签:HDMI,ypos,pixel,localparam,方块,移动,reg,block
From: https://www.cnblogs.com/fangrunze/p/17875784.html

相关文章

  • 移动优先索引化对SEO的影响
    随着移动设备的普及和用户越来越多地使用手机进行搜索,搜索引擎开始采用移动优先索引化的策略。本文将为您介绍移动优先索引化对SEO的影响,并提供一些应对之策。1.什么是移动优先索引化:移动优先索引化是指搜索引擎首先以移动设备的内容和用户体验为基准来评估和排名网站。这意味着搜......
  • [LeetCode Hot] LeetCode283. 移动零
    题目描述方法一:时间复杂度O(n2)classSolution{publicvoidmoveZeroes(int[]nums){for(inti=0;i<nums.length;i++){//指针i为0的时候停止if(nums[i]==0){//遍历[i+1,nums.length-1],如果遇......
  • 手持收银机|移动收银机|POS终端安卓主板定制方案
    智能手持POS终端是一种集成了显示触摸控制、IC卡刷卡、磁条卡刷卡、扫码和票据打印等多种功能的设备。它支持支付宝、微信、银行卡、云闪付、ApplePay、会员储值等多种支付方式,具有广泛的应用场景和便利性。该POS终端采用了联发科MTK6761平台开发的解决方案。它搭载了高......
  • Unity3D角色移动控制脚本
    Unity3D角色移动控制脚本键盘控制方向鼠标控制方向键盘控制方向privateCharacterControllercontroller;publicfloatSpeed=1f;publicfloatRotateSpeed=1f;voidStart(){ controller=transform.GetComponent<CharacterController>();}voidUpdate(){ //键盘......
  • 【C语言】【二级】移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p的数组元
    题目请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。考点一维数组、......
  • .net core(web api) 后台 +uniapp移动端自动更新
    移动端采用uniapp开发后台采用.netcore先到插件市场找到对应的插件  然后将插件安装到 然后在移动端项目pages.json"path":"uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update","style":{"app-plus":{"......
  • JavaScript 实现跨标签页移动元素效果
    该方案可实现跨浏览器容器进行拖动1.入口文件index.html<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title......
  • 手动 focus 输入框后,如何将输入游标移动(定位)到输入框现有值的末尾
    如果输入框内有值,直接使用HTMLInputElement自身的focus方法,会聚焦,但游标是处于默认的起始位置(如下图示例代码及图片):constinput=document.querySelector('._lng-input');input.focus(); 处理方案--兼容性好的Hack代码:constinput=document.querySelector('._lng-inpu......
  • 安卓小主板|超小尺寸安卓主板|迷你主板_移动手持终端PDA设备
    超小尺寸安卓主板的性能参数非常强大。首先,主板尺寸仅为43.4mm*57.6mm,采用了联发科12纳米制程工艺(MT6761/MT6762/MT6765/MT8788)芯片,配备四核/八核64位A53架构CPU,主频2.0GHz,功耗低,性能高。默认内置1G+16G内存,可选配2G+16G/4G+64G内存,运行Android11.0操作系统。在网络连接方......
  • 【Python入门教程】Python的shutil库介绍+基础函数使用(文件/目录复制、移动、删除、解
    ​前言        很多时候编过的代码过段时间就忘了,所以想用博文记录一下一些平时常用库的函数,今天跟大家分享一下python的shutil库的常用函数,包括文件复制、删除、移动等常见操作。同时为了复习之前python类的使用,所以今天的代码就用类封装起来了,大家直接看函数就行,不需......