CN109635929A - 基于fpga的卷积实现方法及卷积器 - Google Patents
基于fpga的卷积实现方法及卷积器 Download PDFInfo
- Publication number
- CN109635929A CN109635929A CN201811493666.XA CN201811493666A CN109635929A CN 109635929 A CN109635929 A CN 109635929A CN 201811493666 A CN201811493666 A CN 201811493666A CN 109635929 A CN109635929 A CN 109635929A
- Authority
- CN
- China
- Prior art keywords
- convolution
- sequence
- channel
- clock cycle
- sampling period
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请实施例提供一种基于FPGA的卷积实现方法及卷积器。在本申请实施例中,将待卷积序列滑动输出,对于一个采样周期输出的N个待卷积数,在该采样周期内的每个时钟周期到达时输出M个待卷积数,以与常量缓存模块在该时钟周期滑动输出的M个常量在M个并行通道下相乘后,再将相乘结果进行求和,之后针对每个采样周期,将各采样周期内的每个时钟周期得到的求和结果分别进行累加,进而得到待卷积序列与常量序列的卷积结果。在本申请实施例中,在固定长度的常量序列下,无论待卷积序列的长度为多少,整个卷积过程都只需M个乘法器和M个加法器,减少了卷积计算的乘法器和加法器等资源消耗。
Description
技术领域
本申请涉及数字信号处理技术领域,尤其涉及一种基于FPGA的卷积实现方法及卷积器。
背景技术
现场可编程门阵列(Field-Programmable Gate Array,FPGA)是在可编程阵列逻辑器件(Programmable Array Logic,PAL)、通用阵列逻辑器件(General Array Logic,GAL)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)等可编程器件的基础上进一步发展的产物。FPGA上各个逻辑模块相互独立处理,依赖各自的电路资源同时工作,且可将任务切片,在同一时刻执行多任务,因此FPGA可对数据进行并行处理,提高数据处理效率。
由于FPGA具有并行处理的优势,而被广泛应用于数字信号处理中。在数字信号处理算法中,例如高斯移频键控(Gauss Frequency Shift Keying,GFSK)调制、数字滤波器、小波变换等,经常会用到卷积计算,但是卷积计算过程会大量消耗FPGA的存储空间和乘法器。因此,在FPGA上能够进行消耗资源较少的资源的卷积计算显得尤为重要。
发明内容
本申请的多个方面提供一种基于FPGA的卷积实现方法及卷积器,用以减少FPGA上进行卷积计算时的资源消耗。
本申请实施例提供一种基于FPGA的卷积器,包括:常量缓存模块、卷积序列排序模块、M个乘法器和累加求和模块;其中,
所述卷积序列排序模块,用于接收采样周期为T1的待卷积序列,并根据计算顺序在每个时钟周期输出所述待卷积序列中的M个待卷积数至所述M个乘法器;
所述常量缓存模块具有与所述M个乘法器一一对应的M个缓存通道,用于存储常量序列并在每个时钟周期分别向对应的乘法器提供卷积常量;
所述M个乘法器,分别用于将每个时钟周期内到达的待卷积数和卷积常量相乘并将相乘结果输出至所述累加求和模块;
所述累加求和模块,用于在采样周期T1内,对所述M个乘法器在各个时钟周期输出的相乘结果进行累加,以得到所述待卷积序列与所述常量序列的卷积结果;
其中,INT(·)表示取整函数;N为所述常量序列中的常量的个数,T2为所述卷积器的时钟周期;其中,T2=T1/K,K为大于或等于2的整数。
本申请实施例还提供一种基于FPGA的卷积实现方法,包括:
卷积序列排序模块接收采样周期为T1的待卷积序列,并根据计算顺序,在每个时钟周期输出所述待卷积序列中的M个待卷积数;
存储常量序列的具有M个缓存通道的常量缓存模块,在每个时钟周期输出M个卷积常量;
将所述M个待卷积数和所述M个常量相乘后的乘积进行求和,得到每个时钟周期的求和结果;
将各个采样周期内的每个时钟周期的求和结果分别进行累加,以获得所述待卷积序列与所述常量序列的卷积结果;
其中,INT(·)表示取整函数,N为所述常量序列中卷积常量个数,T2为所述FPGA平台的时钟周期;其中,T2=T1/K,K为大于或等于2的整数。
在本申请实施例中,将待卷积序列滑动输出,对于一个采样周期输出的N个待卷积数,在该采样周期内的时钟周期到达时输出M个待卷积数,以与常量缓存模块在该时钟周期滑动输出的M个常量在M个并行通道下相乘后,再将相乘结果进行求和,之后将各采样周期内每个时钟周期得到的求和结果分别进行累加,进而得到待卷积序列与常量序列的卷积结果。在本申请实施例中,在固定长度的常量序列下,无论待卷积序列的长度为多少,整个卷积过程都只需M个乘法器和M个加法器,减少了卷积计算的乘法器和加法器等资源消耗。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请一实施例提供的一种基于FPGA的卷积器的结构示意图;
图1b为本申请一实施例提供的一种累加过程的示意图;
图1c为本申请一实施例提供的一种卷积序列排序模块的结构示意图;
图2a-图2c为本申请一实施例提供的将待卷积序列写入卷积序列缓存单元的示意图;
图3a为本申请另一实施例提供的任一采样周期内待读取的待卷积序列片段的示意图;
图3b为本申请另一实施例提供的任一采样周期内卷积序列缓存单元的存储示意图;
图4为本申请又一实施例提供的一种基于FPGA的卷积实现方法的流程示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
对于卷积来说,其是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和f(n),则卷积的结果y(n)为:
其中,“*”表示卷积。而对于长度为m的序列x(n)和长度为n的序列f(n)的卷积计算,则需要进行m×n次乘法和(m-1)×(n-1)次加法,其中需要m×n个乘法器和(m-1)×(n-1)个加法器,而FPGA上乘法器和加法器的数量有限,无法提供大量的乘法器和加法器来进行卷积计算。
针对现有卷积计算过程会大量消耗FPGA的存储空间和乘法器的技术问题,本申请实施例提供一种基于FPGA的卷积实现方法及卷积器,基本思路是:将待卷积序列滑动输出,对于一个采样周期输出的N个待卷积数,在该采样周期内的每个时钟周期到达时输出M个待卷积数,以与常量缓存模块在该时钟周期滑动输出的M个常量在M个并行通道下相乘后,再将相乘结果进行求和,之后将每个时钟周期得到的求和结果进行累加,进而得到待卷积序列与常量序列的卷积结果。在本申请实施例中,在固定长度的常量序列下,无论待卷积序列的长度为多少,整个卷积过程都只需M个乘法器和M个加法器,减少了卷积计算的乘法器和加法器等资源消耗。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请实施例提供的一种基于FPGA的卷积器的结构示意图。如图1a所示,卷积器包括:常量缓存模块101、卷积序列排序模块102、M个乘法器103和累加求和模块104。
在本实施例中,卷积序列排序模块102,用于接收采样周期为T1的待卷积序列Xi,并根据计算顺序在每个时钟周期到达时,输出待卷积序列Xi中的M个待卷积数至M个乘法器103,其中,每个乘法器103接收一个待卷积数。
其中,卷积序列排序模块102可以缓存与卷积常量个数相同的N个待卷积数。在本实施例中,卷积序列排序模块102接收周期为T1的待卷积序列,即每隔T1时间该模块收到一个待卷积数。
其中,计算顺序为卷积公式所要求的待卷积数参与卷积计算的顺序。当常量缓存模块101对常量的输出顺序确定时,计算顺序决定了卷积序列模块输出待卷积数的顺序。假设常量序列为f=[f0 f1 f2 f3],待卷积序列为X=[X0 X1 X2],则卷积结果为Y=[Y0 Y1 Y2Y3 Y4 Y5],其中:
Y0=X0f0;
Y1=X0f1+X1f0;
Y2=X0f2+X1f1+X2f0;
Y3=X0f3+X1f2+X2f1;
Y4=X1f3+X2f2;
Y5=X2f3;
在本申请实施例中,将计算出卷积结果Y的顺序定义为计算顺序。
针对一个采样周期,假设常量缓存序列模块101设置的常量的输出顺序为从高位到低位,即fi的下标i以从N-1到0的顺序输出,为了使上述示例中的卷积结果Y输出正确,对应的待卷积数Xi的下标编号则由小到大输出,即最新收到的待卷积数下标最大,在本采样周期的卷积计算过程中最后输出,最新收到的待卷积数的后一个位置的数为下标最小,在本采样周期的卷积计算过程中最先输出,以此为该采样周期输出的待卷积序列片段的头尾,并从最新收到的待卷积数的后一个位置的数依次读取N个待卷积数(图1中的待卷积序列片段Xj…XN-j+1)。也就是说,卷积序列排序模块102接收一个待卷积数Xi后开始进入本采样周期的卷积计算过程中。在该采样周期内的每个参与卷积计算的时钟周期到达时,从Xi缓存的位置之后开始,每次输出M个待卷积数,依次将本采样周期内卷积序列排序模块102缓存的N个待卷积数全部输出,总计输出N/M组,其中输出的最后一个待卷积数为本采样周期接收到的待卷积数Xi。
在本实施例中,常量缓存模块101具有与M个乘法器103一一对应的M个缓存通道,且在每个参与卷积计算的时钟周期到达时,M个缓存通道分别向对应的乘法器103提供一个卷积常量,以分别与在该时钟周期到达乘法器103的M个待卷积数进行相乘。
相应地,M个乘法器103分别用于将在每个参与卷积计算的时钟周期到达其上的待卷积数和卷积常量相乘,并将相乘结果输出至累加求和模块104。
进一步,累加求和模块104对M个乘法器103在各个参与卷积计算的时钟周期输出的相乘结果进行累加,进而得到待卷积序列Xi和常量序列的卷积结果。
可选地,考虑到FPGA平台上的块随机存储器(block ram,BRAM)彼此独立,且具有随机存取功能。基于此,上述常量缓存模块可由M个独立的BRAM组成,其中每个BRAM中存放N/M个卷积常量,其中,N/M为正整数。
在本实施例中,M的取值由待卷积序列的采样周期T1、卷积器的时钟周期T2以及常量序列中的卷积常量的个数N来决定。其中,一个采样周期包括多个时钟周期,即T2=T1/K,K为大于或等于2的整数。时钟周期T2的时钟信号由FPGA上的晶振产生,并将其晶振频率根据实际需要进行倍频或分频处理,进而得到相应的时钟周期T2。值得说明的是,在本实施例中,参与卷积计算的时钟周期可以为每个采样周期内的全部时钟周期,也可为每个采样周期内的部分时钟周期,具体由待卷积序列的采样周期T1、卷积器的时钟周期T2以及常量序列中的卷积常量的个数N的数值关系来决定,确切地说由M的取值来决定。若为整数,则可取在该情况下,参与卷积计算的时钟周期为每个采样周期内的全部时钟周期。优选地,M的取值为:其中,INT(·)为取整函数。这样,可保证在下一个采样周期到来前,常量缓存模块101中的常量序列与卷积序列排序模块102输出的长度为N的待卷积序列片段卷积计算完成。在该情况下,参与卷积计算的时钟周期为每个采样周期内的全部时钟周期。在本申请实施例中,对不参与卷积计算的时钟周期不进行限定,所描述的时钟周期为参与卷积运算的时钟周期。
例如,假设常量序列的长度N=800,采样周期T1=2500ns(采样频率为400kHz),时钟周期T2=10ns,则也就是说,在此情况下,常量缓存模块的缓存通道为4个,乘法器为4个。这样,在一个采样周期内,卷积序列排序模块102在每个时钟周期到达时输出4个待卷积数,并可在200个时钟周期即2000ns内可将长度为800的待卷积序列片段全部输出,与此同时,常量缓存模块101以在每个时钟周期到达时输出4个卷积常量,并在200个时钟周期内将卷积常量全部输出,即在该采样周期内,有200个时钟周期参与卷积计算。
进一步,在每个参与卷积计算的时钟周期到达时,4个乘法器将常量缓存模块101输出的4个卷积常量和卷积序列排序模块102输出的4个待卷积数对应相乘后,输入累加求和模块104进行累加,进而得到长度为800的待卷积序列片段和长度为800的常量序列的卷积结果,该卷积结果为待卷积序列和常量序列的卷积结果中的一个元素。在下一个时钟周期到达时,下一个长度为800的待卷积序列片段和长度为800的常量序列的卷积结果进行累加,得到下一个卷积结果,依此类推,直至待卷积序列中的所有待卷积数全部完成与常量序列的卷积,进而得到待卷积序列与常量序列的卷积结果。
基于上述分析可知,本实施例提供的卷积器,在常量序列的长度固定的情况下,无论待卷积序列的长度多长,都只需要M个乘法器即可实现待卷积序列和常量序列的卷积计算。
在本实施例中,将待卷积序列滑动输出,对于一个采样周期输出的N个待卷积数,在该采样周期内的每个时钟周期到达时输出M个待卷积数,以与常量缓存模块在该时钟周期输出的M个常量在M个并行通道下相乘后,再将相乘结果进行求和,之后针对各采样周期,将各采样周期内的每个时钟周期得到的求和结果分别进行累加,进而得到待卷积序列与常量序列的卷积结果。在本申请实施例中,在固定长度的常量序列下,无论待卷积序列的长度为多少,整个卷积过程都只需M个乘法器,减少了卷积计算的乘法器等资源消耗。
在一可选实施例中,如图1a所示,累加求和模块104可由M个加法器组成;该M个加法器中的M-1个加法器用于在每个时钟周期将M个乘法器输出的相乘结果进行相加,并将每个时钟周期的相加结果输出给M个加法器中除上述M-1个加法器之外的另一个加法器;且除上述M-1个加法器之外的另一个加法器,用于将一个采样周期内的每个时钟周期的相加结果进行累加,以得到待卷积序列与常量序列的卷积结果。
为了清楚地说明上述M个加法器的累加过程,下面以M=4为例,并结合图1b所示的加法器的累加过程示意图进行示例性说明。
如图1b所示,在各采样周期,对于任一参与卷积计算的时钟周期来说,当该时钟周期到达时,4个乘法器分别将其得到的乘积m1-m4输出至加法器A1和A2,加法器A1和A2分别将m1-m4进行两两加和得到求和结果m12和m34,并输出至加法器A3,当下一个时钟周期到达时,加法器A3将m12和m34进行相加得到求和结果m1234,并输出至加法器A4并在下一个时钟周期到达时,加法器A4将该求和结果m1234与上一时钟周期得到的求和结果进行累加,这样在加法器A4中将每个时钟周期得到求和结果进行累加,至待卷积序列中的待卷积数全部完成计算,所得的累加结果即为待卷积序列与常量序列的卷积结果。值得说明的是,图1b所示的累加求和过程为动态的,例如,在加法器A3在某一个时钟周期对加法器A1和加法器A2在上一个时钟周期输出的求和结果m12和m34进行加法计算时,加法器A1和加法器A2则针对该时钟周期内4个乘法器输出的新的相乘结果进行加法计算。
在另一可选实施例中,如图1c所示,卷积序列排序模块102包括:写控制单元102a、读控制单元102b和具有M个缓存通道的卷积序列缓存单元102c。其中,写控制单元102a可按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入卷积序列缓存单元102c中的相应缓存通道。
相应地,读控制单元102b按照计算顺序,在每个时钟周期从卷积序列缓存单元102c的M个缓存通道中分别读取一个卷积数并对应输出至M个乘法器103,直至将待卷积序列中的待卷积数全部输出。
值得说明的是,对于一个采样周期,写控制单元102a按照设定的通道写入顺序,将本次采集到的一个待卷积数写入卷积序列缓存单元102c中的相应缓存通道中。相应地,在该采样周期内,读控制单元102b按照计算顺序,当时钟周期到达时从M个缓存通道中分别读取一个卷积数,共M个待卷积数,并对应输入到M个乘法器103中,直至将长度为N的待卷积序列片段全部输出。其中,一个采样周期处理的待卷积序列片段的长度与常量序列的长度相等,均为N,优选地,N为M的整数倍。
进一步,可选地,上述卷积序列缓存单元也可由M个独立的BRAM组成,其中,每个BRAM使用N/M个存储空间,用于存放待卷积序列。
对于下一个采样周期,写控制单元102a和读控制单元102b分别采用与上述方式将下一个长度为N的待卷积序列片段全部输出,直至将整个待卷积序列中的待卷积数全部输出。在最后一个采样周期的待卷积数写入缓存后,之后的采样周期不再有待卷积数写入,此时每当一个新的采样周期来临时,用0替代待卷积数写入M个缓存通道中,直到0全部覆盖掉所有的有效待卷积数为止。
进一步,考虑到读控制单元102b从卷积序列缓存单元102c中读取数据的便利性,并减少读取数据时的计算量,写控制单元102a在待卷积数依次写入M通道的卷积序列缓存单元时,可以卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将各采样周期采集到的待卷积数依次写入卷积序列缓存单元102c中的相应缓存通道。在本实施例中,如果待卷积序列的长度小于或等于N,可按照上述写入顺序将待卷积序列全部写入卷积序列缓存单元102c;但是,如果待卷积序列的长度大于N,则将按照上述写入顺序将前N个采样周期采集到的待卷积数依次写入卷积序列缓存单元中的相应缓存通道;并在第N+1个采样周期到达时,将第N+1个采样周期接收到的待卷积数写入M个缓存通道的地址最小的位置,即覆盖第1个采样周期写入的第1个待卷积数,以此类推,直至将待卷积序列中的待卷积数全部写入卷积序列缓存单元中。即,按照卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将从第N个采样周期之后采集到的待卷积数依次写入卷积序列缓存单元缓存的前N个采样周期采集到的待卷积数对应的位置。
为了便于理解上述写控制单元102a按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入卷积序列缓存单元102c中的相应缓存通道的过程,下面以M=4,常量序列的长度为800,待卷积序列Xi的长度为2000,且设定的通道写入顺序为上述以M个缓存通道的地址从小到大的顺序为例,对其进行示例性说明。
如图2a所示,每个缓存通道使用200个存储空间,通道编号分别为0、1、2、3,每个通道的存储空间的行号从下至上依次为0-199。当第一个采样周期到达时,从通道0的第0行开始写入,即将X0写入通道0的第0行;当第二个采样周期到达,将X1写入通道1的第0行等等,每个采样周期向卷积序列缓存单元102c写入一个待卷积数,直至将各缓存通道的第0行写满。之后,当下一个采样周期到达时,从通道0的第1行开始写入,即将X4写入通道0的第1行,依次反复,直至将每个通道的存储空间写满,即将X799写入通道3的第199行。值得说明的是,各个通道的存储空间未进行写入时,其数值默认为0。
当将每个通道的存储空间首次写满后,当下一个采样周期到达时,如图2b所示,写控制单元102a将所采集的待卷积数X800重新从通道0的第0行开始写入,并覆盖之前写入的数据X0;并将之后采集到的数据按照首次写入的方式,依次覆盖原先写入的数据,直至将待卷积序列中的2000个待卷积数全部写入,直至将X1999写入通道3的第99行。
进一步,当待卷积序列中的2000个待卷积数全部写入后,在每个采样周期到达时,开始用0覆盖之前的数据。如图2c所示,X1999已写入通道3的第99行后的第一个采样周期到达时,写控制单元102a将0写入通道0的第100行;并在下一个采样周期到达时,将0写入通道1的第100行,依次反复向各通道的存储空间分别写入0,直至各通道的所有存储空间都被0覆盖为止,即直至X1999被0所覆盖为止。
相应地,对于读控制单元102b,其在从卷积序列缓存单元102c中依次读取M个待卷积数时,针对任一采样周期内的参与卷积计算的任一时钟周期,读控制单元102b按照计算顺序,确定在该采样周期待读取的第一个待卷积数所在通道的编号和所在通道内的行号;接着,根据在该采样周期待读取的第一个待卷积数所在通道的编号和其所在通道内的行号以及该时钟周期对应的卷积次数,确定在该时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号;之后,根据在该时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号,按序从卷积序列缓存单元102c的相应缓存通道中读取所述M个待卷积数。
进一步,读控制单元102b在确定在上述参与卷积计算的任一个时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号时,具体用于:将在上述任一采样周期待读取的第一个待卷积数所在通道内的行号加上该时钟周期对应的卷积次数,作为在该时钟周期应该输出的第一个待卷积数的行号,并将在该采样周期待读取的第一个待卷积数所在通道的编号作为在该时钟周期应该输出的第一个待卷积数所在通道的编号;若在该时钟周期应该输出的其它待卷积数的所在通道的编号小于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号加1作为其它待卷积数的行号。
可选地,可设置计数器,用于对任一采样周期内的时钟周期对应的卷积次数进行计数,起始计数为0,即任一采样周期内第一个时钟周期对应的卷积次数的计数为0。每当一个时钟周期到来时,计数器计数加1,作为该时钟周期对应的卷积次数。进一步,当下一个采样周期到来时,计数器清零,重新进行计数。
为了便于理解上述读控制单元102b确定在上述任一个时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号的过程,下面以M=4,常量序列的长度N=800,每个采样周期待卷积序列片段的长度N=800,且上述写控制单元102a按照的设定的通道写入顺序为上述以M个缓存通道的地址从小到大的顺序为例,对其进行示例性说明。
图3a为任一采样周期待读取的计算顺序的待卷积序列片段,图3b为此时卷积序列缓存单元中的待卷积数的存储情况。对于该采样周期,其待读取的第一个卷积数为X6,且为该采样周期内的第1次卷积计算,计数为0,即读取X6时的时钟周期为该采样周期内的第一个时钟周期,其对应的卷积次数为0,那么如图3b所示,该采样周期待读取的第一个卷积数X6所在的通道为通道2,其所在通道2的行号为1,对于该采样周期内的第一个时钟周期来说,第一个时钟周期待读取的第一个待卷积数为X6;对于该采样周期内的第二个时钟周期来说,其对应的卷积次数为1,且其待读取的第一个数为X10,则将该采样周期待读取的第一个待卷积数X6所在通道2即为第二个时钟周期待读取的第一个待卷积数X10所在的通道,且X6的行号1加上第二个时钟周期对应的卷积次数1,即2为第二个时钟周期待读取的第一个数的行号,以此类推,即可确定该采样周期内每个时钟周期待读取的第一个待卷积数所在通道的编号均为2和其所在通道2内的行号。
进一步,当确定出每个时钟周期待读取的第一个卷积数所在通道的编号和所在通道内的行号时,则可据此确定每个时钟周期应该输出的其他M-1个待卷积数。具体过程为:若在该时钟周期应该输出的其它待卷积数的所在通道的编号小于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号加1作为其它待卷积数的行号。相应地,若在该时钟周期应该输出的其它待卷积数的所在通道的编号大于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号作为其它待卷积数的行号。例如,如图3a所示,对于该采样周期内的第一个时钟周期来说,其应该输出的第一个待卷积数为X6,其他3个待卷积数分别为X7、X8和X9,如图3b所示,对于X7,其所在通道为通道3,通道编号大于X6所在通道编号,则X7所在通道3的行号为1;而对于X8和X9来说,X8所在通道的编号为0,小于X6所在通道编号,X8所在通道0内的行号为2。同理,X9所在通道1内的行号为2。以此类推,可根据每个参与卷积计算的时钟周期内应该输出的第一个待卷积数所在通道内的行号,确定每个参与卷积计算的时钟周期应该输出的其他M-1个待卷积数所在各自通道内的行号。
值得说明的是,本申请实施例提供的卷积器适用于任何需要卷积的计算中,例如高斯低通滤波器、有限长单位冲激响应(Finite Impulse Response,FIR)滤波器等数字滤波器、小波变换等降噪算法等,但不限于此。其中,当将该卷积器用于高斯低通滤波器时,常量序列可为高斯常量序列。
除上述实施例提供卷积器之外,本申请实施例还提供一种基于FPGA的卷积实现方法,该方法适用于上述实施例所提供的卷积器。
图4为本申请一实施例提供的一种基于FPGA的卷积实现方法的流程示意图。如图4所示,该方法包括:
S401、卷积序列排序模块接收采样周期为T1的待卷积序列,并根据计算顺序,在每个时钟周期输出待卷积序列中的M个待卷积数。
S402、存储常量序列的具有M个缓存通道的常量缓存模块,在每个时钟周期输出M个卷积常量。
S403、将M个待卷积数和M个常量相乘后的乘积进行求和,得到每个参与卷积计算的时钟周期的求和结果。
S404、将每个采样周期内的每个时钟周期的求和结果分别进行累加,以获得待卷积序列与常量序列的卷积结果。
在本实施例中,在FPGA平台上进行卷积计算时,采用图1a所示的卷积器进行卷积。卷积器包括:具有M个缓存通道的常量缓存模块、卷积序列排序模块、M个乘法器和累加求和模块。卷积器的具体实现方式可参见上述对图1a进行描述的相关内容,在此不做赘述。
在步骤S401中,对于计算顺序的说明可参见上述卷积器中的相关内容,在此不再赘述。
在本实施例中,M的取值由待卷积序列的采样周期T1、FPGA平台上用于卷积计算时的时钟周期T2以及常量序列中的卷积常量的个数N来决定。其中,一个采样周期包括多个时钟周期,即T2=T1/K,K为大于或等于2的整数。时钟周期T2的时钟信号由FPGA上的晶振产生,并将其晶振频率根据实际需要进行倍频或分频处理,进而得到相应的时钟周期T2。M的取值具体为:其中,INT(·)为取整函数。这样,可保证在下一个采样周期到来前,常量缓存模块中的常量序列与卷积序列排序模块输出的长度为N的待卷积序列片段卷积计算完成。
例如,假设常量序列的长度N=800,采样周期T1=2500ns(采样频率为400kHz),时钟周期T2=10ns,则也就是说,在此情况下,常量缓存模块的缓存通道为4个,乘法器为4个。这样,在一个采样周期内,卷积序列排序模块102在每个时钟周期到达时输出4个待卷积数,并可在200个时钟周期即2000ns内可将长度为800的待卷积序列片段全部输出,与此同时,常量缓存模块以在每个时钟周期到达时输出4个卷积常量,并在200个时钟周期内将卷积常量全部输出。且在每个时钟周期到达时,4个乘法器将常量缓存模块输出的4个卷积常量和卷积序列排序模块输出的4个待卷积数对应相乘后,输入累加求和模块104进行累加,进而得到长度为800的待卷积序列片段和长度为800的常量序列的卷积结果,该卷积结果为待卷积序列和常量序列的卷积结果中的一个元素。在下一个采样周期到达时,与下一个长度为800的待卷积序列片段和长度为800的常量序列的卷积结果进行累加,得到下一个卷积结果,依此类推,直至待卷积序列中的所有待卷积数全部完成与常量序列的卷积,进而得到待卷积序列与常量序列的卷积结果。
基于上述分析可知,本实施例提供的卷积器,在常量序列的长度固定的情况下,无论待卷积序列的长度多长,都只需要M个乘法器即可实现待卷积序列和常量序列的卷积计算。
在本实施例中,将待卷积序列滑动输出,对于一个采样周期输出的N个待卷积数,在该采样周期内的每个时钟周期到达时输出M个待卷积数,以与常量缓存模块在该时钟周期输出的M个常量在M个并行通道下相乘后,再将相乘结果进行求和,之后针对各采样周期,将各采样周期内的每个时钟周期得到的求和结果进行累加,进而得到待卷积序列与常量序列的卷积结果。在本申请实施例中,在固定长度的常量序列下,无论待卷积序列的长度为多少,整个卷积过程都只需M个乘法器,减少了卷积计算的乘法器等资源消耗。
可选地,考虑到FPGA平台上的加法器可实现上述步骤S403的求和功能,因此,在步骤S403中,可采用M个加法器对每个时钟周期M个乘法器输出的乘积进行累加,其中M个加法器中的M-1个加法器用于在每个时钟周期将M个乘法器输出的相乘结果进行相加,并将每个时钟周期的相加结果输出给M个加法器中除上述M-1个加法器之外的另一个加法器;且除上述M-1个加法器之外的另一个加法器,用于将一个采样周期内的每个时钟周期的相加结果进行累加,以得到待卷积序列与常量序列的卷积结果。其中,当M=4时,加法器的累加过程可参见上述图1b及其相关内容,在此不再赘述。
在一可选实施例中,如图1c所示,上述卷积序列排序模块包括:写控制单元、读控制单元和具有M个缓存通道的卷积序列缓存单元。基于如图1c所示的卷积排序模块的结构,步骤S401中卷积序列排序模块接收采样周期为T1的待卷积序列的一种可选实施方式为:按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入具有M个通道的卷积序列缓存单元中的相应缓存通道。
进一步,考虑到读控制单元从卷积序列缓存单元中读取数据的便利性,并减少读取数据时的计算量,在将待卷积数依次写入M通道的卷积序列缓存单元时,若待卷积序列的长度小于或等于N,则按照卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将各采样周期采集到的待卷积数依次写入卷积序列缓存单元中的相应缓存通道;若待卷积序列的长度大于N,则以卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将前N个采样周期采集到的待卷积数依次写入卷积序列缓存单元中的相应缓存通道;并按照卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将从第N个采样周期之后采集到的待卷积数依次写入卷积序列缓存单元缓存的上述前N个采样周期采集到的待卷积数对应的位置。
其中,按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道的具体实施方式,可参见上述图2a-图2c以及相关内容的描述,在此不再赘述。
相应地,基于图1c所示的卷积序列排序模块的结构,在步骤401中,卷积序列排序模块根据计算顺序,在每个时钟周期输出所述待卷积序列中的M个待卷积数的一种可选实施方式为:按照计算顺序,在每个时钟周期从卷积序列缓存单元的M个缓存通道中分别读取一个卷积数并对应输出至M个乘法器,直至将待卷积序列中的待卷积数全部输出。
进一步,在每个时钟周期从卷积序列缓存单元的M个缓存通道中分别读取一个卷积数并对应输出至M个乘法器的一种可选实施方式为:按照计算顺序,确定在该采样周期待读取的第一个待卷积数所在通道的编号和所在通道内的行号;接着,根据在该采样周期待读取的第一个待卷积数所在通道的编号和其所在通道内的行号以及该时钟周期对应的卷积次数,确定在该时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号;之后,根据在该时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号,按序从卷积序列缓存单元的相应缓存通道中读取所述M个待卷积数。
进一步,确定在上述任一个时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号的一种具体可选实施方式为:将在上述任一采样周期待读取的第一个待卷积数所在通道内的行号加上该时钟周期对应的卷积次数,作为在该时钟周期应该输出的第一个待卷积数的行号,并将在该采样周期待读取的第一个待卷积数所在通道的编号作为在该时钟周期应该输出的第一个待卷积数所在通道的编号;若在该时钟周期应该输出的其它待卷积数的所在通道的编号小于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号加1作为其它待卷积数的行号。其中,上述确定在任一个时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号的过程,可参见上述图3a和图3b及其相关内容的描述,在此不再赘述。
可选地,可设置计数器,用于对任一采样周期内的时钟周期对应的卷积次数进行计数,起始计数为0,即任一采样周期内第一个时钟周期对应的卷积次数的计数为0。每当一个时钟周期到来时,计数器计数加1,作为该时钟周期对应的卷积次数。进一步,当下一个采样周期到来时,计数器清零,重新进行计数。
进一步,当确定出每个时钟周期待读取的第一个卷积数所在通道的编号和所在通道内的行号时,则可据此确定每个时钟周期应该输出的其他M-1个待卷积数。具体过程为:若在该时钟周期应该输出的其它待卷积数的所在通道的编号小于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号加1作为其它待卷积数的行号。相应地,若在该时钟周期应该输出的其它待卷积数的所在通道的编号大于在该采样周期待读取的第一个待卷积数所在通道的编号,则将在该时钟周期应该输出的第一个待卷积数的行号作为其它待卷积数的行号。
例如,如图3a所示,对于该采样周期内的第一个时钟周期来说,其应该输出的第一个待卷积数为X6,其他3个待卷积数分别为X7、X8和X9,如图3b所示,对于X7,其所在通道为通道3,通道编号大于X6所在通道编号,则X7所在通道3的行号为1;而对于X8和X9来说,X8所在通道的编号为0,小于X6所在通道编号,X8所在通道0内的行号为2。同理,X9所在通道1内的行号为2。以此类推,可根据每个时钟周期内应该输出的第一个待卷积数所在通道内的行号,确定每个周期应该输出的其他M-1个待卷积数所在各自通道内的行号。此外,如图3b所示,当输出第198组M个待卷积数时,此时第一个待卷积数为X798(位置在通道2的199行),对于X799而言,其通道号为3大于本组第一个待卷积数的通道号为2,因此行号不变仍旧为199行;但对于之后两个待卷积数X800和X801来说,其通道号分别为0和1,小于本组第一个待卷积数的通道号2,因此行号须加1,此时M个通道的缓存的行号上限为199,再进行加1则循环到第0行,因此这两个数分别从通道0和通道1的第0行读取。
值得说明的是,对于一个采样周期,写控制单元按照设定的通道写入顺序,将本次采集到的一个待卷积数写入卷积序列缓存单元中的相应缓存通道中。相应地,在该采样周期内,对于参与卷积计算的时钟周期,读控制单元按照计算顺序,当时钟周期到达时从M个缓存通道中分别读取一个卷积数,共M个待卷积数,并对应输入到M个乘法器中,直至将长度为N的待卷积序列片段全部输出。其中,一个采样周期处理的待卷积序列片段的长度与常量序列的长度相等,均为N,优选地,N为M的整数倍。
进一步,可选地,上述卷积序列缓存单元也可由M个独立的BRAM组成,其中,每个BRAM使用N/M个存储空间,用于存放待卷积序列。
对于下一个采样周期,写控制单元和读控制单元分别采用与上述方式将下一个长度为N的待卷积序列片段全部输出,直至将整个待卷积序列中的待卷积数全部输出。在最后一个采样周期的待卷积数写入缓存后,之后的采样周期不再有待卷积数写入,此时每当一个新的采样周期来临时,用0替代待卷积数写入M个缓存通道中,直到0全部覆盖掉所有的有效待卷积数为止。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤S401和S402的执行主体可以为设备A;又比如,步骤S401的执行主体可以为设备A,步骤S402的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如S401、S402等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
还需要说明的是,在本申请实施例各实施例和附图中相同的符号表示同一物体、同一参量、相同的含义等,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论,在本申请实施例中并不对其书写可能存在斜体和正体进行区分,同一标号或符号如果存在斜体和正体,表示同一物体或同一参量。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (15)
1.一种基于FPGA的卷积器,其特征在于,包括:常量缓存模块、卷积序列排序模块、M个乘法器和累加求和模块;其中,
所述卷积序列排序模块,用于接收采样周期为T1的待卷积序列,并根据计算顺序,在每个时钟周期输出所述待卷积序列中的M个待卷积数至所述M个乘法器;
所述常量缓存模块具有与所述M个乘法器一一对应的M个缓存通道,用于存储常量序列并在每个时钟周期分别向对应的乘法器提供卷积常量;
所述M个乘法器,分别用于将在每个时钟周期到达其上的待卷积数和卷积常量相乘并将相乘结果输出至所述累加求和模块;
所述累加求和模块,用于在采样周期T1内,对所述M个乘法器在各个时钟周期输出的相乘结果进行累加,以得到所述待卷积序列与所述常量序列的卷积结果;
其中,INT(·)表示取整函数;N为所述常量序列中的卷积常量的个数,T2为所述卷积器的时钟周期;其中,T2=T1/K,K为大于或等于2的整数。
2.根据权利要求1所述的卷积器,其特征在于,所述卷积序列排序模块,包括:写控制单元、读控制单元和具有M个缓存通道的卷积序列缓存单元;
所述写控制单元,用于按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道;
所述读控制单元,用于按照所述计算顺序,在每个时钟周期从所述M个缓存通道中分别读取一个卷积数并对应输出至所述M个乘法器,直至将所述待卷积序列中的待卷积数全部输出。
3.根据权利要求2所述的卷积器,其特征在于,所述写控制单元在将各周期采集到的所述待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道时,具体用于:
若所述待卷积序列的长度小于或等于N,则以所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将各采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道;
若所述待卷积序列的长度大于N,则以所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将前N个采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道;并按照所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将从第N个采样周期之后采集到的待卷积数依次写入所述卷积序列缓存单元缓存的所述前N个采样周期采集到的待卷积数对应的位置。
4.根据权利要求2所述的卷积器,其特征在于,所述读控制单元在按照所述计算顺序,在每个时钟周期从所述M个缓存通道中分别读取一个待卷积数时,具体用于:
针对任一采样周期内的参与卷积计算的任一时钟周期,按照所述计算顺序,确定在所述采样周期待读取的第一个待卷积数所在通道的编号和所在通道内的行号;
根据在所述采样周期待读取的第一个待卷积数所在通道的编号和其所在通道内的行号以及所述时钟周期对应的卷积次数,确定在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号;
根据在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号,按序从相应缓存通道中读取所述M个待卷积数。
5.根据权利要求4所述的卷积器,其特征在于,所述读控制单元在确定在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号时,具体用于:
将在所述采样周期待读取的第一个待卷积数所在通道内的行号加上所述时钟周期对应的卷积次数,作为在所述时钟周期待输出的第一个待卷积数的行号,并将在所述采样周期待读取的第一个待卷积数所在通道的编号作为在所述时钟周期待输出的第一个待卷积数所在通道的编号;
若在所述时钟周期待输出的其它待卷积数的所在通道的编号小于在所述采样周期待读取的第一个待卷积数所在通道的编号,则将在所述时钟周期待输出的第一个待卷积数的行号加1作为所述其它待卷积数的行号。
6.根据权利要求2-5任一项所述的卷积器,其特征在于,所述常量缓存模块由M个独立的块随机存储器BRAM组成;所述卷积序列缓存单元由M个独立的BRAM组成。
7.根据权利要求1-5任一项所述的卷积器,其特征在于,所述累加求和模块包括:M个加法器;所述M个加法器中的M-1个加法器用于在每个时钟周期将所述M个乘法器输出的相乘结果进行相加,并将每个时钟周期的相加结果输出给所述M个加法器中除所述M-1个加法器之外的另一个加法器;所述另一个加法器,用于将每个时钟周期的相加结果进行累加,以得到所述待卷积序列与所述常量序列的卷积结果。
8.根据权利要求7所述的卷积器,其特征在于,M=4。
9.一种基于FPGA的卷积实现方法,其特征在于,包括:
卷积序列排序模块接收采样周期为T1的待卷积序列,并根据计算顺序,在每个时钟周期输出所述待卷积序列中的M个待卷积数;
存储常量序列的具有M个缓存通道的常量缓存模块,在每个时钟周期输出M个卷积常量;
将所述M个待卷积数和所述M个常量相乘后的乘积进行求和,得到每个时钟周期的求和结果;
将每个采样周期内的每个时钟周期的求和结果分别进行累加,以获得所述待卷积序列与所述常量序列的卷积结果;
其中,INT(·)表示取整函数,N为所述常量序列中卷积常量个数,T2为所述FPGA平台用于卷积计算时的时钟周期;其中,T2=T1/K,K为大于或等于2的整数。
10.根据权利要求9所述的方法,其特征在于,所述卷积序列排序模块包括卷积序列缓存单元;所述接收采样周期为T1的待卷积数,包括:
按照设定的通道写入顺序,将各采样周期采集到的待卷积数依次写入具有M个通道的卷积序列缓存单元中的相应缓存通道。
11.根据权利要求10所述的方法,其特征在于,所述将各采样周期采集到的待卷积数依次写入具有M个通道的卷积序列缓存单元中的相应缓存通道,包括:
若所述待卷积序列的长度小于或等于N,则以所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将各采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道;
若所述待卷积序列的长度大于N,则以所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将前N个采样周期采集到的待卷积数依次写入所述卷积序列缓存单元中的相应缓存通道;并按照所述卷积序列缓存单元中M个缓存通道的地址从小到大的顺序,将从第N个采样周期之后采集到的待卷积数依次写入所述卷积序列缓存单元单元的所述前N个采样周期采集到的待卷积数对应的位置。
12.根据权利要求9所述的方法,其特征在于,所述根据计算顺序,在每个时钟周期输出所述待卷积序列中的M个待卷积数,包括:
按照所述计算顺序,在每个时钟周期从所述卷积序列缓存单元的M个缓存通道中分别读取一个卷积数并对应输出至M个乘法器,直至将所述待卷积序列中的待卷积数全部输出。
13.根据权利要求12所述的方法,其特征在于,所述按照所述计算顺序,在每个时钟周期从所述卷积序列缓存单元的M个缓存通道中分别读取一个卷积数,包括:
针对任一采样周期内的参与卷积计算的任一时钟周期,按照所述计算顺序,确定在所述采样周期待读取的第一个待卷积数所在通道的编号和所在通道内的行号;
根据在所述采样周期待读取的第一个待卷积数所在通道的编号和其所在通道内的行号以及所述时钟周期对应的卷积次数,确定在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号;
根据在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号,按序从相应缓存通道中读取所述M个待卷积数。
14.根据权利要求13所述的方法,其特征在于,所述根据在所述采样周期待读取的第一个待卷积数所在通道的编号和其所在通道内的行号以及所述时钟周期对应的卷积次数,确定在所述时钟周期内待读取的M个待卷积数各自所在通道的编号和所在通道内的行号,包括:
将在所述采样周期待读取的第一个待卷积数所在通道内的行号加上所述时钟周期对应的卷积次数,作为在所述时钟周期待输出的第一个待卷积数的行号,并将在所述采样周期待读取的第一个待卷积数所在通道的编号作为在所述时钟周期待输出的第一个待卷积数所在通道的编号;
若在所述时钟周期待输出的其它待卷积数的所在通道的编号小于在所述采样周期待读取的第一个待卷积数所在通道的编号,则将在所述时钟周期待输出的第一个待卷积数的行号加1作为所述其它待卷积数的行号。
15.根据权利要求9-14任一项所述的方法,其特征在于,M=4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811493666.XA CN109635929B (zh) | 2018-12-07 | 2018-12-07 | 基于fpga的卷积实现方法及卷积器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811493666.XA CN109635929B (zh) | 2018-12-07 | 2018-12-07 | 基于fpga的卷积实现方法及卷积器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109635929A true CN109635929A (zh) | 2019-04-16 |
CN109635929B CN109635929B (zh) | 2021-07-16 |
Family
ID=66071782
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811493666.XA Active CN109635929B (zh) | 2018-12-07 | 2018-12-07 | 基于fpga的卷积实现方法及卷积器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109635929B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023155758A1 (zh) * | 2022-02-17 | 2023-08-24 | 北京有竹居网络技术有限公司 | 用于数据召回的fpga芯片和数据召回方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987928A (zh) * | 2005-12-21 | 2007-06-27 | 北京航空航天大学 | 一种实时快速实现高斯模板卷积的装置 |
CN103546169A (zh) * | 2012-07-09 | 2014-01-29 | 成都林海电子有限责任公司 | Fpga中实现3/4速率(2,1,7)卷积编码的方法 |
CN104035750A (zh) * | 2014-06-11 | 2014-09-10 | 西安电子科技大学 | 一种基于fpga的实时模板卷积实现方法 |
CN106845635A (zh) * | 2017-01-24 | 2017-06-13 | 东南大学 | 基于级联形式的cnn卷积核硬件设计方法 |
US20170220524A1 (en) * | 2013-12-20 | 2017-08-03 | Intel Corporation | Processing device for performing convolution operations |
US20180341621A1 (en) * | 2017-05-23 | 2018-11-29 | Korea University Research And Business Foundation | Bi-directional fifo memory and convolution processing device using the same |
-
2018
- 2018-12-07 CN CN201811493666.XA patent/CN109635929B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987928A (zh) * | 2005-12-21 | 2007-06-27 | 北京航空航天大学 | 一种实时快速实现高斯模板卷积的装置 |
CN103546169A (zh) * | 2012-07-09 | 2014-01-29 | 成都林海电子有限责任公司 | Fpga中实现3/4速率(2,1,7)卷积编码的方法 |
US20170220524A1 (en) * | 2013-12-20 | 2017-08-03 | Intel Corporation | Processing device for performing convolution operations |
CN104035750A (zh) * | 2014-06-11 | 2014-09-10 | 西安电子科技大学 | 一种基于fpga的实时模板卷积实现方法 |
CN106845635A (zh) * | 2017-01-24 | 2017-06-13 | 东南大学 | 基于级联形式的cnn卷积核硬件设计方法 |
US20180341621A1 (en) * | 2017-05-23 | 2018-11-29 | Korea University Research And Business Foundation | Bi-directional fifo memory and convolution processing device using the same |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023155758A1 (zh) * | 2022-02-17 | 2023-08-24 | 北京有竹居网络技术有限公司 | 用于数据召回的fpga芯片和数据召回方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109635929B (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445471B (zh) | 处理器和用于在处理器上执行矩阵乘运算的方法 | |
Ge et al. | Distributed sampled-data asynchronous H∞ filtering of Markovian jump linear systems over sensor networks | |
US20110283059A1 (en) | Techniques for accelerating computations using field programmable gate array processors | |
Athalye et al. | Generic hardware architectures for sampling and resampling in particle filters | |
CN102739195A (zh) | 一种fir滤波器的处理方法、装置和系统 | |
US20070052557A1 (en) | Shared memory and shared multiplier programmable digital-filter implementation | |
CN110659445B (zh) | 一种运算装置及其处理方法 | |
CN109194307A (zh) | 数据处理方法及系统 | |
CN109271133A (zh) | 一种数据处理方法及系统 | |
CN108073549A (zh) | 卷积运算装置及方法 | |
CN109284475A (zh) | 一种矩阵卷积计算模块及矩阵卷积计算方法 | |
CN106101712B (zh) | 一种视频流数据的处理方法及装置 | |
CN109635929A (zh) | 基于fpga的卷积实现方法及卷积器 | |
CN104349260A (zh) | 低功耗wola滤波器组及其综合阶段电路 | |
CN102129419B (zh) | 基于快速傅立叶变换的处理器 | |
CN102957993B (zh) | 低功耗wola滤波器组及其分析阶段电路 | |
CN108762719A (zh) | 一种并行广义内积重构控制器 | |
CN101640522A (zh) | 一种适用于抽取滤波器的数据抽取方法及装置 | |
CN109389213A (zh) | 存储装置及方法、数据处理装置及方法、电子装置 | |
CN116578819A (zh) | 一种稀疏分数傅里叶变换fpga实现方法及系统 | |
US9058436B1 (en) | Method and system for reducing the effect of component aging | |
CN107391440A (zh) | 一种快速傅里叶变换算法输出数据的处理装置及方法 | |
CN109800191B (zh) | 用于计算序列数据的协方差的方法及装置 | |
US9047215B1 (en) | Method and system for reducing the effect of component recovery | |
CN106936405A (zh) | 基于fpga实现单路数字fir滤波器的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |