前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于OV5640的FPGA-DDR HDMI显示

基于OV5640的FPGA-DDR HDMI显示

作者头像
碎碎思
发布2020-06-30 11:12:39
1.8K0
发布2020-06-30 11:12:39
举报
文章被收录于专栏:OpenFPGAOpenFPGA

1.1 Xilinx平台DDR3控制器使用

这部分主要是使用Vivado中MIG IP核的使用,网上有很多参考例程,这里就不过多描述了,主要说明及使用,详见文末附件。

1.2 基于OV5640的FPGA-DDR HDMI显示

有了下面的框图,对于本次设计其实是事半功倍的,如下:

驱动架构即数据流向图(我盗图我快乐)

1) 、 OV5640 摄像头接口: 是连接到开发板的物理接口,摄像头模块安装在这个接口上

2) 、 HDMI 接口: 是图形的输出接口, 图像数据从 HDMI 接口输出

3) 、 sensor_decode 模块: 解码 OV5640 摄像头的图像数据, 然后转为 R/G/B 数据, 同时需要产生 HS 信号、 VS 信号、 de 信号提供给后续模块使用。如下面一段代码

1. assign rgb_o = {rgb565[15:11],3'd0 ,rgb565[10:5] ,2'd0,rgb565[4:0],3'd0}; 2. //assign rgb_o = {grid_data_2,grid_data_2,grid_data_2}; 3. assign clk_ce =out_en? byte_flag_r0:1'b0; 4. assign vs_o = out_en ? vsync_d[1] : 1'b0; 5. assign hs_o = out_en ? href_d[1] : 1'b0;

4)、 vga_lcd_driver 模块: 产生 RGB(VGA)输出时序。

5)、 MIG_BURST_IMAGE 模块:管理图像数据和内存管理, MIG_BURST_IMAGE 模块中包括了CH0_FIFO 模块、 CH6_FIFO 模块、 MIG_DDR 控制器、 MSG_FIFO 消息盒、 M_S 内存管理状态机,此外还包括 CH0_FIFO 的读请求,以及 CH6_FIFO 的写请求。

1.1.1 主要代码分析

这节不附源码,所有的源码请参考《003_OV5640_DDR3_DEMO\OV5640_DEMO》,每个源码分析时会附上源码文件名称,只需要找到相关文件即可。

OV5640 的寄存器配置

《i2c_timing_ctrl.v》

本文件主要实现IIC的时序,具体可以参考上面章节关于IIC的介绍。

《I2C_OV5640_RGB565_Config.v》

本文件主要是OV5640所有的寄存器配置,主要的寄存器都有注释,可以参考源文件。

sensor_decode.v

《sensor_decode.v》

OV5640 输入的图像是 640X480 分辨率的图形,为了观察数据的方便, 未来观察行场信号是否正确,笔者先利用上一课中用到的测试图形方案数据代码 OV5640 产生的 RGB 数据, 而行场型号继续使用 OV5640 产生的行场信号。 这么做的目的, 主要是我们在对 OV5640 解码的时候可能采样的颜色时序会出问题,但是一开始又不能定位问题, 这样可以循序渐进式解决问题。

vga_lcd_driver.v

《vga_lcd_driver.v》

vga_lcd_driver 模块的作用是产生一副 640X480 分辨率的 RGB 使出时序, RGB 的数据来源来自 CH6_FIFO。 读者可以修改不同分辨率输出不同的测试图形。

FIFO 模块

FIFO的作用在这次工程中主要目的是为了匹配不同速率之间的数据交互,主要包括写入FIFO和读出FIFO,下面以写入FIFO数据为例,另一个FIFO和此相同,请参考示例教程及源码。

《MIG_BURST_IMAGE.v》

CHX_FIFO 是 IP CORE 在 MIG_BURST_IMAGE 模块中被调用, 输入的图像数据需要经过这个 FIFO把宽度是 32bit 的像素点转为 256bit(32bitX8)。 这个模块主要的信号介绍如下:

CHX_FIFO_RST : 用于复位 FIFO,image_data_gen 模块每次新的一帧数据过来的时候,会复位FIFO, 这样实现对 FIFO 的清除。

CHX_wclk_i : 是写 FIFO 的时钟, 这个时钟来自于顶层的模块和 Image_data_gen 时钟一致。

CHX_rclk_i : 同 MIG 控制的用户时钟一致。

CHX_data_i: 一个 32bit 的数据, 测试数据一个像素是 24bit 所以 CH0_data_i 的31bit~24bit 这里是无效的。

CHX_wren_i: 写 FIFO 使能, 连接到 Image_data_gen 的 de 信号上, 通过 Image_data_gen 实现对 FIFO 的写。

CHX_rden_i: 读 FIFO 使能, 这个信号用于从 FIFO 读取 256bit 的数据, 写入到 MIG 控制器

CHX_data_o : 256bit 长度的数据, 用于输出到 MIG 控制的, 所以可以看出每一次写命令写入到 MIG 控制点的数据量是 8 个像素点。

CHX_empty : 笔者 debug 的时候观察的信号, 对程序没有任何作用。

CHX_rusdw_o:用来观察 CHX_FIFO 中有多少数据可以读出来的,也是用来产生 MIG 控制器写MIG 请求的信号。

1.2 编译下载,观察输出

本章实验代码有 2 个如下图所示, 分别对应本课程中每个实验步骤

OV5640_TS_DATA: 增加测试数据代码的部分

OV5640_DEMO: 去掉测试数据采用真实摄像头数据的部分

DOC: 相关参考资料

图3‑17本章节文件夹内容

链接: https://pan.baidu.com/s/1mAbtGQPuYGEzP3JtT8z5sQ

提取码: dwv3

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.2 基于OV5640的FPGA-DDR HDMI显示
    • 1.1.1 主要代码分析
      • OV5640 的寄存器配置
      • sensor_decode.v
      • vga_lcd_driver.v
  • 1.2 编译下载,观察输出
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档