0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA硬件资源与算法设计

5CTi_cirmall 来源:电路设计技能 2020-08-27 17:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

各位工程师朋友,同学们大家好!我是本期“来实战”项目《运动目标追踪系统》的执行官。本项目由电路城发起,由ALINX赞助的黑金国产FPGA板卡Logos系列PGL22G学习板实现。

我是一个热爱技术的在校学生。希望可以通过本次的项目来帮助更多的同学,给予一个机会来了解什么是真正的实战项目,也让之前没有竞赛经验的朋友了解一下,竞赛对于我们学生来说并没有那么远。帮助更多的电子专业的同学找到学习的方向,更顺利的进入这个行业,为电子行业做出一份自己的贡献。许多同学在学校期间不去做项目的原因并不是不愿意去做,而是没有方向。其实大项目就可以通过竞赛来获得,竞赛中的一些命题项目可以给予你很多灵感,有了方向之后,即使是个大项目,他也是由一个一个小部分组成的,一步一步完成一个个小项目,自己的大工程不久也就成功了。项目本身的意义可能是在做保护区的摄像头,捕捉动态视频;也可以在监控中做一些应用。更重要的意义就是给广大同学们一个学习视频处理的机会,让想学而不知道怎么去学的同学一个模板。

很多在最初接触FPGA的同学都有这个问题,甚至以为FPGA和单片机一样下板子烧代码。其实不是这样的,FPGA不是单片机,首先FPGA和单片机的区别,本质上是软件和硬件的区别,FPGA更偏向于硬件电路,而单片机更偏于软件。单片机是一种微处理器,类似于电脑CPU的,它一般采用的是哈佛总线结构,或者冯诺依曼结构,对单片机的编程很大程度上要考虑到它的结构和各个寄存器的作用,而FPGA 它的结构是查找表结构,其程序不用去太考虑芯片的结构,要注意的是时序上问题,它的结构比较复杂,功能也很强大,一般应用在通信领域等比较高端的场合,单片机是一个微控制器,通过加载模块软件来实现某种功能,是成型的芯片;FPGA是用来设计芯片的芯片。FPGA由于是硬件电路,运行速度直接取决于晶振速度,系统稳定,特别适合高速接口电路。单片机由于是单线程,哪怕是常用的M3系列流水线也是单线程执行,程序语句需要等待单片机周期才能执行。单片机设计属软件范畴;它的硬件(单片机芯片)是固定的,通过软件编程语言描述软件指令在硬件芯片上的执行;

FPGA开发的语言是Verilog HDL。HDL代表的就是硬件描述语言,描述就代表他并不是一个开发性的语言。相比C语言开发,Verilog更像是你先设计好电路,再用Verilog描述出来你的设计。而对于一个完整的FPGA工程应包含以下几个步骤:算法实现,模块化,模块的硬件电路设计,硬件描述语言书写,小模块进行仿真,总模块的连接,总体工程的仿真,板级验证。下面我们就进入正题......

项目设计

步骤一:FPGA硬件资源与算法设计

1.FPGA硬件资源介绍

首先感谢黑金ALINX提供的开发板对本项目的大力支持,期望以后能有更多的机会合作。对于黑金国产FPGA板卡Logos系列PGL22G学习板,它配备了以下资源:

系统逻辑部分由ov5640驱动模块、RGB转Ycbcr模块、存储控制模块、HDMI驱动模块、图像处理模块、追踪控制模块、sim900a驱动模块共同组成。由OV5640摄像头采集图像,经过RGB转YCbCr模块完成颜色空间转换,为了配合帧差法的数据,将数据进行掩码然后经由DDR3控制器模块控制存入DDR3中,通过HDMI时序从DDR3中取出数据,此时取出的每个16bit数据同时包含了相邻两幅图像的灰度信息,高8位为第n帧图像的某个像素点灰度值,低8位为第n+1帧图像对应像素点的灰度值。图像处理模块将取出的数据进行预处理和帧差法计算得到运动目标的位置信息,追踪控制模块根据运动目标的位置相对于图像中心的偏移通过控制舵机转动来调整OV5640摄像头的方向完成追踪。摄像头使用黑金ALINX视频套餐中的OV5640摄像头;同套餐的还赠送一个屏幕,也非常适合学习视频处理的工程。舵机模块是使用的SC90,来完成摄像头的转动的,该模块看上去很简单,但是他和摄像头一起组合使用就非常炫酷!

2.算法设计

(一)项目简介与项目难点

首先FPGA的基础操作,以及Verilog基础语法就不再赘述。

项目简介在前面也已经讲说,这里只放一个整体框图来表现。这个框图为了便于大家理解已经进行了简化,大抵说白了就是将摄像头采集到的数据存起来,再把图像处理清晰,去除噪声。最后识别出在动的东西,把采集到的图像放在显示屏上,并标明哪个部分是正在运动的。

项目的难点:项目本身的难点在于驱动起来摄像头,一个类IIC协议接口的书写,以及对摄像头寄存器的配置。驱动SDRAM/DDR,将采集到的数据写进存储单元中。实现简单的图像处理算法来优化采集到的图像,识别物体的边缘。最后抓捕再显示出来,驱动VGA或HDMI接口将数据传输至显示屏上显示出来。

(二)整体流程

首先上电之后对各个模块的寄存器堆进行配置,计数器进行初始化。之后由OV5640摄像头采集图像,经过RGB转YCbCr模块完成颜色空间转换,为了配合帧差法的数据,将数据进行掩码然后经由DDR3控制器模块控制存入DDR3中,通过HDMI时序从DDR3中取出数据,此时取出的每个16bit数据同时包含了相邻两幅图像的灰度信息,高8位为第n帧图像的某个像素点灰度值,低8位为第n+1帧图像对应像素点的灰度值。图像处理模块将取出的数据进行预处理和帧差法计算得到运动目标的位置信息,追踪控制模块根据运动目标的位置相对于图像中心的偏移通过控制舵机转动来调整OV5640摄像头的方向完成追踪。

(三)算法基础

由于我们做的是一个图像,所以要对基础的图像算法进行简单学习。我们使用的算法主要有均值滤波,中值滤波,Sobel边缘检测及RGB转YCbCr。

1.均值滤波与中值滤波

首先何谓滤波?图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。

图像滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

而对滤波处理的要求也有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

而我们今天面对的主要为椒盐噪声,椒盐噪声是数字图像的一个常见噪声,就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声。RGB图像上,每一个像素点都是三段数字,分别对应R,G,B三种颜色在灰白图像中,椒盐噪声若果是黑点的话,就是指这一点的像素值明显低于周围像素点的值,而白点就是明显高于周围的像素值。而对于这种噪声,只要让他与周围的值相持平皆可以消除。中值滤波和均值滤波就是根据这种方法来消除,每个像素点周围都有8个像素,如果使用周围8个像素的平均值来代替这个像素点的像素值,就是均值滤波的基本方法;如果使用8个像素点的中值来代替这个像素点的像素值,就是中值滤波的基本方法。

要做这个处理,核心就是要搭建3x3矩阵。如何搭建3x3矩阵呢?我们有三种方法:

1.通过2个或者3个RAM的存储来实现3X3像素窗口;

2.通过2个或者3个FIFO的存储来实现3X3像素窗口;

3.通过2行或者3行Shift_RAM的存储来实现3X3像素窗口;

以shift_ram为例,shift_ram就是移位寄存器,如图:

左方数据输入,N是每行的像素点数,每行输出的就是要的矩阵。

2.Sobel边缘检测

在图像处理中,边缘是一幅图像中最基本的特征,每幅图像的边缘包含了用于识别的有用信息,是图像分析和模式识别的主要特征提取手段。在模式识别或进行其他的中,在很多方法来识别,其中一种方法就是识别出来图像边缘。在图像中,一幅图像的“临界”表示为图像上亮度显著变化的地方,边缘指的是一个区域的结束,也是另一个区域的开始。“边缘点”指的是图像中具有坐标[x,y],且处在强度显著变化的位置上的点。常用的边缘检测算法大多是以原始图像灰度值为基础,通过考察图像的每个像素的某个邻域内 灰度的变化,利用边缘一阶或二阶导数的规律来检测边缘。下图左边为原始的黑白灰度的图像,通过边缘检测算法后变成了右边的图像。

sobel 是一个梯度的计算,如下图所示,是 x 和 y 方向的 3x3 窗口的卷积。

使用算式

来计算目标点的卷积值:

这里注意一定是绝对值,要大于0。

计算完成以后,要进行简单的二值化处理,将 sobel 值和阈值对比,产生黑白的二值化图像。将大于阈值设置为与背景色相反的图像。

利用此即可确定图像中各物体的边缘。

3. RGB转YCbCr

摄像头采集的RGB565格式数据为16比特,SDRAM不能同时将两帧RGB图像存储。因此在存入SDRAM前先将RGB格式转换为YCbCr格式并提取亮度分量作为灰度图像。YCbCr是通过有序的三元组来表示的,三元由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)组成,其中Y表示颜色的明亮度和浓度,而Cb和Cr则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。人的肉眼对由YCbCr色彩空间编码的视频中的Y分量更敏感,而Cb和Cr的微小变化不会引起视觉上的不同,根据该原理,通过对Cb和Cr进行子采样来减小图像的数据量,使得图像对存储需求和传输带宽的要求大大降低,从而达到在完成图像压缩的同时也保证了视觉上几乎没有损失的效果,进而使得图像的传输速度更快,存储更加方便。我们要的到灰度图像,首先要将采集到的彩色图像转化为YCbCr。其转换公式如下:

……

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22299

    浏览量

    630680
  • 控制器
    +关注

    关注

    114

    文章

    17659

    浏览量

    190424
  • 控制模块
    +关注

    关注

    2

    文章

    144

    浏览量

    19664

原文标题:《来实战》第4期:国内牛人用FPGA打造运动目标追踪系统(持续更新中......)

文章出处:【微信号:cirmall,微信公众号:电路设计技能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    详解FPGA定点数计算方法

    FPGA定点数计算在高效资源利用、运算速度优势、硬件可预测性和成本效益等方面发挥着重要作用。它能节省逻辑和存储资源,实现更快速的运算和更高的时钟频率,保证行为可预测且易于
    的头像 发表于 12-02 10:09 234次阅读
    详解<b class='flag-5'>FPGA</b>定点数计算方法

    嵌入式和FPGA的区别

    FPGA凭借硬件并行处理能力,能够实现纳秒级响应,远优于微秒级的嵌入式系统。 功耗效率上,嵌入式系统针对特定应用优化后能效比很高,而FPGA由于可编程特性通常功耗较大,但在特定算法
    发表于 11-19 06:55

    复杂的软件算法硬件IP核的实现

    Compiler)将算法编译转化为可综合的 Verilog 文本,进而通过 FPGA硬件上实现算法。 1.C to Hardware 技术简介 AltiumDesign
    发表于 10-30 07:02

    【开源FPGA硬件硬件黑客集结:开源FPGA开发板测评活动全网火热招募中......

    ,审核通过的代码将作为开源资料与开发板一同公布; 参考选题: 开箱测评(功能特性、系统框图、硬件资源FPGA资源、功能演示等方面测评) 各接口模块测评 开发板配套教程实验
    发表于 10-29 11:37

    如何在资源受限型应用中使用 FPGA

    的性能需求,同时在严格的功耗、尺寸和成本限制内运行。现代现场可编程门阵列 (FPGA) 可以满足这些相互竞争的需求。 本文回顾了为资源受限型应用选择 FPGA 时需要考虑的关键设计标准。然后,以 [Altera] 经过[功率和成
    的头像 发表于 10-03 17:31 1519次阅读
    如何在<b class='flag-5'>资源</b>受限型应用中使用 <b class='flag-5'>FPGA</b>

    基于FPGA实现FOC算法之PWM模块设计

    哈喽,大家好,从今天开始正式带领大家从零到一,在FPGA平台上实现FOC算法,整个算法的框架如下图所示,如果大家对算法的原理不是特别清楚的话,可以先去百度上学习一下,本教程着重介绍实现
    的头像 发表于 07-17 15:21 3149次阅读
    基于<b class='flag-5'>FPGA</b>实现FOC<b class='flag-5'>算法</b>之PWM模块设计

    无位置传感器无刷直流电机的+FPGA+控制实现

    硬件方案,同时通过算法优化,避免了乘法和除法运算,大大减少了 FPGA 逻辑资源消耗,并在一片低端现场可编程门阵列中得到了具体验证和实现。该方案充分运用
    发表于 07-10 16:35

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理入手,采用Matlab与FPGA设计实现双边滤波算法
    的头像 发表于 07-10 11:28 4117次阅读
    基于Matlab与<b class='flag-5'>FPGA</b>的双边滤波<b class='flag-5'>算法</b>实现

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA 上实现该算法时,可以大大提高该
    的头像 发表于 07-10 11:09 2116次阅读
    基于<b class='flag-5'>FPGA</b>的压缩<b class='flag-5'>算法</b>加速实现

    火爆开发中|开源FPGA硬件板卡,硬件第一期发布

    开源FPGA项目自发布以来,得到了众多开发者的关注,涉及工业、通信、车载等多个行业的100+位工程师报名参与设计,并分为:硬件组、FPGA组、linux组。其中硬件组率先开始启动项目,
    的头像 发表于 07-09 11:43 994次阅读
    火爆开发中|开源<b class='flag-5'>FPGA</b><b class='flag-5'>硬件</b>板卡,<b class='flag-5'>硬件</b>第一期发布

    Xilinx Ultrascale系列FPGA的时钟资源与架构解析

    Ultrascale是赛灵思开发的支持包含步进功能的增强型FPGA架构,相比7系列的28nm工艺,Ultrascale采用20nm的工艺,主要有2个系列:Kintex和Virtex
    的头像 发表于 04-24 11:29 2124次阅读
    Xilinx Ultrascale系列<b class='flag-5'>FPGA</b>的时钟<b class='flag-5'>资源</b>与架构解析

    基于DBFP与DB-Attn的算法硬件协同优化方案

    本文讨论了LLM推理过程对计算资源需求急剧攀升的背景下,现有量化和剪枝技术、新数据格式存在的不足,提出动态块浮点数(DBFP)及其配套算法-硬件协同框架DB-Attn以解决这些问题。
    的头像 发表于 03-19 14:33 3225次阅读
    基于DBFP与DB-Attn的<b class='flag-5'>算法</b><b class='flag-5'>硬件</b>协同优化方案

    当我问DeepSeek AI爆发时代的FPGA是否重要?答案是......

    ,开发人员可以根据具体应用需求重新配置硬件逻辑。这种灵活性使得FPGA能够适应不断变化的AI算法和应用场景,而无需更换硬件。 • 定制化加速:FPG
    发表于 02-19 13:55

    数据中心中的FPGA硬件加速器

      再来看一篇FPGA的综述,我们都知道微软包括国内的云厂商其实都在数据中心的服务器中部署了FPGA,所以这篇论文就以数据中心的视角,来看下FPGA这个硬件加速器。 还是一样,想要论文
    的头像 发表于 01-14 10:29 1228次阅读
    数据中心中的<b class='flag-5'>FPGA</b><b class='flag-5'>硬件</b>加速器

    FPGA在AI方面有哪些应用

    提供了强有力的支持。 一、FPGA 在深度学习中的应用 深度学习是 AI 的重要分支,涉及海量的数据运算。FPGA 能够针对深度学习算法中的卷积、池化等核心运算进行硬件加速优化。例如,
    的头像 发表于 01-06 17:37 2142次阅读