• 黑金AX301开发板视频图像处理:探索


    OV7670摄像头:
    SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO_E、SIO_C与SIO_D。
    2线的SCCB总线只能是一个主器件对一个从器件控制,但3线SCCB接口可以对多个从器件控制,因此当只有一个从机(slave device)时用两线,有多个从机时用三线。
    其中SIO_C只能由主机配置(FPGA),SIO_D是一个三态门,双向数据线,既可以由主机控制,也可以由从机控制。
    在创建fifo的设置中wrfifo和rdfifo的读和写时钟需要设置为独立;增加同步清零;增加wr的read-side usedw引脚,增加rd的write-side usedw引脚。
     
    vga的数据引脚需注意:顺序为r[4:0]:g[5:0]:b[4:0]
    颜色太蓝,不知为何,尝试将引脚顺序修改为b[4:0]:g[5:0]:r[4:0]后,发现太红。可能是其他问题?
    直接复制demo的代码是没有问题的,查看demo的引脚接法就是r[4:0]:g[5:0]:b[4:0]
    对比之后查明原因,fifo的宽度应该是16bit(直接对应vga的rgb565),我设置的时候搞成了8bit
     
    程序执行的输入和输出只看主程序的IO,其他IO是使用的程序内变量,或者子程序内变量:
    在进行vga视频显示的图像灰度化处理时,rgb2gray部分的输入数据是lcd_rgb,输出是vgad。vgad也是主程序的输出;lcd_rgb是sdram_vga_top的输出。sdram_vga_top的作用是从sdram读取图像数据到fifo并从fifo输出给vga接口,如果没有rgb2gray部分则输出为vgad,否则输出为lcd_rgb以方便转化为灰度图再输出数据vgad给vga引脚用于显示。
     
    视频的采集30hz与图像的显示帧率60hz不一致,一般是中间使用一个快速的存储机构sdram来实现匹配。
     
     
    对图像做卷积,发现采集的图像是640*480*16bit的图像,要一次取3行数据,发现移位寄存器内存不够。
    1.需要使用(3个bank+3个fifo)*2的方式来吗?
    2.或者将fifo深度增加,然后直接读出到3个移位寄存器?这种方法看起来可行性比较高。但是,要通过fifo中间寄存器来补充3个移位寄存器,比较麻烦,还可能影响速度。
    3.或者将wrfifo的数据直接存储到sdram的3个bank中,然后直接从3个bank中并行读出数据进行处理?看起来最简便。
    rdfifo的作用是防止数据拖影?那么这种方式下也需要一个fifo吧,将卷积结果存放于fifo中,然后fifo数据给vga显示。
    实际在bank中每次都是存储完一帧图像再进行乒乓切换的。
    4.创建3个rdfifo,并行读出,然后计算卷积并送给vga显示。这个看起来才比较可行。
  • 相关阅读:
    组合模式及C++实现
    YUV422(UYVY)转RGB565源代码及其讲解.md
    会用errno,事半功倍
    可变参数宏
    camera理论基础和工作原理
    !!!??? 2.3 核心模块与应用程序的对比
    KVM与VMware的性能比较
    单片机中定时器与计数器的区别
    编译器对变量的内存分配方式
    【转载】Modelsim 与Vivado联合仿真版本对应问题
  • 原文地址:https://www.cnblogs.com/Osler/p/8780263.html
Copyright © 2020-2023  润新知