S03_CH04_AXI_DMA_OV5640摄像头采集系统的问题: 
 
 
  我想问下  在count_reset模块中  parameter[19:0]num = 20'hffff0  我算了下这个参数 输入时钟25MHZ;  20'hffff 等于1048560 ; (1/25000000)*1048560 = 42ms;为什么延迟这么多呢? 
   而 在cmos_decode模块中rst_n_i为什么反复寄存了四个时钟周期呢? 
 
module count_reset# 
( 
    parameter[19:0]num = 20'hffff0 
)( 
    input clk_i, 
    output rst_o 
    ); 
 
reg[19:0] cnt = 20'd0; 
reg rst_d0; 
 
/*count for clock*/ 
always@(posedge clk_i) 
begin 
    cnt <= ( cnt <= num)?( cnt + 20'd1 ):num; 
end 
 
/*generate output signal*/ 
always@(posedge clk_i) 
begin 
    rst_d0 <= ( cnt >= num)?1'b1:1'b0; 
end     
 
assign rst_o = rst_d0; 
 
endmodule 
我想问下    parameter[19:0]num = 20'hffff0  我算了下这个参数 输入时钟25MHZ;  20'hffff 等于1048560 ; (1/25000000)*1048560 = 42ms;为什么延迟这么多呢? 
    在下面的模块中rst_n_i为什么反复寄存了四个时钟周期呢`timescale 1ns / 1ps  
//////////////////////////////////////////////////////////////////////////////////  
// Company: milinker corperation  
// WEB:www.milinker.com  
// BBS:www.osrc.cn  
// Engineer:.  
// Create Date:    07:28:50 09/04/2015   
// Design Name:  cmos_decode_v1  
// Module Name:    cmos_decode_v1  
// Project Name:  cmos_decode_v1  
// Target Devices: XC6SLX25-FTG256 Mis603  
// Tool versions:  ISE14.7  
// Description:  cmos_decode_v1.  
// Revision:  V1.0  
// Additional Comments:   
//1) _i PIN input    
//2) _o PIN output  
//3) _n PIN active low  
//4) _dg debug signal   
//5) _r  reg delay  
//6) _s state machine  
//////////////////////////////////////////////////////////////////////////////  
module cmos_decode(  
//system signal.  
input cmos_clk_i,//cmos senseor clock.  
input rst_n_i,//system reset.active low.  
//cmos sensor hardware interface.  
input cmos_pclk_i,//input pixel clock.  
input cmos_href_i,//input pixel hs signal.  
input cmos_vsync_i,//input pixel vs signal.  
input[7:0]cmos_data_i,//data.  
output cmos_xclk_o,//output clock to cmos sensor.  
//user interface.  
output hs_o,//hs signal.  
output vs_o,//vs signal.  
output reg [15:0] rgb565_o,//data output  
output vid_clk_ce  
    );  
parameter[5:0]CMOS_FRAME_WAITCNT = 4'd15;  
reg[4:0] rst_n_reg = 5'd0;  
//reset signal deal with.  
always@(posedge cmos_clk_i)  
begin  
rst_n_reg <= {rst_n_reg[3:0],rst_n_i};  
end  
reg[1:0]vsync_d;  
reg[1:0]href_d;  
wire vsync_start;  
wire vsync_end;  
//vs signal deal with.  
always@(posedge cmos_pclk_i)  
begin  
vsync_d <= {vsync_d[0],cmos_vsync_i};  
href_d  <= {href_d[0],cmos_href_i};  
end  
assign vsync_start =  vsync_d[1]&(!vsync_d[0]);  
assign vsync_end   = (!vsync_d[1])&vsync_d[0];  
reg[6:0]cmos_fps;  
//frame count.  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
begin  
cmos_fps <= 7'd0;  
end  
else if(vsync_start)  
begin  
cmos_fps <= cmos_fps + 7'd1;  
end  
else if(cmos_fps >= CMOS_FRAME_WAITCNT)  
begin  
cmos_fps <= CMOS_FRAME_WAITCNT;  
end  
end  
//wait frames and output enable.  
reg out_en;  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
begin  
out_en <= 1'b0;  
end  
else if(cmos_fps >= CMOS_FRAME_WAITCNT)  
begin  
out_en <= 1'b1;  
end  
else  
begin  
out_en <= out_en;  
end  
end  
//output data 8bit changed into 16bit in rgb565.  
reg [7:0] cmos_data_d0;  
reg [15:0]cmos_rgb565_d0;  
reg byte_flag;  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
byte_flag <= 0;  
else if(cmos_href_i)  
byte_flag <= ~byte_flag;  
else  
byte_flag <= 0;  
end  
reg byte_flag_r0;  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
byte_flag_r0 <= 0;  
else   
byte_flag_r0 <= byte_flag;  
end  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
cmos_data_d0 <= 8'd0;  
else if(cmos_href_i)  
cmos_data_d0 <= cmos_data_i; //MSB -> LSB  
else if(~cmos_href_i)   
cmos_data_d0 <= 8'd0;  
end  
always@(posedge cmos_pclk_i)  
begin  
if(!rst_n_reg[4])  
rgb565_o <= 16'd0;  
else if(cmos_href_i&byte_flag)  
rgb565_o <= {cmos_data_d0,cmos_data_i}; //MSB -> LSB  
else if(~cmos_href_i)   
rgb565_o <= 8'd0;  
end  
assign vid_clk_ce = out_en ? (byte_flag_r0&hs_o)||(!hs_o) : 1'b0;  
assign vs_o = out_en ? vsync_d[1] : 1'b0;  
assign hs_o = out_en ? href_d[1] : 1'b0;  
assign cmos_xclk_o = cmos_clk_i;  
endmodule 
 
 
 
 
 
 |