使用VHDL语言控制相机

2023-11-09

将CMOS相机与ZYNQ-7000系列FPGA SoC连接,并将实时视频输入输出到VGA屏幕。

硬件

软件

概述

在这个项目中,我们将从头开始构建一个FPGA映像平台。 目的是将VGA分辨率CMOS相机与MiniZed Development板连接,并将获取的实时视频输入输出到VGA监视器。 完整的成像流程将在SoC的PL(可编程逻辑)部分中实现。

图略

上图显示了来自OV7670 CMOS摄像机的实时QVGA视频馈送,该视频流被传输到VGA屏幕。

图略

硬件设计

该项目的硬件包括一个OV7670摄像机,一个ZYNQ FPGA SoC微型开发板,一个VGA DAC和一个通用VGA监视器。

MiniZed包含一个Arduino连接器和2个PMOD连接器。 VGA PMOD将连接到两个PMOD,而OV7670摄像头将通过公对母飞线连接到Arduino连接器。 引脚将配置为以2.5V逻辑电平运行,以便兼容电接口。

相机

OV7670是Omnivison提供的VGA分辨率的CMOS并行摄像机。 摄像机可以在1.7V至3V的电压下工作。 摄像机接口由并行的8位总线,同步信号VSYNC和HSYNC,像素时钟,主时钟以及复位和掉电信号组成。

图略

帧捕获模块

图略

摄像机接口代码由两个主要模块组成。 输入的捕获图像和摄像机配置图像。 输入捕获代码负责将像素传输到帧缓冲区。 该模块对来自摄像机的像素进行解码。

每个像素打包成2个连续字节。输入捕捉模块将其转换为RGB444。这样做是为了节省空间,因为VGA接口使用RGB444接口。

该相机支持多种像素图像格式,但是在此应用程序中选择的一种是RGB565,这意味着红色,绿色和蓝色分别获得5、6和5个像素。

图略

摄像机通过SCCB(串行摄像机通信总线)进行配置。这主要与I2C兼容。

VGA

视频存储

顶层设计

设计原理图如下所示。 顶层设计包括ZYNQ-7000 PS部分和PL部分中实现的可编程逻辑模块。 由于所有逻辑都在PL中实现,因此这是一种流传输体系结构。 来自摄像机的所有数据都将直接传输到VGA屏幕。

PL逻辑块如下:

  • OV7670输入捕捉模块
  • OV7670摄像机配置模块
  • 用于存储完整QVGA帧的BRAM
  • ZYNQ-7000
  • 时钟向导
  • 地址生成器
  • VGA IP核

OV7670配置模块在HDL中实现I2C协议,并且从LUT(查找表)中读取命令。

图略

双端口BRAM用于存储和读取数据。 像素时钟源是双端口BRAM的PortA时钟。 BRAM的端口A用于存储摄像机的图像。 BRAM的端口B与地址生成器接口,该地址生成器读取数据并将像素传输到VGA IP模块。

图略

时钟向导生成一个25.175 MHz时钟,为VGA模块提供时钟。这是640x480分辨率所需的时钟。 50MHz的第二个时钟用于为配置模块提供时钟。

图略

在综合和实施阶段之后,将生成比特流。下一步是启动SDK,创建Hello world项目,传输比特流并运行应用程序。

图略

下图显示了完整的硬件平台。 重要的是要使电线的长度短,以避免信号完整性问题。 OV7670连接到MiniZed。 相机硬件在相机前放置一个盒子框架。

图略

一个重要的注意事项是使用正确设置对摄像机进行配置。 下图可以看到配置相机以YCbCr图像格式输出时获得的令人迷惑的效果。 如上所述,上述架构的正确格式是RGB565。

图略

总结

该项目展示了如何将CMOS并行摄像头与FPGA SoC接口。 QVGA摄像机帧以每秒30帧的速度流到VGA监视器,从而在MiniZed SoC上实现了完整的成像平台。

原理图

源代码

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VHDL语言控制相机 的相关文章

  • Xilinx ISE 14.7 设置编辑器字体大小

    左上角 edit preference
  • ARM Mbed网络监控温度

    硬件 软件 介绍 温度测量是最基本 最常执行的测量之一 它可以是房间的温度 人的温度或设备的温度 能够通过Internet远程监视温度具有许多潜在的重要应用 例如 许多老人独自生活 如果他们生病了 可能要过一段时间才能发现他们处于危机中 如
  • 【VHDL】随机存储器RAM、只读存储器ROM

    VHDL 随机存储器设置 RAM程序 LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL ENTITY RAM 8 IS PORT CS RD WR IN STD LOGIC CLK IN STD LOGIC
  • 电路设计相关

    本人才疏学浅 孤陋寡闻 下文若有不当之处 还请赐教 1 一些概念 施密特触发器 施密特触发器采用电位触发方式 其状态由输入信号电位维持 对于负向递减和正向递增两种不同变化方向的输入信号 施密特触发器有不同的阈值电压 对于标准施密特触发器 当
  • Altera Quartus 错误 (12007):顶层设计实体“alt_ex_1”未定义

    我看了之前所有的问题 似乎没有人有问题 和我的一样简单 我也在网上搜索过 但找不到解决方案 我是 VHDL 新手 正在尝试编译提供的简单示例 由Altera设计 如下 library ieee use ieee std logic 1164
  • VHDL:使用输入端口是不好的做法吗?

    我有一个程序 我按照以下方式使用 inout 端口 port inout unsigned 9 downto 0 if port gt 10 then port lt port 1 end if 我正在使用 inout 端口 这样我就可以读
  • 如何使用依赖于实体的其他通用参数的通用参数?

    我正在尝试转换一些 Verilog 代码 这些代码为 UART 模块从较快的时钟生成较慢的时钟 原始的 verilog 代码基于 fpga4fun com 上的模块 这是我尝试将其转换为基于 VHDL 的设计 entity baud gen
  • 使用通用参数作为端口数组长度

    我想做的事 entity FIRfilter is generic NTAPS integer port h in array 0 to NTAPS 1 of std logic vector 15 downto 0 end FIRfitl
  • 二进制补码 VHDL

    我只是想用 VHDL 制作一个简单的二进制补码设备 但它抛出了这个非常烦人的错误 我不确定我做错了什么 可能是一些非常愚蠢的事情 错误是 错误 10327 twocompliment vhd 21 处的 VHDL 错误 无法确定运算符 na
  • 请帮助我解决VHDL编译错误[重复]

    这个问题在这里已经有答案了 library IEEE use IEEE std logic 1164 all entity doorlock is port reset in std logic enable in std logic pa
  • Doxygen:使用 C++ 和 VHDL 进行项目的无缝文档

    我正在建立一个关于某种库的文档 该库由 C C 部分和 VHDL 部分以及一些仅包含 doxygen 的指导性页面组成 他们必须被放入一个独立的组中 到目前为止一切正常 漂亮又蓬松 但是如果我想通过使用优化 vhdl 子目录中的输出怎么办O
  • 如何在 VHDL 中将整数作为十六进制写入标准输出?

    我可以打印一个integer作为十进制到标准输出 library std use std textio all entity min is end min architecture behav of min is begin process
  • VHDL 中的 NULL 语句

    其实际目的是什么nullVHDL 中的声明 考虑以下代码 1 CASE s IS BEGIN WHEN 0 gt y lt 0 WHEN 1 gt NULL END CASE 2 CASE s IS BEGIN WHEN 0 gt y lt
  • VHDL 中的进程是可重入的吗?

    一个进程是否可以连续运行两次或多次VHDL 如果在进程的顺序执行未完成的情况下发生另一个事件 在敏感信号列表上 会发生什么 有可能还是我的VHDL流程中的模型完全错误 进程运行时不会发生任何事件 当进程被事件唤醒时 它会运行到完成 结束进程
  • 在 VHDL 中使用 SB_RGBA_DRV 原语

    我在使用为 Lattice ICE40UP fpga 提供的 SB RGBA DRV 原语时遇到问题 技术库提供了一个 verilog 示例 我可以使用它 但是当我尝试在 VHDL 中使用它时 P R 失败 输出以下消息 错误 非法连接 S
  • 学习 VHDL 的最佳方法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • 仅使用 std_logic_vector 包将 std_logic_vector 与常量进行比较

    我仅在 VHDL 文件中使用以下包 library IEEE use IEEE STD LOGIC 1164 ALL 在代码中 我将 std logic vector 信号 A 与常量值进行比较 例如 if A lt 00001011 th
  • VHDL STD_LOGIC_VECTOR 通配符值

    我一直在尝试用 VHDL 代码为我在 Altera DE1 板上实现的简单 16 位处理器编写有限状态机 在有限状态机中 我有一个CASE处理不同 16 位指令的语句 这些指令由 16 位 STD LOGIC VECTOR 带入 FSM 但
  • VHDL:如何声明可变宽度通用[重复]

    这个问题在这里已经有答案了 我想创建一个 VHDL 实体 其中一个泛型可以更改另一个泛型的宽度 entity lfsr n is generic WIDTH integer 32 counter width POLYNOMIAL std l

随机推荐

  • Windows 11 & Server 2022 HLK kit WHQL认证注意事项

    微软已经发布Windows 11 Server2022 HLK WHQL 测试套装 针对这一版HLK 有一个地方十分值得注意 在创建Porject的时候会出现 is windows driver Project 选择框 这一选项目前是用于工
  • (小米系统系列一)小米/红米BL解锁,解BL锁方法(亲测可用)

    文章参考自原作者 原作者链接 https www bilibili com read cv3305336 https www xiaomi cn post 17982230 http www miui com unlock download
  • Java Eclipse如何调试代码

    下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法 public class Test1 public static void main String args for循环 如果for后面 内的条件一直成立 内的代码一直执行
  • Pandas基础操作

    Pandas基础 文章目录 Pandas基础 一 Series 二 DataFrame 三 索引值 四 索引和选取 loc和iloc函数讲解 五 行和列的操作 map apply applymap函数讲解 Pandas的函数应用 层级索引
  • 数据结构与算法之快速排序

    package com yg sort author GeQiLin date 2020 2 26 21 00 import java util Arrays public class QuickSort private static in
  • [SWPUCTF 2021 新生赛]easyupload2.0

    打开以后是一个文件上传的界面 然后用burp抓包看一下 传入一个php文件 发现php是不行滴 然后想到用phtml改一下后缀 看是否可以略过 然后发现掠过了 爆出来了路径 上传成功 直接用蚁建 lianjie 链接成功 然后目录寻找fla
  • pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析

    pthread mutex t 和 pthread cond t 配合使用的简要分析 1 原理 假设有两个线程同时访问一个全局变量 n 这个全局变量的初始值等于0 Int n 0 消费者线程 A 进入临界区 访问 n A 必须等到 n 大于
  • idea~不定时更新

    idea 不定时更新 类结构图 全局搜索和替换 修改鼠标停留 并显示api描述 开启idea下方边框 https www jetbrains com help idea 2019 2 using code editor html utm s
  • python运算符讲解

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 疫情之下 你我素未谋面 但你一定要平平安安 一 起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 运算符 python运算符 一 运算符类型 二 实际应
  • 【超详细】gitee+picgo个人图床搭建+插件安装bug处理

    超详细 gitee picgo个人图床搭建 各种插件安装bug处理 你好我是久远 最近在搭个人静态网页 到了最后一步了 传了几篇文章上去 结果文章传上去 了 图片全都失效了 没有办法 用现成的图床吧 担心哪天网站不稳定 图片全炸掉 所以最后
  • Android10.0 Binder通信原理(九)-AIDL Binder示例

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 【文献调研】慢病患者就医行为预测:就医选择行为有哪些?预测什么?如何预测?慢病患者?

    文章目录 0 吾日三问 1 基于医保数据的就医行为预测及推荐模型的研究 1 1 摘要 1 2 基于张量CP分解的就医行为分组预测模型 1 3 总结 2 居民就医行为主要影响因素的调查研究 2 1 摘要 2 2 相关内容 3 分级诊疗背景下多
  • 2020-11-22

    实验三 XSS和SQL注入 实验目的 了解什么是XSS 了解XSS攻击实施 理解防御XSS攻击的方法 了解SQL注入的基本原理 掌握PHP脚本访问MySQL数据库的基本方法 掌握程序设计中避免出现SQL注入漏洞的基本方法 掌握网站配置 系统
  • Windows批处理(cmd/bat)常用命令小结

    一 前言 批处理文件 batch file 包含一系列 DOS命令 通常用于自动执行重复性任务 用户只需双击批处理文件便可执行任务 而无需重复输入相同指令 编写批处理文件非常简单 但难点在于确保一切按顺序执行 编写严谨的批处理文件可以极大程
  • Josephus问题,数组和链表(C++实现)

    文章目录 问题 需求分析 ADT定义 关键思路 问题 设有n个人围坐在圆桌周围 现从第s个人开始报数 数到第m的人出列 然后从出列的下一个人重新开始报数 数到第m的人又出列 如此反复直到所有的人全部出列为止 需求分析 n个人坐满一张圆桌 为
  • verilog赋多位值_Verilog重点解析(2)(赋值)

    源自 微信公众号 数字芯片实验室 1 连续赋值和过程赋值之间有什么区别 2 initial和always中的赋值有什么区别 initial和always中的赋值都是过程赋值 3 阻塞和非阻塞赋值之间有什么区别 阻塞和非阻塞赋值都是过程赋值
  • Zabbix监控Windows客户端设置

    Zabbix监控Windows客户端设置 一 Windows被控端安装 1 Windows代理下载 2 安装代理 二 检查被控端状态 1 查看端口 2 检查代理服务 3 服务端查看获取被控信息 三 Web端添加被控主机 1 添加主机信息 2
  • [1078]Win10配置Java环境变量

    文章目录 1 下载安装JDK 2 配置环境变量 2 1 找到jdk的安装目录 2 2 添加环境变量 2 3 测试 1 下载安装JDK 下载地址 安装就不赘述了 2 配置环境变量 2 1 找到jdk的安装目录 win e打开资源管理器 找到j
  • 手势控制arduino-wifi小车(含代码)

    手势控制器 小车完成图 贴代码 手势控制器代码 include
  • 使用VHDL语言控制相机

    将CMOS相机与ZYNQ 7000系列FPGA SoC连接 并将实时视频输入输出到VGA屏幕 硬件 软件 概述 在这个项目中 我们将从头开始构建一个FPGA映像平台 目的是将VGA分辨率CMOS相机与MiniZed Development板