当前位置: 首页 > news >正文

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 ,	// 27Minput        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名片。
网盘资料如下:
在这里插入图片描述

相关文章:

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

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

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名(选取3台,修改为master01、master02、master03)安装官方…...

Codeforces Round 908 (Div. 2)题解

目录 A. Secret Sport 题目分析: B. Two Out of Three 题目分析: C. Anonymous Informant 题目分析: A. Secret Sport 题目分析: A,B一共打n场比赛,输入一个字符串由A和‘B’组成代表A赢或者B赢(无平局),因为题目说明这个人…...

Redis笔记 Redis主从同步

文章目录 Redis主从搭建主从架构主从数据同步原理全量同步增量同步repl_backlog原理 主从同步优化小结 Redis主从 搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从数据…...

数据结构-Prim算法构造无向图的最小生成树

引子: 无向图如果是一个网,那么它的所有的生成树中必有一颗生成树的边的权值之和是最小的,我们称 这颗权值和最小的树为:“最小生成树”(MST)。 其中,一棵树的代价就是树中所有权值之和。 而…...

MFC串口通信(SerialPort)

目录 1、SerialPort类的介绍和使用: (1)、SerialPort类的功能介绍 (2)、SerialPort类提供接口函数的介绍 1)、InitPort函数 2)、控制串口监视线程函数 3)、获取事件&#xff0c…...

Vim基本使用操作

前言:作者也是初学Linux,可能总结的还不是很到位 Linux修炼功法:初阶功法 ♈️今日夜电波:美人鱼—林俊杰 0:21━━━━━━️💟──────── 4:14 …...

【深蓝学院】手写VIO第8章--相机与IMU时间戳同步--作业

0. 题目 1. T1 逆深度参数化时的特征匀速模型的重投影误差 参考常鑫助教的答案:思路是将i时刻的观测投到world系,再用j时刻pose和外参投到j时刻camera坐标系下,归一化得到预测的二维坐标(这里忽略了camera的内参,逆深…...

Naocs配置中心配置映射List、Map、Map嵌套List等方式

一、配置映射List 1、常规逐个配置方式,示例如下: 代码: @Data @Configuration @ConfigurationProperties(prefix = "list-json-str") public class ConfListByJsonStr implements Serializable, InitializingBean {@ApiModelProperty("映射结果集")…...

如何通过CRM系统进行销售机会管理?

销售机会管理是在销售过程中对潜在客户的精细化管理,销售机会管理的本质是公司用于管理销售机会通用的工具和方法。对于希望建立长期客户关系的现代销售团队来说,CRM客户管理系统是必不可少的工具。那企业如何通过CRM系统进行销售机会管理? …...

解决idea启动tomcat控制台中文乱码

#1.tomcat日志中文乱码# 如图这种情况,一般在idea用tomcat跑一个web项目启动后tomcat日志在控制台打印出来会出现中文乱码的情况 解决方案1:tomcat的日志配置文件的编码修改,找到tomcat安装目录conf下的logging.properties,encod…...

vscode + cmake + opencv example

nice try on macos CMakeLists.txt cmake_minimum_required(VERSION 3.20) #添加OPENCV库 #指定OpenCV版本,代码如下 #find_package(OpenCV 3.3 REQUIRED) #如果不需要指定OpenCV版本,代码如下 find_package(OpenCV REQUIRED)#添加OpenCV头文件 includ…...

day57【动态规划】647.回文子串 516.最长回文子序列

文章目录 647. 回文子串516.最长回文子序列 647. 回文子串 力扣题目链接 代码随想录讲解 题意:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的…...

分享vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?

VMware和Oracle VM VirtualBox虚拟机的区别主要体现在以下几个方面: 首先两种软件的安装使用教程如下: 1:VMware ESXI 安装使用教程 2:Oracle VM VirtualBox安装使用教程 商业模式:VMware是一家商业公司,而…...

YOLOV5模型运行

1安装包 如果已经有了torch-cuda环境直接在环境下 pip install -r requirements.txt 2解决报错代码 raise ImportError("Failed to initialize: {0}".format(exc)) from exc ImportError: Failed to initialize: Bad git executable. The git executable must be …...

@Autowired和@Resource注解的区别和联系

直接看原文 原文链接: 【精选】Autowired和Resource注解的区别和联系【精选】 ------------------------------------------------------------------------------------------------------------------------------- 先说联系 联系 Autowired和Resource注解都是作为bean…...

设计模式类型

创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系…...

Android修行手册-实现利用POI将图片插入到Excel中(文末送书)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…...

低功耗工业RFID设备应用

随着工业自动化的迅速发展,RFID技术也在工业领域得到了广泛的应用,在近距离非接触读写应用时,常常利用低功耗的工业RFID设备来进行识别,下面我们将详细介绍低功耗工业RFID设备的应用。 低功耗工业RFID设备具有功耗低、体积小、重量…...

# Oracle 库常见问题排查

Oracle 库常见问题排查 文章目录 Oracle 库常见问题排查查询数据库的相关信息查看正在执行的语句杀掉正在执行的sql查看未提交的事务查看锁表 查询数据库的相关信息 查看正在执行的语句 SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.sql_child_number, sq.sq…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

xmind转换为markdown

文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...