一、字节标志的注意点
由于摄像头的输出是RGB56格式,所以需要将两帧的数据进行拼接,之后送到上位机进行显示。
1 reg byte_flag;2
3 always@(posedge cmos_pclk_i)4 begin5 if(!rst_n_reg[4])6 byte_flag <= 0;7 else if(cmos_href_r)8 byte_flag <= ~byte_flag;9 else
10 byte_flag <= 0;11 end
上面always块是对拼接的两帧数据设置一个标志信号,在byte_flag==1时进行拼接,既然要进行拼接,就需要将数据进行同步寄存,故有
always@(posedgecmos_pclk_i)begin
if(!rst_n_reg[4])
cmos_data_d0<= 8'd0;
else if(cmos_href_r)
cmos_data_d0<= cmos_data_r; //MSB -> LSB
else if(~cmos_href_r)
cmos_data_d0<= 8'd0;
end
将当前的摄像头输出数据cmos_data_r寄存到cmos_data_d0,相当于延迟了一个时钟。
那么,在什么时候进行拼接,就是在byte_flag==1时,可是需要注意第一个always块的byte_falg赋值是在cmos_pclk_i的下一个时钟的上升沿完成,在第一个always块结束时byte_flag还是0,需要等待byte_falg==1