1、信号的边缘检测(上升沿、下降沿)
首先,同步待检测信号,得到本地的同步信号vsync_r,然后打一拍得到vsync_r2,对第二拍的信号取反,得到vsync_r2n,最后将vsync_r2n与vsynr_r相与得到上升沿有效信号。
input vsync ;
reg vsync_r;
wire vsync_r2;
wire vsync_r2n;
wire vsync_rise;
always@(posedge clk ) begin
vsync_r <= vsync;
vsync_r2<= vsync_r;
end
assign vsync_r2n = ~vsync_r2;
assign vsync_rise=vsync_r & vsync_r2n;
关于下降沿同理,首先对待检测信号进行同步,得到本地的同步信号vsync_r,然后vsync_rn一直对vsync取反,并且第二拍信号vsync_r2对vsync_rn取反,在下降沿的时候将vsync_r2与vsync_rn相与
input vsync ;
reg vsync_r;
wire vsync_rn;
wire vsync_r2;
wire vsync_down;
always@(posedge clk) begin
vsync_r <= vsync ;
vsync_rn <= vsync_r ;
end
assign vsync_r2 = ~vsync_rn;
assign vsync_down = vsync_rn & vsync_r2 ;
2、多拍处理
(1)时钟多拍处理:将一个信号连续打多拍,这个操作在时序对齐和防止亚稳态应用中十分常见 。
parameter VSYNC_WIDTH = 9 ;
reg vsync_async ;
reg vsync_async_r1 ;
reg [VSYNC_WIDTH:0] vsync_async_r ;
input vsync;
always@(posedge clk)
begin
vsync_async <= ~vsync;
vsync_async_r1 <= vsync_async; //打一拍处理
vsync_async_r <= {vsync_async_r[8:0],vsync_async_r1}; //打连续的九拍。
end
(2)数据多拍处理
数据多拍在处理图像的时候主要用在两个计算模块处理速度不匹配的情况,当一个计算模块处理速度较快,但是有需要啊另一个模块计算结果,就需要吧当前的计算结果多缓存几拍。
parameter DW_INEO = 3 ;
parameter LATENCY = 8 ;
integer n;
input [DW_INEO-1:0] din_fifo;
reg [DW_INEO-1:0] din_fifo_r[LATENCY-1:0]
always@(posedge clk )
begin
din_fifo_r[0] <= din_fifo;
for(n=1;n<LATENCY;n=n+1)
din_fifo_r[n] <= dinfifo_r[n-1];
end
3、图像行列计数
在图像处理算法中,大部分算法需要精准的像素定位,行列计数算法是像素定位点的基本算法。其中行列计数的最简单方法是通过行场同步信号和像素有效信号进行计数。实际原则如下:
第一、每一个场信号到来时行列信号清零
第二、每一个行信号到来时,行信号加一同时列信号清零。
第三、像素信号有效时列计数加一。