您当前的位置: 首页 > 

9527华安

暂无认证

  • 5浏览

    0关注

    35博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

9527华安 发布时间:2022-10-11 17:18:45 ,浏览量:5

开局直接放大招:**“关注并私信我”**获得源码及工程; 在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上传视频审核时间太长了,就描述一下效果吧,红色方框在白色背景中移动,碰到灰色边框时马上反向运动,以此循环;有了这个视频模块,即使没有摄像头也可以玩儿图像处理了。快**“关注并私信我”**获得源码及工程吧。。。 后来,视频上传审核通过了,直接看输出效果吧:

动态方块移动

关注
打赏
1659431378
查看更多评论
立即登录/注册

微信扫码登录

0.0356s