FPGA配置采集AR0135工业相机,提供2套工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、AR0135工业相机简介
  • 3、我这里已有的 FPGA 图像处理解决方案
  • 4、设计思路框架
    • AR0135配置和采集
    • 图像缓存
    • 视频输出
  • 5、vivado工程1–>Kintex7开发板工程
  • 6、vivado工程1–>Zynq7100开发板工程
  • 7、上板调试验证
  • 8、福利:工程代码的获取

1、前言

没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。
GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端的A7由GTP,K7有GTX,V7有GTH,更高端的U+系列还有GTY等,他们的速度越来越高,应用场景也越来越高端。。。

本文使用Xilinx的Kintex7和zynq7100开发板配置采集AR0135工业相机,并做HDMI输出显示;AR0135工业相机需要i2c配置才能正常使用,跟博客提供纯verilog实现的i2c代码对AR0135进行配置,本设计配置AR0135输出分辨率为1280x720@60Hz;本博客提供2套vivado工程源码,2套工程的不同点在于使用的FPGA型号不同;本博客详细描述了FPGA配置采集AR0135工业相机的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、AR0135工业相机简介

AR0135是车规级感光芯片,具有高动态、130万全局自动曝光、自动增益等特性,输出分辨率达到了1280x720@60Hz;输出超高清灰度图像,是机器视觉和图像识别领域的明星相机,也广泛应用于工业现场领域;AR0135给人的最直观感受就是画质的超高清,打个不太恰当的比方,当你玩儿OV5640之类的摄像头时,总感觉是在看有码的电影,当你玩儿上了AR0135时,呈现在你眼前的是超高清无码的视觉盛宴。。。
在这里插入图片描述

3、我这里已有的 FPGA 图像处理解决方案

我的主页有FPGA 图像处专栏,该专栏有涵盖了基于FPGA实现各种图像处理的多种方案,包括图像缩放、图像拼接、图像叠加、图像旋转、动态字符叠加、MIPI视频解码、PAL视频解码、CameraLink视频解码、SDI视频解码等等;以下是专栏地址:
点击直接前往

4、设计思路框架

本博客提供2套vivado工程源码,2套工程的不同点在于使用的FPGA型号不同,第1套vivado工程源码使用的FPGA平台为Kintex7;第2套vivado工程源码使用的FPGA平台为Zynq7100,图像缓存至PS端DDR3,2套vivado工程源码设计思路框架分别如下:
在这里插入图片描述
在这里插入图片描述

AR0135配置和采集

AR0135工业相机需要i2c配置才能正常使用,跟博客提供纯verilog实现的i2c代码对AR0135进行配置,本设计配置AR0135输出分辨率为1280x720@60Hz;代码如下:
在这里插入图片描述
模块顶层如下:

module AR0135_CFG_RX #(
	parameter I2C_ID_ADDR   = 8'h20     ,	// AR0135的i2c器件地址
	parameter SYS_CLK_FREQ  = 100_000000,	// 模块参考时钟频率
	parameter I2C_CLK_FREQ  = 10_000    ,	// i2c运行时钟频率
	parameter OUT_PCLK_FREQ = 74_250000     // AR0135输出像素时钟频率
)(
	input        sys_clk       ,
	input        resetn        ,
	input        i_ar0135_dclk ,	// 27M
	input        i_ar0135_pclk ,	
	input        o_ar0135_xclk ,		
	input        i_ar0135_vs   ,
	input        i_ar0135_de   ,	
	input  [7:0] i_ar0135_data ,	
	output       o_ar0135_vs   ,
	output       o_ar0135_de   ,	
	output [7:0] o_ar0135_data ,	
	output       i2c_ar0135_sck,
	inout        i2c_ar0135_sda
);

AR0135摄像头需要一个27M的运行时钟;AR0135视频采集后输出8bit的灰度图像;

图像缓存

经常看我博客的老粉应该都知道,我做图像缓存的套路是FDMA,他的作用是将图像送入DDR中做3帧缓存再读出显示,目的是匹配输入输出的时钟差和提高输出视频质量,关于FDMA,请参考我之前的博客,博客地址:点击直接前往

还有我用到了Zynq7100开发板,有别于全网其他博主的套路,他们基本都是用以VDMA为核心的图像缓存架构,这样做固然是可以的,但这一大堆IP你看不到源码,且用起来很烦,哪一个脚连错了都可能导致IP工作不起来,而且这些IP还需要用SDK配置,对于没有嵌入式C编程基础的兄弟而言很是头疼,我事儿仰望星空,我们就像快乐的玩儿一玩儿FPGA为什么就这么难呢?
就目前而言,VDMA有如下不便之处:

1:需要将视频转为AXI4-Stream流,无论是自己用fifo转还是使用官方的Video In to AXI4-Stream IP转,无疑都增加了资源消耗,对资源紧张的FPGA不宜,再者也加大了FPGA开发难度,对于刚入门的兄弟而言望而却步,最后,Video In to AXI4-Stream这个 IP也是个黑箱,出了问题排查问题太繁琐;
2:需要SDK配置,跑个VDMA还要打开SDK去调用官方库函数进行一大堆配置,无疑是烦,加之有些做硬件的兄弟c语言水平跟我一样菜,根本就搞不定嵌入式C,只想安安心心地干点儿FPGA的活儿就这么难吗?哈哈。。。
3:VDMA输出还要调用Video Time Controller和AXI4-Stream to Video Out这两个IP才能实现AXI4-Stream视频流到VGA时序的转换,实属费力又不讨好,还是同样的问题,增加资源消耗,黑箱操作,出了问题排查太繁琐;

基于此,我用zynq做图像缓存时就不用VDMA,而是用FDMA,在zynq中用FDMA取代VDMA具有以下优势:

1:不需要将输入视频转为AXI4-Stream流;节约资源,开发难度低;
2:不需要SDK配置,不要要会嵌入式C,纯FPGA开发者的福音;
3:看得到的源码,不存在黑箱操作问题;

关于如何在zynq中使用FDMA,请参考我之前的博客,博客地址:点击直接前往

视频输出

视频从FDMA读出后,经过VGA时序模块和HDMI发送模块后输出显示器,代码位置如下:
在这里插入图片描述
VGA时序配置为1920X1080,HDMI发送模块采用verilog代码手写,可以用于FPGA的HDMI发送应用,关于这个模块,请参考我之前的博客,博客地址:点击直接前往

5、vivado工程1–>Kintex7开发板工程

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:AR0135,分辨率1280x720@60Hz;
输出:HDMI显示器,分辨率1280x720@60Hz;
应用:FPGA的AR0135视频采集输出;
工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

6、vivado工程1–>Zynq7100开发板工程

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:AR0135,分辨率1280x720@60Hz;
输出:HDMI显示器,分辨率1280x720@60Hz;
应用:Zynq的AR0135视频采集输出;
工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述
由于没有用VDMA,所以SDK仅需运行一个简单的hello world即可;

7、上板调试验证

静态展示,Kintex7开发板工程为例;
在这里插入图片描述
动态展示,Zynq7100开发板工程为例;

Zynq7100-AR0135

8、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124392.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

投票助手图文音视频礼物打赏流量主小程序开源版开发

投票助手图文音视频礼物打赏流量主小程序开源版开发 图文投票:用户可以发布图文投票,选择相应的选项进行投票。 音视频投票:用户可以发布音视频投票,观看音视频后选择相应的选项进行投票。 礼物打赏:用户可以在投票过…

安卓开发实例:高德地图

想要在app里面显示高德地图,遇到了很多问题,开始想显示百度地图的,个人感觉不喜欢百度地图,跟高德地图有缘,所以就弄个高德地图。 当然你可以直接看开发文档啊,慢走不送,谢谢。 https://lbs.ama…

3-知识补充-MVC框架

3-知识补充-MVC框架 文章目录 3-知识补充-MVC框架MVC概述M、V、C各自负责功能及常用包MVC框架图非前后端分离框架图前后端分离框架图 MVC概述 MVC(Model、View、Controller)是软件工程中的一种**软件架构模式,它把软件系统分为模型、视图和控…

【Python自学笔记】python os.getcwd文件目录找不对关于“None”在VSCode里面的奇葩报错

写小组项目的时候需要按照路径读入数据表,数据库和图片列表显示到html,按ChatGPT的答案写了python os.getcwd(),结果迁移到同组同学的电脑上总是报错。 经过一番查询,在CSDN上发现一个完美解决问题的好帖,特此存下链接…

商业模式思维导图

一、什么是商业模式?简单的说,商业模式就是公司通过什么途径或方式来赚钱? 商业模式的核心是 创造价值-获取价值-传递价值。 它有3个重要的环节,创造价值是基于客户需求,提供解决方案,传递价值是通过资源配…

Linux重定向和缓冲区

文章目录 知识回顾&取地址重定向 重定向底层文件描述符分配规则dup2标准输出和标准错误的区别 缓冲区缓冲区总结 知识回顾 我们在之前有了解过输出重定向>, >>,可以让echo命令本来是打印到屏幕上而变成了把这些数据写到文件中,并且可以追加或者覆盖文…

操作系统 day09(线程)

线程 为什么引入线程 在没引入进程之前,系统中的各个程序只能串行的执行,比如:只能先听歌,再聊QQ。引入进程之后,各个程序可以并发执行,比如:一边听歌,一边聊QQ。但是现在QQ可以一…

使用篇(一):Ai绘图-Stable Diffusion WebUI

1.介绍 1.1 概述 Stable Diffusion Web UI是一个基于Stable diffusion AI模型的AI绘画软件。它是一个多功能的AI绘画软件,支持以下几个功能: 用户可以输入一堆关键词或一句话来生成图片。 它使用了图像加噪去噪过程中的生成模型—— Duffusion&#xff…

Xilinx FPGA SPIx4 配置速度50M约束语句(Vivado开发环境)

qspi_50m.xdc文件: set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design] set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design] set_property CONFIG_VOLTAGE 3.3 [curren…

【Unity细节】Json序列化时出现:An item with the same key has already been added. Key:

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

【Unity细节】如何让组件失活而不是物体失活

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

揭秘!2024年热门的图标设计工具

在这个瞬息万变的世界里,设计师们对创新和实用的工具的渴望日益热切。我们需要时刻紧跟潮流,发掘和尝试最新,最有价值的图标设计工具,才能在剧烈的市场竞争中引人注目。以下是我们细心挑选的2024年图标设计工具的热门推荐&#xf…

OpenAI开发者大会掀起风暴:GPT模型价格狂降50%,应用商店即将亮相,AI技术将引爆全球!

OpenAI首届开发者大会召开了! 关键信息: GPT-4升级版GPT-4 Turbo来了,上下文窗口达到128k,为GPT-4的4倍;OpenAI还降低了几乎所有模型的API使用价格,整体便宜了一半多;GPT-4系列的多模态能力向B…

2023年11月PHP测试覆盖率解决方案

【题记:最近进行了ExcelBDD PHP版的开发,查阅了大量资料,发现PHP测试覆盖率解决方案存在不同的历史版本,让我花费了蛮多时间,为了避免后人浪费时间,整理本文,而且网上没有给出Azure DevOps里面P…

ElementUI之el-progress动态修改进度条里面文本颜色与进度条色块统一

1.效果&#xff1a; 2.实现方式 通过行内style样式动态给整个progress赋颜色 再在样式里给进度条文字单独设置颜色为默认继承父级颜色就ok啦 <el-progress class"custom-progress" stroke-linecap"square" :style"{color:item.color}" :colo…

cpu 支持内存带宽与内存最大长度的关系《鸟哥的 Linux 私房菜》

鸟哥的 Linux 私房菜 -- 计算机概论 -- 計算机&#xff1a;辅助人脑的好工具 同理&#xff0c;64 位 cpu 一次接受内存传递的 64bit 数据&#xff0c;内存字节地址用 64 位记录&#xff0c;最多能记录2^64个字节2^64Bytes2^34GB17179869184GB2^24TB&#xff0c;理论上&#xff…

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…

CSS实现透明度效果的两种方法—— opacity 和 rgba()

在实际开发过程中&#xff0c;为了给用户呈现一些效果&#xff0c;我们需要控制元素的透明度。CSS 提供了 opacity 属性和 rgba() 函数给我们控制透明度&#xff0c;接下来通过一个例子来感受一下两种方法的区别。 <style>.transparentBox {display: inline-block;width…

文生图模型评测之PickScore

文章目录 1. 简介2. 构建数据集2.1 Pick-a-Pic web App2.2 Pick-a-Pic Dataset3. PickScore3.1.1模型结构和损失函数3.2 模型训练3.3 验证模型4. 作用4.1 作为验证模型的验证集4.2 用于模型选择5. 小结论文链接:Pick-a-Pic: An Open Dataset of User Preferences for Text-to-…

LinuxMySql

结构化查询语言 DDL&#xff08;数据定义语言&#xff09; 删除数据库drop database DbName; 创建数据库create database DbName; 使用数据库use DbName; 查看创建数据库语句以及字符编码show create database 43th; 修改数据库属性&#xff08;字符编码改为gbk&#xff09;…