专栏首页OpenFPGA基于OV5640的FPGA-DDR HDMI显示

基于OV5640的FPGA-DDR HDMI显示

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

本文分享自微信公众号 - OpenFPGA(OpenFPGA),作者:碎碎思

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从 IP 开始,学习数字逻辑:FIFO 篇(上)

    使用 ip 对于数字逻辑方面的工作来说,是非常正常的,基础的 ip 之于数字逻辑设计,与与非门相比大概只是设计层次上的差别。更何况对于 SoC 公司来说...

    碎碎思
  • 从 IP 开始,学习数字逻辑:FIFO 篇(下)

    在使用各种手段测试我们的 FIFO ip 之前,我们首先得写一个 testbench。testbench 是什么,Vivado 会告诉你就是一个普通的 ...

    碎碎思
  • System Generator从入门到放弃(八)-使用多时钟域实现多速率系统设计

    System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Si...

    碎碎思
  • FIFO解析攻略

    First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。是一种先进先出...

    数字芯片社区
  • FIFO系列(一):FIFO深度计算

    当异步FIFO读写端口的throught-put(吞吐量)不同时,会遇到数据丢失的问题,需要考虑FIFO中的深度问题,即为满足读写流畅不卡顿(数据不丢失)时,F...

    根究FPGA
  • NAACL2016年度论文:无监督神经网络理解虚构人物关系

    【新智元导读】非监督式学习如何确定小说中动态的人物角色关系?本论文提出了一种新的神经网络架构的RMN,通过结合词典学习来对关系描述符进行学习,是深度循环自编码器...

    新智元
  • Hive Join详解

    最近对hive的join用的比较多,特地归纳下常用的各种连接,看看hive的连接和我们普通的是否有不同。创建ta.txt和tb.txt两个文件,加载数据:

    幽鸿
  • 解析阻止机器学习的十种网络攻击

    即使是瑟曦.兰尼斯特的阴谋诡计或者乔拉.莫尔蒙爵士父亲般的保护(译注:两者都是HBO剧集《权力的游戏》中的人物)也无法阻止攻击者攻破HBO的网络并窃取了1.5T...

    安恒信息
  • [深度概念]·深度学习术语表(一)

    对于刚开始学习深度学习的新人来说,深度学习术语掌握起来会非常困难。这篇深度学习词汇表包含了一些深度学习的常用术语,以帮助读者深入了解特定主题。

    小宋是呢
  • 机器学习工程师最常用的十大算法

    毫无疑问,机器学习/人工智能的子领域在过去几年越来越受欢迎。目前大数据在科技行业已经炙手可热,而基于大量数据来进行预测或者得出建议的机器学习无疑是非常强大的。一...

    机器人网

扫码关注云+社区

领取腾讯云代金券