FPGA手写一个动态方块视频,用来代替摄像头输入,私信我送代码

开局直接放大招:**“关注并私信我”**获得源码及工程;
在FPGA开发图像处理类工程时,往往需要视频输入,一般是摄像头,比如MIPI、PAL、SDI、HDMI或者OV5640啥的,如果我们手里的板子没有输入视频接口,或者接口坏了,来怎么开发呢?通常的做法是手写一个彩条模拟输入视频,但有个问题,彩条是图片,是静止的,怎么能模拟动态的视频呢?特别是在做图像三帧缓存读写时问题就很明显了。
那么怎么解决问题呢?那就是手写一个能动起来的视频呗,先手写一个标准的VGA时序,然后再写一个动态显示的模块,最后把两个模块连起来封装一下就完事了。
不废话了,直接上代码:
顶层信号接口部分如下:
在这里插入图片描述
参数可根据需要自由配置,这里给出说明:
视频高度、视频宽度:输出视频的有效区域,这个感觉不需要说了;
像素时钟频率:比如输出1080P@60Hz视频,时钟该为148.5M,那么频率就是148500000,再比如输出720P@60Hz视频,时钟该为74.25M,那么频率就是74250000;
方块移动时钟频率:方块在屏幕中移动,它的移动频率不可能是像素时钟吧,那么快人眼咋看得过来呢?所以这里设为100Hz,这样人眼就能看得到“动”了,当然,这200应该也是可以的,自己去试;
屏幕边框宽度:这里设置了屏幕边框,可以想象为画框;
移动方块大小:移动方块在屏幕中移动,跳动,方块为正方形,这里是设置边长;
三个颜色:rgb值填入就可以了;

VGA时序模块:
生成标准的VGA时序,参考VESA标准,这个很简单,没必要在这里多说,直接给出接口部分:
在这里插入图片描述
动态显示模块:
根据VGA时序,生成动态移动的方块,模拟视频的效果,直接给出接口部分:
在这里插入图片描述
顶层:就是封装两个模块,直接给出代码:

module  video_block_move #(
    parameter H_DISP            = 1920      ,   //video h
    parameter V_DISP            = 1080      ,   //video v
    parameter VIDEO_CLK         = 148500000 ,   //video clk
    parameter BLOCK_CLK         = 100       ,   //move block clk
    parameter SIDE_W            = 40        ,   //screen side size
    parameter BLOCK_W           = 80        ,   //move block size
    parameter SCREEN_SIDE_COLOR = 24'h7b7b7b,   //screen side color
    parameter SCREEN_BKG_COLOR  = 24'hffffff,   //screen background color
    parameter MOVE_BLOCK_COLOR  = 24'hffc0cb    //move block color
)
(
    input          pixel_clk,
	input          sys_rst_n,
    output         video_hs ,
    output         video_vs ,
    output         video_de ,
    output [23:0]  video_rgb
);

//*****************************************************
//**                    main code
//*****************************************************

//wire define
wire  [10:0]  pixel_xpos_w;
wire  [10:0]  pixel_ypos_w;
wire  [23:0]  pixel_data_w;

video_timing_control u_video_timing_control(
    .i_clk  (pixel_clk   ),    
    .i_rst_n(sys_rst_n   ), 
    .i_rgb  (pixel_data_w),
    .o_hs   (video_hs    ),
    .o_vs   (video_vs    ),
    .o_de   (video_de    ),
    .o_rgb  (video_rgb   ),
    .o_x_pos(pixel_xpos_w),
    .o_y_pos(pixel_ypos_w)
);

//Àý»¯RGBÊý¾ÝÏÔʾģ¿é
rgb_display #(
    .H_DISP           (H_DISP           ),   //video h
    .V_DISP           (V_DISP           ),   //video v
    .VIDEO_CLK        (VIDEO_CLK        ),   //video clk
    .BLOCK_CLK        (BLOCK_CLK        ),   //move block clk
    .SIDE_W           (SIDE_W           ),   //screen side size
    .BLOCK_W          (BLOCK_W          ),   //move block size
    .SCREEN_SIDE_COLOR(SCREEN_SIDE_COLOR),   //screen side color
    .SCREEN_BKG_COLOR (SCREEN_BKG_COLOR ),   //screen background color
    .MOVE_BLOCK_COLOR (MOVE_BLOCK_COLOR )    //move block color
)
u_rgb_display(
    .pixel_clk      (pixel_clk   ),
    .sys_rst_n      (sys_rst_n   ),
    .pixel_xpos     (pixel_xpos_w),
    .pixel_ypos     (pixel_ypos_w),
    .pixel_data     (pixel_data_w)
);

endmodule

上板调试:
开发板:zynq7100开发板;
输出:HDMI输出,1080P;
效果如下:
在这里插入图片描述
视频效果:csdn上传视频审核时间太长了,就描述一下效果吧,红色方框在白色背景中移动,碰到灰色边框时马上反向运动,以此循环;有了这个视频模块,即使没有摄像头也可以玩儿图像处理了。快**“关注并私信我”**获得源码及工程吧。。。
后来,视频上传审核通过了,直接看输出效果吧:

动态方块移动

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值