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



概述

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

原理分析

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

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

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

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

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

基于INTEL FPGA的实现分析

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

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

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

┆┆

┆┆

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

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

图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数量。



版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处

作者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA极客空间 微信公众号

扫描二维码关注杭州卿萃科技FPGA极客空间



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

原文地址:https://www.cnblogs.com/alifpga/p/9395439.html

时间: 2024-08-25 13:28:25

基于INTEL FPGA硬浮点DSP实现卷积运算的相关文章

如何在i.MX6UL平台上实现硬浮点与软浮点?

i.MX 6UltraLite(简称为i.MX 6UL)是i.MX6系列的新产品.i.MX 6UltraLite采用单核ARM Cortex-A7,处理器主频528MHz,采用NEON技术加速多媒体和信号处理算法,具有浮点运算单元.适合于物联网,电子支付,智能家居,能源管理等领域. 本次开发使用的硬件平台为飞凌嵌入式OKMX6UL-C开发板(产品详情:www.forlinx.com/69.htm),其它板卡请酌情参考使用,具体实现操作步骤如下: 硬浮点交叉编译方法为 arm-linux-gcc

基于CCS3.3平台搭建DSP/BIOS系统

本人由于换工作的原因,由ccs3.1平台下转化为ccs3.3平台.先说说本人感觉的区别,ccs3.1下的CSL库集成到DSP/BIOS内,而3.3的CSL库在DSP/BIOS下就没有体现. 1.二话不说,先搭建CCS3.3的工程,添加main函数.这个比较简单就不细说了. 2.创建DSP/BIOS文件.File->New->Dsp/bios Configuration,然后 [保存] 3.把BIOS文件参加到工程里去.(3.1为.cbd文件,而3.3为.tcf文件) 4.编译会报出堆空间不能为

存储相关的基于Intel体系的计算机体系结构演进

存储相关的基于Intel体系的计算机体系结构演进2 磁盘是怎么记录0和1以及感知的,磁头结构3 HMR PMR HAMR SMRTDMR,以及磁头定位纠偏原理4 磁盘寻道演示及其他5 混合硬盘.冲氦硬盘.磁盘节能相关6 IP硬盘7 内核IO路径.SCSI协议体系结构8 主流Raid类型原理,Raid卡架构,Raid卡电容+Flash保护方案9 NAND Flash组成和读写原理及性能10 主流Flash产品介绍11 Flash控制器内部架构分析12 NVMe及SFF8639接口13 NVRAM.

SylixOS 在 t_main 中使用硬浮点方法

1. 问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的.由于 BSP 默认使用软浮点,所以会导致应用代码中的浮点运算采用软浮点的方式实现,最终产生浮点运算性能下降的现象. 2. SylixOS中的软硬浮点选项 在 BSP 工程中,FPU_TYPE 类型通常会按照如下图所示方式定义.此时,当 BSP 工程中有浮点运算的实现时,会采用软浮点的指令代替硬浮点的指令实现. BSP 工程默认采用软浮点的原因在于

基于Intel 82571芯片的网卡介绍

英特尔?82571EB千兆位以太网控制器是一个单一的,紧凑的,带有两个完全组件集成千兆以太网媒体访问控制(MAC)和物理层(PHY)接口.该装置采用PCI Express架构(启1.0A ) ,并且还支持双端口千兆以太网在一个非常小的区域,这是实现用于服务器和工作站的网络设计有用与关键的空间限制.英特尔82571EB千兆位以太网控制器提供两个IEEE802.3 *以太网接口, 1000BASE-T ,100BASE -TX和10BASE -T应用.两个端口同时集成了串行器 - 解串器( SERD

Caffe 中卷积运算的原理与实现

caffe中卷积运算设计的很巧妙,今天就来讨论一下caffe中卷积运算的原理,最后会给出一个自己的实现版本,便于初学者理解. Caffe中卷积运算的原理 俗话说,一图胜千言,首先先给出原理示意图,为了方便,这里以二维核为例 滑动窗口在图像中每滑动一个地方,将图像中该滑动窗口图像展开为一列,所有列组成图中的滑动窗口矩阵,这里假设pad=1,stride=1,K=3,则滑动窗口矩阵每行大小为W*H,一共K*K行. 每个核展开为一行,N个核形成的核矩阵大小为N*K*K. 最后将核矩阵和滑动窗口矩阵相乘

二维卷积运算工作原理剖析(转载)

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是"滑动平均"的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d

二维矩阵卷积运算实现

http://z.download.csdn.net/detail/wangfei0117/4408649 http://download.csdn.net/detail/wanwenliang2008/1767686 二维矩阵卷积运算实现,布布扣,bubuko.com

iOS中的图像处理(二)——卷积运算

关于图像处理中的卷积运算,这里有两份简明扼要的介绍:文一,文二. 其中,可能的一种卷积运算代码如下: [cpp] view plaincopy - (UIImage*)applyConvolution:(NSArray*)kernel { CGImageRef inImage = self.CGImage; CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); CFDataRef m_OutD