FPGA应用于图像处理
FPGA应用于图像处理
FPGA(Field-Programmable Gate Array)直译过来就是现场可编程门阵列。是一种可以编程的逻辑器件,具有高度的灵活性,可以根据具体需求就像编程来实现不同的功能。
FPGA器件属于专用的集成电流中的一种半定制电路,是可编程的逻辑阵列,内部有基本的逻辑单元,可配置的逻辑块,数字时钟管理模块,嵌入式RAM,以及丰富的布线资源,有的FPGA内部还集成了SDRAM、Cortex-ARM硬核。采用Verilog或者VHDL进行编程。
既然大家能用到FPGA,说明大家在学校里面都上过数字电路实验课。通俗来讲,你可以直观的认为FPGA内部的各个逻辑块就像是实验室里面的各种芯片模组,使用Verilog编程进行逻辑资源的布线就相当于你面对一大堆的电子元器件,采用面包板以及杜邦线把你需要的功能连接起来。怎么连接以及连接线的方式就是你用verilog进行定义的。是不是很简单?
优缺点:
首先说一下FPGA的优缺点,
优点:
FPGA由逻辑单元,RAM,乘法器等硬件资源构成,通过这些资源的组合,可以实现乘法,寄存器,地址发生器等硬件电路;
FPGA可以通过使用框图或者Verilog HDL来设计,从简单的门电路到复杂的FIR电路都可以实现;
FPGA可以无限的重新编程,加载一个新的设计方案只需要几百毫秒,利用重配置电路可以减少硬件开销;
FPGA的工作频率由FPGA芯片以及设计决定,可以通过修改设计或者更换更快的FPGA芯片来达到某些要求严苛的工况。
缺点:
FPGA的所有功能均依靠硬件实现,无法实现分支条件跳转等操作;
FPGA只能实现定点运算;
小结:
FPGA依靠硬件来实现所有的功能,速度上可以和专用芯片相比,但是设计灵活性和通用处理器相比还有些许不足。
FPGA可以应用的行业:
视频处理;
图像分割;
数据延迟器和存储设计;
通讯行业;
安防;
工控业;
AI:(也是当前最火的行业);
####下面就对本人相对比较熟悉的图像处理行业进行简单介绍,浅谈一下自己的看法;
我最开始学习的事51单片机,但是实际工作从事的事图像识别方向的应用开发,由于51单片机的先天性导致实际工作中很少使用,最开始使用得是ADI的Blackfin系列的DSP,随着图像分辨率的提高,以及处理算法的复杂度的上升,Blackfin处理器业渐渐不能满足实际需求;于是转向了FPGA,至此在FPGA上也使用了十多年了。
FPGA的优势之一就是流水线操作,虽然主频比CPU,GPU,NPU等低很多,但是采用流水线方式可以同时处理,也就能达到了很好的实时性。因此在一些实时性要求非常高的应用领域,做图像处理只能使用FPGA。这几年一直从事分选设备的图像处理方面的工作,目前在分选领域基本都是使用FPGA作为主处理器,不管是采用线阵传感器还是面阵传感器,FPGA从采集到图像数据开始,到下一次采集到新的图像数据,这个延时时间是固定的为行频或者帧频的间隔。这个优点是CPU无法满足的,只有FPGA的实时流水线结构才能才能满足大数据量的实时处理。
传统的采用CPU,DSP等方式进行图像运算的方式是,首先CPU或者DSP把采集到的数据通过DMA或者其他总线方式搬运到内存中,然后CPU或DSP运算部分再从内存中读取数据进行处理,处理完成后再把处理结果保存到内存中,供其他函数进行访问;如果按照线阵传感器的行频格式进行处理,按照10K的行频计算,则每行数据的实践间隔是0.1ms,也就要求在0.1ms时间内必须把这一样数据处理完成,并把处理结果保存到内存。如果CPU或者DSP的主频足够高,理论上也是可行的,但是主频不可能无限提升。
如果采用FPGA进行处理就完美的避免的频繁的访问内存了;因为FPGA对图像的处理事实时流水线的运算处理,FPGA内部的逻辑资源可以搭建若干个处理单元,每个处理单元都是同时工作的,当有足够多的处理单元时,虽然FPGA的主频较低,但是同时处理数据的能力将会非常大。

上图就是一个简单的流水线示意图,第一行时数据A进来,第一个单元处理数据A,等到第二行的时候,数据A已经进入到的下一个处理单元,同时数据B进来,这是数据A和数据B分属如不同的处理单元,因此数据A和数据B可以被同时处理;当有足够多的处理单元时,可以对很多数据进行同时处理,数据A的输出仅仅是固定延迟若干个处理单元的个数个时钟。只要处理单元数固定,那么这个输出数据的延迟时间间隔也是固定的。
例如实际应用中,FPGA直连Sensor,然后驱动Sensor,直接获取图像数据,第一个单元可以对获取的图像数据进行转换,如Bayer格式转RGB,RAW转RGB等;第二个处理单元可以对RGB数据进行差值运算、亚像素校正,第三个单元进行腐蚀/膨胀操作,第四个单元进行canny算子检测。。。。。。。
这样的流水线的处理方式时按照Sensor输出的数据流的流动方向顺序处理的,它无法像CPU或者DSP那样缓存整幅图像进行无序操作,FPGA处理图像数据就相当于每个单元处理完成后就把处理结果交给下一个处理单元,每个处理单元只对当前进入的数据负责,不在保存中间结果数据;
随着海量数据的算力需求越来越高,FPGA芯片将继续向更高密度、更高通信带宽方向发展,此外,异构计算融合等形式将越来越受推崇。并且从软件发展角度,也更注重配套的工具能力,提供高性能的AI加速能力。
FPGA的关键价值在于可编程性、灵活性,AI发展初期,很多新兴应用还在酝酿中,各类标准仍在演进,AI算法也在不断推陈出新,对于硬件的算力和灵活度要求很高,FPGA刚好契合这些需求。此外,在推理环节的小批量数据处理中,FPGA可凭借流水线并行,达到高并行、低延迟的效果。并且,受低延迟、数据隐私和带宽限制等因素驱动,FPGA能够满足低功耗、灵活以及快速响应等需求。
相关文章:
FPGA应用于图像处理
FPGA应用于图像处理 FPGA(Field-Programmable Gate Array)直译过来就是现场可编程门阵列。是一种可以编程的逻辑器件,具有高度的灵活性,可以根据具体需求就像编程来实现不同的功能。 FPGA器件属于专用的集成电流中的一种半定制电…...
vscode python 无法引入上层目录解决
在vscode 中.vscode 配置如下 { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid830387 “version”: “0.2.0”, “configurati…...
[开发|java] java list 取某个属性最大的项
示例代码: import java.util.*;class Person {private String name;private int age;public Person(String name, int age) {this.name name;this.age age;}public int getAge() {return age;} }public class Main {public static void main(String[] args) {List<Person…...
关闭浏览器的跨域校验
首发博客地址 问题描述 当你访问资源失败,并遇到以下类似提示时: Access to script at 资源路径 from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrom…...
USRP 简介,对于NI软件无线电你所需要了解的一切
什么是 USRP 通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发,被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机&…...
RTE_Driver驱动框架和Keil下开发需要支持的xxx_DFP软件包分析
1.RTE_Driver驱动框架 RTE_Driver代表"Run-Time Environment Driver",是Keil MDK(Microcontroller Development Kit)中的一个概念。Keil MDK是一种用于嵌入式系统开发的集成开发环境,提供了开发、编译、调试等一系列工具…...
ImportError: Cannot load dynamic library. Did you compile LSD?
1、问题描述 >>> import pylsd2 Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/data/data/wangzy-p-wangzy-p3-volume-pvc-0fee40a7-7013-49b4-8cfb-b4ab0394165b/.conda/envs/paddle/lib/python3.8/sit…...
音频应用编程
目录 ALSA 概述alsa-lib 简介sound 设备节点alsa-lib 移植编写一个简单地alsa-lib 应用程序一些基本概念打开PCM 设备设置硬件参数读/写数据示例代码之PCM 播放示例代码值PCM 录音 使用异步方式PCM 播放示例-异步方式PCM 录音示例-异步方式 使用poll()函数使用poll I/O 多路复用…...
软件测试/测试开发丨Python 学习笔记 之 链表
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26458 链表与数组的区别 复杂度分析 时间复杂度数组链表插入删除O(n)O(1)随机访问O(1)O(n) 其他角度分析 内存连续,利用CPU的机制࿰…...
Matlab 使用经验分享(常用函数介绍;矩阵常见计算)
Matlab 使用经验分享 大家好!最近有很多朋友询问我关于 Matlab 的使用,于是我决定写一篇博客来分享一下我的经验。对于数学和编程爱好者来说,Matlab 是一个非常有用的工具。我自己在数学实验和数学建模竞赛中也经常使用它。那么,…...
软件工程(十七) 行为型设计模式(三)
1、观察者模式 简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记关键字 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),…...
在抖音中使用语聚AI,实现自动回复用户视频评论、私信问答
您可以通过集简云数据流程,将语聚AI助手集成到抖音视频评论、抖音私信,实现自动回复用户视频评论、私信问答,大大提升账号互动与运营效率。 效果如下: 自动化流程: ● 抖音普通号评论对接语聚AI(点击可一…...
pyqt5-快捷键QShortcut
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import *""" 下面示例揭示了,当关键字绑定的控件出现的时候,快捷键才管用, 绑定的控件没有出现的时候快捷键无效 """…...
匿名函数( lambda 表达式)
在 C 中,匿名函数也被称为 lambda 表达式。C11 引入了 lambda 表达式,使得在需要函数对象(函数符)的地方可以使用匿名函数来代替。 lambda 表达式的基本语法如下: [capture list] (parameter list) -> return typ…...
基于SSM的汽车维修管理系统——LW模板
摘要 随着人们生活水平的不断提高,私家车的数量正在逐年攀升。这带动了汽车维修行业的发展。越来越多的汽车维修厂如雨后春笋般涌现。同时,维修厂的业务操作产生了庞大的数据,这给汽车维修厂工作人员的数据管理提出了新的要求,他们…...
Ceph的纠删码特性 EC(Erasure Code)代码流程
从GitHub上Clone Ceph项目,我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一、EC(Erasure Code)是什么? Ceph的纠删码特性EC:将写入的数据分成N份原始数据,通过这N份原始数据计算出M份效验…...
盘点那些国际知名黑客(上篇)
电影中的黑客仅靠一部电脑就可以窃取别人的信息,利用自己高超的技术让公司甚至国家都胆战心惊。“黑客”原指热心于计算机技术、水平高超的电脑高手,但逐渐区分为黑帽、白帽、灰帽。这些术语源自美国流行文化的老式西部电影,其中主角戴白色或…...
机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)
有一些标准的流程可以实现对机器学习问题的自动化处理,在 scikitlearn 中通过Pipeline来定义和自动化运行这些流程。本节就将介绍如何通过Pipeline实现自动化流程处理。 如何通过Pipeline来最小化数据缺失。如何构建数据准备和生成模型的Pipeline。如何构建特征选择…...
Ansible学习笔记15
1、roles:(难点) roles介绍: roles(角色):就是通过分别将variables,tasks及handlers等放置于单独的目录中,并可以便捷地调用他们的一种机制。 假设我们要写一个playbo…...
圆圈加数字的css
方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
