🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/全国大学生集成电路创新创业大赛/蜂鸟处理器+OV5640摄像头模块开发
蜂鸟处理器+OV5640摄像头模块开发
全国大学生集成电路创新创业大赛 作者 王翔 发布于 2021-05-10 23:51(1978 天前) 15215 浏览

本队伍编号CICC3042,本文重点介绍蜂鸟处理器和OV5640模块的结合方式、OV5640的窗口调节,以及图像的resize方法,试图以一种简单快速的方式得到令人满意的OV5640的输出图像,为进一步的图像处理做准备。


我们首先实现了摄像头采集模块和HDMI显示模块,随后将二者与蜂鸟结合,结合方式如下所示,虚线框中为我们添加的部分,同时对蜂鸟原来的外设进行裁剪,仅保留需要的部分。这里OV5640和HDMI模块成为蜂鸟的外设,可以由处理器控制启动,并进行少量配置。同时为了降低开发难度,二者的很多配置是固定的,通过verilog硬件模块初始化,不受处理器控制,这样的优点是初始化速度快、降低了软硬件开发难度;缺点是缺少配置灵活性,不能在运行时修改配置,但是在一个工程中摄像头的配置经常是固定的,因此缺点带来的损失并不大。


摄像头模块和HDMI模块的具体结构如下,OV5640的寄存器配置保存在查找表中,Reg Config模块上电后自动将寄存器配置通过I2C接口发送给摄像头;Frame Capture提供摄像头的时钟驱动,并接收其采集的RGB数据,写到FIFO中,FIFO实现两个不同时钟模块的数据通信;我们实现了通过AXI接口直接访问DDR的DMA模块,包括读写两个通道,摄像头采集的数据通过写通道写入DDR,而HDMI显示模块通过读通道将DDR的数据显示到屏幕上;LCD Driver根据显示分辨率生成HDMI或VGA时序驱动;HDMI Out模块为Digilent提供的IP,其输出引脚直接接到HDMI接口上;Controller模块提供系统工作的状态机,控制两个模块的运行。


接下来介绍OV5640摄像头模块,可以参考OV5640 datasheet,这里推荐CrazyBingo提供的教程 http://crazyfpga.com/ 。


在实际工程中,我们可能需要调节输出窗口大小,OV5640 datasheet中给出了设置采样窗口大小的寄存器,如下图所示。进行窗口设置的寄存器为0x3800-0x3813。

由下图得知0x3808、0x3809和0x380A、0x380B决定了最终输出的窗口大小,一般情况下我们只需要改动这四个寄存器的值即可调节输出窗口。


上述调节窗口的方法用于简单调节,其本质上是在采样的原图基础上直接裁剪,仅得到了原图的一部分,因此显示器输出也是原图的一部分。有时我们希望显示器的显示范围更大或者更加灵活,可以将摄像头采集的图像经过resize后保存,两种方法的区别如下图所示:


这时为了方便地实现resize,可以利用Vivado HLS,具体为hls_video.h中的hls::Resize函数或hls::Resize_opr_linear函数,数据端口综合为axi-stream接口,顶层函数代码如下:


void resize(hls::stream > &in, hls::stream > & out) {

#pragma HLS INTERFACE axis port=in

#pragma HLS INTERFACE axis port=out

 

#pragma HLS dataflow

    hls::Mat raw_img;

    hls::Mat resize_img;

    stream_to_mat(in, raw_img);

//    hls::Resize(raw_img, resize_img, HLS_INTER_LINEAR);

    hls::Resize_opr_linear(raw_img, resize_img);

    mat_to_stream(resize_img, out);

}


生成的模块如下:

将其连接到Frame Capture和Write FIFO之间即可,这种连接方式在摄像头采集数据的同时进行处理,因为摄像头的帧率有限,resize模块的处理时间足够,所以不会影响性能。实际测试发现采集的图像具有较好的视野范围,并且可以随意修改输出图片大小。


全部回复 26
突刺咸鱼
突刺咸鱼1977 天前 · 16 楼
回复 王翔:

我们用visio画的

好的,谢谢大佬。

王翔
王翔1977 天前 · 17 楼
回复 突刺咸鱼:

大佬,麻烦问一下,你们的框图用什么软件画的啊。

我们用visio画的

突刺咸鱼
突刺咸鱼1977 天前 · 18 楼
回复 王翔:

你好,我们用的是Nexys Video

大佬,麻烦问一下,你们的框图用什么软件画的啊。

悟空
悟空1978 天前 · 19 楼
回复 王翔:

mcu_jtag分配到板子的PMOD上,通过杜邦线连到调试器

嗯嗯,多谢了!!

王翔
王翔1978 天前 · 20 楼
回复 悟空:

你好我想问一下你下载软件程序时候是不是只下载ft232的驱动,然后连接uart接口就行了,你的mcu_jtag是连在板子的jtag上吗,那个需要接上不。大神求指教

mcu_jtag分配到板子的PMOD上,通过杜邦线连到调试器

悟空
悟空1978 天前 · 21 楼
回复 王翔:

我是通过命令行下载的,没有用过Nuclei Studio IDE,也没有遇到这个问题。可能是调试器驱动没有安装好导致电脑没有识别设备?

你好我想问一下你下载软件程序时候是不是只下载ft232的驱动,然后连接uart接口就行了,你的mcu_jtag是连在板子的jtag上吗,那个需要接上不。大神求指教

王翔
王翔1978 天前 · 22 楼
回复 悟空:

你好,我想请问一下我把蜂鸟移植到genesys2板子上,硬件中把蜂鸟两个gpio引出到板子的uart_tx,rx。mcu_jtag四个信号引出到硬件下载的jtag中。下载sdk程序时候把uart和jtag都连上了还是识别不了,报下面错误。请问一下你是怎么下载的呢,哪里出问题了吗


我是通过命令行下载的,没有用过Nuclei Studio IDE,也没有遇到这个问题。可能是调试器驱动没有安装好导致电脑没有识别设备?

悟空
悟空1978 天前 · 23 楼

你好,我想请问一下我把蜂鸟移植到genesys2板子上,硬件中把蜂鸟两个gpio引出到板子的uart_tx,rx。mcu_jtag四个信号引出到硬件下载的jtag中。下载sdk程序时候把uart和jtag都连上了还是识别不了,报下面错误。请问一下你是怎么下载的呢,哪里出问题了吗


突刺咸鱼
突刺咸鱼1978 天前 · 24 楼
回复 王翔:

你好,我们用的是Nexys Video

好的,谢谢

王翔
王翔1978 天前 · 25 楼
回复 突刺咸鱼:

你好,麻烦问一下你用的是MCU200T吗,这个板子上没有配置DDR啊,还是你用的是另外的板子啊。。

你好,我们用的是Nexys Video

突刺咸鱼
突刺咸鱼1978 天前 · 26 楼

你好,麻烦问一下你用的是MCU200T吗,这个板子上没有配置DDR啊,还是你用的是另外的板子啊。。

💡 请 登录 后参与讨论(微信扫码即登录/注册)