内容发布更新时间 : 2025/1/11 20:23:35星期一 下面是文章的全部内容请认真阅读。
.clipper_width(12'd512), .clipper_top(12'd0), .clipper_height(12'd768),
vin_x_cnt和vin_y_cnt分别为点计数和行计数,然后满足
assign clipper_wr_en = (vin_x_cnt > clipper_left) && (vin_x_cnt <= clipper_left + clipper_width) && (vin_y_cnt > clipper_top) && (vin_y_cnt <= clipper_top + clipper_height);
则clipper_wr_en使能,把数据写入DDR2中,完成剪切的功能。
4.2 图像存储模块
要使用DDR2,则需要初始化、写数据、读数据等等步骤,由于DDR的时序要求
非常严格,所以操作DDR2是一个困难的工作。但是我们可以选择Altera提供的IP核,来完成设计。
IP(IntelleetualProperty)就是常说的知识产权,在可编程逻辑领域,IP核是指将数字电路中一些常用但比较复杂的功能模块,比如FIR滤波器、快速傅立叶变换、PCI接口等。本设计采用的IP核就是软IP。图4.2。1为根据DDR的使用手册来设置DDR IP核参数。
18
图4.1 设置DDR2 IP
设置好IP之后,就相当于一个盒子,我们只需要代入相应的参数,就可以实现
数据的存储,程序代码如下:
vin_frame_buffer_ctrl vin_frame_buffer_ctrl_m0(
19
.rst_n(rst_n),
.vin_clk(buffer_f_rdclk), .vin_vs(vs), .vin_f(f),
.vin_de(vfb_vin_de), .vin_data(vfb_vin_data), .vin_width(clipper_width), .vin_height(clipper_height), .fifo_afull(vfb_fifo_afull), .mem_clk(mem_clk),
.wr_burst_req(wr_burst_req), .wr_burst_len(wr_burst_len),
);
.wr_burst_addr(wr_burst_addr), .wr_burst_data_req(wr_burst_data_req), .wr_burst_data(wr_burst_data), .burst_finish(burst_finish), .wr_max_line(wr_max_line), .base_addr(base_addr), .frame_addr(frame_addr)
4.3 图像显示模块
从DDR2读出的视频数据,经过插值算法处理后,VGA和HDMI两路信号的分辨率为1024x768,需要根据2.2.2中的视频时序对数据进行处理,才能把视频显示出来。代码如下:
assign hs_net = (h_cnt > h_fp - 12'd1) && (h_cnt < h_fp + h_sync);/*行同步产生*/
assign h_video = (h_cnt >= h_fp + h_sync + h_bp) && (h_cnt < h_total); assign v_video = (v_cnt >= v_fp + v_sync + v_bp) && (v_cnt < v_total); assign vs_net = (v_cnt > v_fp - 12'd1) && (v_cnt < v_fp + v_sync);/*场同步产生*/
assign de_net = h_video && v_video;/*视频有效数据产生*/ assign hs = hs_reg; assign vs = vs_reg; assign de = de_reg;
/*行计数器,用于处理行相关*/
always@(posedge dp_clk or negedge rst_n) begin
20
if(!rst_n)
h_cnt <= 12'd0;
else if(h_cnt == h_total - 12'd1)
h_cnt <= 12'd0;
else
h_cnt <= h_cnt + 12'd1;
end
/*场计数器,用于处理场相关*/
always@(posedge dp_clk or negedge rst_n) begin
if(!rst_n)
v_cnt <= 12'd0;
else if(h_cnt == h_total - 12'd1)
if(v_cnt == v_total - 12'd1)
v_cnt <= 12'd0;
else
v_cnt <= v_cnt + 12'd1;
else
v_cnt <= v_cnt;
end
4.4 软件总体框图
图4.2为代码经过综合之后,生成的原理图,即代码的流程图。
21
图4.2 综合后的原理图
22