一、字节标志的注意点

由于摄像头的输出是RGB56格式,所以需要将两帧的数据进行拼接,之后送到上位机进行显示。

 reg    byte_flag;

 always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
byte_flag <= ;
else if(cmos_href_r)
byte_flag <= ~byte_flag;
else
byte_flag <= ;
end

上面always块是对拼接的两帧数据设置一个标志信号,在byte_flag==1时进行拼接,既然要进行拼接,就需要将数据进行同步寄存,故有

always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
cmos_data_d0 <= 'd0;
else if(cmos_href_r)
cmos_data_d0 <= cmos_data_r; //MSB -> LSB
else if(~cmos_href_r)
cmos_data_d0 <= 'd0;
end

将当前的摄像头输出数据cmos_data_r寄存到cmos_data_d0,相当于延迟了一个时钟。

那么,在什么时候进行拼接,就是在byte_flag==1时,可是需要注意第一个always块的byte_falg赋值是在cmos_pclk_i的下一个时钟的上升沿完成,在第一个always块结束时byte_flag还是0,需要等待byte_falg==1,所以第三个always块

reg [:] rgb565;
always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
rgb565 <= 'd0;
else if(cmos_href_r&byte_flag)
rgb565 <= {cmos_data_d0,cmos_data_r}; //MSB -> LSB
else if(~cmos_href_r)
rgb565 <= 'd0;
end

上述always块等待byte_flag变为高电平。当byte_flag==1时候进行两帧数据拼接。

由于数据需要拼接,拼接完毕后的数据才是有效数据,那么必然需要一个标志作为输出有效信号,也就是表明此时数据有效的信号,所以存在以下代码块:

reg    byte_flag_r0;
always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
byte_flag_r0 <= ;
else
byte_flag_r0 <= byte_flag;
end assign clk_ce =out_en? byte_flag_r0:'b0;

为什么需要定义byte_flag_r0将byte_flag延时一个像素时钟呢?因为byte_flag_r0比byte_flga延时一个像素时钟,在这个延时的时钟过程中,完成数据的拼接,当完成数据拼接后,正好此时的数据有效且byte_flag_r0==1,故将byte_flag_r0作为输出有效标志。

将上面的第一个第二个always块写在一起更容易明白,可参考小梅哥例程中的配置方式,

    //capture and sync RGB565 cmos_din
reg [:] cmos_din_r;
reg [:] cmos_frame_data_r;
reg byte_flag;
always@(posedge cmos_pclk or negedge rst_n)
if(!rst_n) begin
cmos_din_r <= ;
byte_flag <= ;
cmos_frame_data_r <= ;
end
else if(cmos_href) begin
byte_flag <= ~byte_flag;
cmos_din_r <= cmos_din;
if(byte_flag == 'b1)
cmos_frame_data_r <= {cmos_din_r, cmos_din}; //MSB -> LSB
else
cmos_frame_data_r <= cmos_frame_data_r;
end
else begin
cmos_din_r <= ;
byte_flag <= ;
cmos_frame_data_r <= cmos_frame_data_r;
end

(二)、此外,在代码案例中,存在前n个帧数据丢弃的情况,目前见过10帧、12帧、15帧,其作用个人理解为预留出5640摄像头的IIC配置初始化过程。

最新文章

  1. Convert Object to XML using LINQ
  2. EF OnModelCreating
  3. PostgresSQL 学习资料记录处
  4. (转)要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
  5. 服务器部署_nginx报错: [warn] conflicting server name &quot;www.test.com&quot; on 0.0.0.0:80, ignored
  6. MapReduce分析明星微博数据
  7. JQuery实现隔行变色和突出显示当前行 效果
  8. hdu2612(bfs)
  9. java基础练习 1
  10. Volist标签
  11. JAVA基础——编程练习(一)
  12. Java中面向字符的输入流
  13. 如何让window.open()以post请求方式调用(巧妙解法)
  14. ZOJ-2913 Bus Pass---BFS进阶版
  15. laravel学习笔记一
  16. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
  17. 流媒体服务器SRS部署
  18. IDEA控制台问题:At least one JAR was scanned for TLDs yet contained no TLD
  19. Spring Boot 2.0正式发布,新特性解读
  20. AJAX 实战【三级联动】分析

热门文章

  1. Yii2 前后台登陆退出分离、登陆验证
  2. flask+阿里云短信服务实现注册发送手机验证码
  3. 快学Scala 第十课 (包和包对象)
  4. Scala 学习笔记之集合(9) 集合常用操作汇总
  5. 浅析MVC Pattern
  6. Asp.Net Core中Session使用
  7. JDK8 Optional操作学习
  8. Flash XSS漏洞快速上手
  9. 开启sql语句监控
  10. PHP array_mulitsort