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