怎样做网站手机客户端,西安招聘网站,医院网站队伍建设,u钙网logo在线设计目录 1、前言免责声明 2、AR0135工业相机简介3、我这里已有的 FPGA 图像处理解决方案4、设计思路框架AR0135配置和采集图像缓存视频输出 5、vivado工程1–Kintex7开发板工程6、vivado工程1–Zynq7100开发板工程7、上板调试验证8、福利#xff1a;工程代码的获取 1、前… 目录 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由GTPK7有GTXV7有GTH更高端的U系列还有GTY等他们的速度越来越高应用场景也越来越高端。。。
本文使用Xilinx的Kintex7和zynq7100开发板配置采集AR0135工业相机并做HDMI输出显示AR0135工业相机需要i2c配置才能正常使用跟博客提供纯verilog实现的i2c代码对AR0135进行配置本设计配置AR0135输出分辨率为1280x72060Hz本博客提供2套vivado工程源码2套工程的不同点在于使用的FPGA型号不同本博客详细描述了FPGA配置采集AR0135工业相机的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等)若大佬们觉得有所冒犯请私信批评教育基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。
2、AR0135工业相机简介
AR0135是车规级感光芯片具有高动态、130万全局自动曝光、自动增益等特性输出分辨率达到了1280x72060Hz输出超高清灰度图像是机器视觉和图像识别领域的明星相机也广泛应用于工业现场领域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端DDR32套vivado工程源码设计思路框架分别如下
AR0135配置和采集
AR0135工业相机需要i2c配置才能正常使用跟博客提供纯verilog实现的i2c代码对AR0135进行配置本设计配置AR0135输出分辨率为1280x72060Hz代码如下 模块顶层如下
module AR0135_CFG_RX #(parameter I2C_ID_ADDR 8h20 , // 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的活儿就这么难吗哈哈。。。 3VDMA输出还要调用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时序配置为1920X1080HDMI发送模块采用verilog代码手写可以用于FPGA的HDMI发送应用关于这个模块请参考我之前的博客博客地址点击直接前往
5、vivado工程1–Kintex7开发板工程
开发板FPGA型号Xilinx–Kintex7–xc7k325tffg676-2 开发环境Vivado2019.1 输入AR0135分辨率1280x72060Hz 输出HDMI显示器分辨率1280x72060Hz 应用FPGA的AR0135视频采集输出 工程Block Design如下 工程代码架构如下 综合编译完成后的FPGA资源消耗和功耗预估如下
6、vivado工程1–Zynq7100开发板工程
开发板FPGA型号Xilinx–Zynq7100–xc7z100ffg900-2 开发环境Vivado2019.1 输入AR0135分辨率1280x72060Hz 输出HDMI显示器分辨率1280x72060Hz 应用Zynq的AR0135视频采集输出 工程Block Design如下 工程代码架构如下 综合编译完成后的FPGA资源消耗和功耗预估如下 由于没有用VDMA所以SDK仅需运行一个简单的hello world即可
7、上板调试验证
静态展示Kintex7开发板工程为例 动态展示Zynq7100开发板工程为例 Zynq7100-AR0135 8、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下