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

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

3天内不再提示

基于INTEL FPGA硬浮点DSP实现卷积运算详解

DIri_ALIFPGA 来源:网络整理 作者:工程师陈翠 2018-07-23 09:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

卷积是一种线性运算,其本质是滑动平均思想,广泛应用于图像滤波。而随着人工智能深度学习的发展,卷积也在神经网络中发挥重要的作用,如卷积神经网络。本参考设计主要介绍如何基于INTEL 硬浮点的DSP Block实现32位单精度浮点的卷积运算,而针对定点及低精度的浮点运算,则需要对硬浮点DSP Block进行相应的替换即可。

原理分析

设:f(x), g(x)是两个可积函数,作积分:

基于INTEL FPGA硬浮点DSP实现卷积运算详解

随着x的不同取值,该积分定义了一个新的函数h(x),称为函数f(x)与g(x)的卷积,记为h(x)=f(x)*g(x)。

如果卷积的变量是序列x(n)和h(n),则卷积的结果为

基于INTEL FPGA硬浮点DSP实现卷积运算详解

其中*表示卷积。因此两个序列的卷积,实际上就是多项式的乘法,用个例子说明其工作原理。a = [7,5,4]; b = [6,7,9];则实现a和b的卷积,就是把a和b作为一个多项式的系数,按多项式的升幂或降幂排列,即为:

基于INTEL FPGA硬浮点DSP实现卷积运算详解

因此得到a*b=[42,79,122,73,36];与Matlab运算结果一致。而二维卷积可以采用通用多项式乘积方法实现卷积运算。

基于INTEL FPGA的实现分析

如上我们确定了两个序列的卷积等同于两个多项式的乘法,因此当我们需要计算序列[a0,a1,a2, …,an-1]与[b0,b1,b2, …,bn-1]的卷积结果时,可以成立a,b两个n阶多项式,如下所示:

基于INTEL FPGA硬浮点DSP实现卷积运算详解

则[a0,a1,a2, …,an-1]与[b0,b1,b2, …,bn-1]的卷积结果即为由a*b得到的多项式的各项系数所组成的序列。令c=a*b,得到

基于INTEL FPGA硬浮点DSP实现卷积运算详解

则由多项式c的各阶系数所组成的新的序列[c0,c1,c2, …,c2n-1]即为[a0,a1,a2, …,an-1]与[b0,b1,b2, …,bn-1]的卷积结果。则按照高阶多项式计算展开可得到:

基于INTEL FPGA硬浮点DSP实现卷积运算详解

┆┆

基于INTEL FPGA硬浮点DSP实现卷积运算详解

┆┆

基于INTEL FPGA硬浮点DSP实现卷积运算详解

因此卷积的运算可以转化为行向量与列向量相乘的结果,即乘累加的运算结构。

Intel FPGA在Arria10DSP Block中首次支持了单精度硬浮点DSP block,是行业内第一个支持单精度DSP block,硬浮点DSP block架构如图1所示:

基于INTEL FPGA硬浮点DSP实现卷积运算详解

图1 硬浮点DSPblock架构

硬浮点DSP Block包含硬浮点乘法器,硬浮点加法器,支持乘累加运算,因此采用硬浮点DSPblock实现行列向量相乘是非常好的方式。下面我们针对一个实际的卷积运算,介绍如何基于INTEL硬浮点DSP block实现。假设我们需要求随机数组a=[4,8,9,11]与b=[10,5,7,13]的卷积运算结果,则根据上面的分析,保持数组a顺序不变,而数组b需根据上述分析结果,针对每一个卷积结果产生新的序列。所以整个实现包括数列重组模块和硬浮点乘法器模块及输出处理。下面是实现框图及仿真结果。

图2 实现框图

图3 Modelsim仿真结果

仿真结果与Matlab实现结果一致,并且该设计中充分考虑了FPGA并行扩展特性,对于低速率要求的设计可采用DSP Block复用的方式节约DSP block数量。

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

    关注

    559

    文章

    8214

    浏览量

    363836
  • FPGA
    +关注

    关注

    1655

    文章

    22282

    浏览量

    630053
  • intel
    +关注

    关注

    19

    文章

    3506

    浏览量

    190534

原文标题:基于INTEL FPGA硬浮点DSP实现卷积运算

文章出处:【微信号:ALIFPGA,微信公众号:FPGA极客空间】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    卷积运算分析

    卷积运算的基础运算是乘加运算(MAC,Multiplication and Accumulation),本文设计了基本运算单元PE模块来
    发表于 10-28 07:31

    基于E203 RISC-V的音频信号处理系统 -协处理器的乘累加过程

    。 硬件加速简介 图1 乘积累加运算单元 乘积累加运算单元电路,类似于DSP中的MAC指令,能够快速的实现 C=B+AB格式的运算
    发表于 10-28 06:18

    蜂鸟内核模块浮点指令运算数据的获取

    操作数。 总结 通过上文介绍,我们大致理清了浮点运算中操作数的获取,接下来要进行的工作就是面对整数或浮点寄存器如何做判断以及如何实现具体的运算
    发表于 10-24 13:39

    浮点数是如何实现开平方运算

    摘要: 本文主要描述浮点数是如何实现开平方运算的。 简介 事实上,浮点数的开平方运算结构与定点数甚至整数的开平方
    发表于 10-24 08:42

    如何获取蜂鸟内核执行模块浮点指令的运算数据

    通过上文介绍,我们大致理清了浮点运算中操作数的获取,接下来要进行的工作就是面对整数或浮点寄存器如何做判断以及如何实现具体的运算操作,待我
    发表于 10-24 07:10

    浮点运算单元的设计和优化

    浮点运算单元的设计和优化可以从以下几个方面入手: 1.浮点寄存器设计:为了实现浮点运算指令子集(
    发表于 10-22 07:04

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如何生成
    发表于 10-22 06:48

    蜂鸟E203的NMSIS库结合Nuclei Studio IDE的使用

    数据集进行计算对比。以一小块程序进行说明 该块程序是以两个32位浮点数数组进行卷积运算为例子,先用NMSIS的库函数riscv_conv_q31()计算卷积,再用参考的
    发表于 10-22 06:26

    risc-v中浮点运算单元的使用及其设计考虑

    RISC-V浮点运算单元(floating-point unit,简称FPU)是一种专门用于执行浮点运算的硬件加速器,其作用是提高浮点
    发表于 10-21 14:46

    利用e203中NICE协处理器加速滤波运算

    显示对象的心电信号时,需要对采集到的心电信号做滤波运算,相当于一维卷积。由于权重数据以及采集到的特征数据均是浮点数,而使用e203做浮点运算
    发表于 10-21 13:40

    基于e203中NICE协处理器加速滤波运算

    显示对象的心电信号时,需要对采集到的心电信号做滤波运算,相当于一维卷积。由于权重数据以及采集到的特征数据均是浮点数,而使用e203做浮点运算
    发表于 10-21 09:54

    【 VPX638】青翼凌云科技基于KU115 FPGA+C6678 DSP的6U VPX双FMC接口通用信号处理平台

    (XCKU115)作为主处理器,完成复杂的数据采集、回放以及数据预处理。采用1片TI的多核浮点运算DSP TMS320C6678来完成信号处理算法。
    的头像 发表于 09-01 13:42 435次阅读
    【 VPX638】青翼凌云科技基于KU115 <b class='flag-5'>FPGA</b>+C6678 <b class='flag-5'>DSP</b>的6U VPX双FMC接口通用信号处理平台

    进群免费领FPGA学习资料!数字信号处理、傅里叶变换与FPGA开发等

    ~ 01、数字信号处理的FPGA实现 旨在讲解前端数字信号处理算法的高效实现。首先概述了当前的FPGA技术、器件以及用于设计最先进DSP
    发表于 04-07 16:41

    如何使用MATLAB实现一维时间卷积网络

    本文对一维卷积操作进行介绍,包括一维扩展卷积和一维因果卷积,以及 MATLAB 对一维卷积的支持情况。在最后通过一个实例演示如何在 MATLAB 中将一维
    的头像 发表于 03-07 09:15 1660次阅读
    如何使用MATLAB<b class='flag-5'>实现</b>一维时间<b class='flag-5'>卷积</b>网络

    FPGA图像处理基础----实现缓存卷积窗口

    像素行与像素窗口 一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像
    的头像 发表于 02-07 10:43 1410次阅读
    <b class='flag-5'>FPGA</b>图像处理基础----<b class='flag-5'>实现</b>缓存<b class='flag-5'>卷积</b>窗口