CN113157637A - 一种基于fpga的大容量可重构的fft运算ip核 - Google Patents
一种基于fpga的大容量可重构的fft运算ip核 Download PDFInfo
- Publication number
- CN113157637A CN113157637A CN202110458193.5A CN202110458193A CN113157637A CN 113157637 A CN113157637 A CN 113157637A CN 202110458193 A CN202110458193 A CN 202110458193A CN 113157637 A CN113157637 A CN 113157637A
- Authority
- CN
- China
- Prior art keywords
- data
- module
- calculation
- storage
- storage unit
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
- G06F15/7878—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS for pipeline reconfiguration
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种基于FPGA的大容量可重构FFT运算IP核,将确定好的倒位序数据存入倒位序存储单元,将确定好的旋转因子存入旋转因子存储单元,采用两块数据存储RAM形成乒乓结构进行数据存储,将旋转因子存储单元和数据存储RAM进行分块,在运算开始时,数据缓存模块将数据按照倒位序存入数据存储RAM中,在每级蝶形结运算时,FFT运算模块按照特定规则从数据存储RAM和旋转因子存储单元中分批次读取数据,并行进行蝶形结运算,将计算结果存入另一块数据存储RAM中,直到计算完毕,将FFT运算结果进行输出。本发明IP核可自由配置并行数,通过并行与流水线运算相结合的方式解决大点数FFT运算中时钟周期过多、进行大点数的运算较为困难等问题。
Description
技术领域
本发明属于数据采集领域,更为具体地讲,涉及一种基于FPGA的大容量可重构的FFT运算IP核。
背景技术
随着电子技术的发展,测量仪器在工程领域扮演着越来越重要的角色,广泛地应用于各个领域;数据采集作为测量仪器中的一个关键环节,其速率高低是衡量测量仪器性能优劣的一个重要指标;如今实际的工程环境愈加复杂,测量仪器也面临着越来越高的测量指标要求,低延时与高精度测量需求已成为了其发展的主要瓶颈;要在有限的硬件资源下实现更高精度、更快速的测量,对于数据采集系统而言也将面临着更加巨大的挑战。
当前具有低延时与高精度的各种测量仪器都长期被国外生产厂商垄断,而国内研究与生产的厂商在相关技术上存在着很大的空缺。因此,尽快打破这一领域国外技术封锁对于我国精密仪器行业,乃至国防科技的发展都有着重要的意义。
基于这样的技术背景下,提高设备数据处理速率将有重要的意义。在众多的测量仪器中,如示波器、频谱分析仪以及功率分析仪等,其都需要对待测信号进行频谱分析,FFT算法作为一种常用方法,在各种仪器中都被广泛使用,该算法的传统的实现方法主要有三种途径,其运算快慢会直接影响设备的数据处理的速度。
其一,通过上位机中CPU进行运算,其优点是灵活且易开发,但由于CPU的串行计算原理,计算时间长。
其二,通过专用DSP芯片进行计算,其较CPU而言运算时间会大量减少,但其本质还是串行计算,减少的时间依赖于芯片性能,提升有限。
其三,直接使用FPGA进行运算,由于其能在数据采集后直接运算,减少了大容量数据传输的时间,运算速度更快,但目前实现此方法的主要途径是使用相关公司提供的IP核,其为了保证通用性,在性能与功能上有一定的局限性。比如xilinx公司提供的IP只能实现8点到65536点范围内2的整数次幂点数的FFT计算,且无法设置并行数以提升计算效率。
鉴于现有IP核的局限性,设计一种基于FPGA内部逻辑资源的大容量可重构的通用FFT运算方法,并封装为通用IP核,以满足速度与资源的均衡配置,这在实际的工程运用中将有着巨大的价值。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于FPGA的大容量可重构的FFT运算IP核,该IP核可自由配置并行数,通过并行与流水线运算相结合的方式解决大点数FFT运算中时钟周期过多、进行大点数的运算较为困难等问题,并根据实际资源情况调整并行数,以实现速度与资源的均衡。
为了实现上述发明目的,本发明基于FPGA的大容量可重构的FFT运算IP核包括倒位序存储单元、旋转因子存储单元、数据存储RAMA、数据存储RAMB、数据缓存模块、FFT运算模块和数据输出处理模块,以上模块均在FPGA中设置,其中:
倒位序存储单元用于存储预先根据全基二蝶形结算法和FFT运算点数N确定好的倒位序数据,第n个倒位序数据即为FFT运算中第n个数据在数据存储RAMA的存储地址,n=0,1,…,N-1;
旋转因子存储单元用于顺序存储预先根据全基二蝶形结算法和FFT运算点数N确定好的N/2旋转因子数据其中t表示旋转角度份数,t=0,1,…,N/2-1;记预先设置的并行路数为P,P为2的整数次幂且P≤N/2;当旋转因子存储单元采用单口ROM时,将旋转因子存储单元等分为P个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P,n=0,1,…,N/2P-1;当旋转因子存储单元采用双口ROM时,将旋转因子存储单元等分为P/2个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P/2,n=0,1,…,N/P-1;
数据存储RAMA、数据存储RAMB用于形成乒乓结构以存储运算数据,即一个用于读取,另一个用于写入,蝶形结运算的每级流图对两个RAM进行交替读写;数据存储RAMA和数据存储RAMB采用相同的存储结构,分别等分为P个分块,记各个分块的序号为i,分块中各个数据的序号为j,其中i=1,2,…,P,j=0,1,…,N/P-1;
数据缓存模块用于将上级FIFO传入的数据进行预处理,数据缓存模块包括浮点转换模块和倒位序存储模块,其中浮点转换模块用于将上级FIFO中所存储的输入数据转换为浮点数据,然后发送给倒位序存储模块;倒位序存储模块从倒位序存储单元中读取倒位序数据,按照倒位序数据将浮点转换模块转换得到的各个浮点数据的实部和虚部存储至数据存储RAMA相应存储地址对应的实部存储单元和虚部存储单元;
FFT运算模块用于实现上级FIFO传入数据的FFT运算,FFT运算模块包括级数计数器、读取选择模块、蝶形结计算模块和写入选择模块,其中:
级数计数器用于对蝶形结运算的级数进行计数;
读取选择模块用于根据蝶形结运算级数从数据存储RAMA或数据存储RAMB中分批读取所需进行蝶形结计算的数据对,从旋转因子存储单元中读取数据对进行蝶形结运算时所需的旋转因子,将数据对和旋转因子按批次发送至蝶形结计算模块;
蝶形结计算模块用于对每个批次接收的数据对和旋转因子并行进行蝶形结运算,将计算结果发送至写入选择模块;
写入选择模块用于根据蝶形结运算级数将本次蝶形结运算的结果写入数据存储RAMB或数据存储RAMA中;
FFT运算模块的工作流程如下:
S1:级数计数器设置级数值k=1;
S2:读取选择模块判断当前级数值k是否为奇数,如果是,则从数据存储RAMA中读取数据,否则从数据存储RAMB中读取数据;读取数据的方法为:从当前进行数据读取的数据存储RAM中分N/2P个批次进行数据读取并发送给蝶形结计算模块,第d个批次数据包括P个数据对,每个数据对包括一个偶数点数据和一个奇数点数据,即每个分块中第2d个数据和第2d+1个数据,d=0,1,…,N/2P-1;并计算未分块前数据对的原始地址发送给写入选择模块,记数据对所在分块的序号为i,记偶数点数据所在的地址序号为j,奇数点数据的地址序号为j+1,偶数点数据的原始地址addi,j和奇数点数据的原始地址addi,j+1的计算公式分别如下:
读取选择模块在读取每个数据对的同时,计算得到该数据对所对应旋转因子在旋转因子存储单元中的地址,然后读取对应的旋转因子并送入蝶形结计算模块;旋转因子地址的计算方法如下:
其中,%表示求取余数;
S3:蝶形结计算模块在每接收到一个批次的P个数据对和对应的P个旋转因子后,进行P路并行蝶形结运算,N/2P个批次的P路并行蝶形结运算采用流水线结构进行,将得到N/2组加法计算结果和减法运算结果发送至写入选择模块;
S4:写入选择模块判断当前级数值k是否为奇数,如果是,则将计算结果写入数据存储RAMB,否则将计算结果写入数据存储RAMA;对于接收到的每组加法计算结果和减法运算结果,写入数据的方法为:
采用以下公式,计算得到未分块前本次加法计算结果的原始写入地址addi*,j*和减法计算结果的原始写入地址addi*,j*+1:
S5:写入选择模块判断是否当前级数k<K,K=log2N,如果是,进入步骤S6,否则进入步骤S7;
S6:写入选择模块向级数计数器发送本次运算完成消息,级数计数器令k=k+1,返回步骤S2;
S7:写入选择模块向数据输出处理模块发送蝶形结运算完成消息;
数据输出处理模块用于在接收到蝶形结运算完成消息后将FFT运算结果进行顺序输出;数据输出处理模块包括读取选择模块、数据处理模块和数据输出模块,其中:
读取选择模块判断蝶形结运算总级数K是否为奇数,如果是,则从数据存储RAMB中读取全部计算结果数据的实部和虚部,否则从数据存储RAMA中读取全部计算结果数据的实部和虚部,然后发送给数据处理模块;
据处理模块将所接收的全部计算结果数据的虚部数据取反,连同实部数据发送给数据输出模块;
数据输出模块将将接收到的实部数据和取反后虚部数据,以高位实部,低位虚部打包构成复数计算结果顺序输出。
本发明基于FPGA的大容量可重构FFT运算IP核,将确定好的倒位序数据存入倒位序存储单元,将确定好的旋转因子存入旋转因子存储单元,采用两块数据存储RAM形成乒乓结构进行数据存储,将旋转因子存储单元和数据存储RAM进行分块,在运算开始时,数据缓存模块将数据按照倒位序存入数据存储RAM中,在每级蝶形结运算时,FFT运算模块按照特定规则从数据存储RAM和旋转因子存储单元中分批次读取数据,并行进行蝶形结运算,将计算结果存入另一块数据存储RAM中,直到计算完毕,将FFT运算结果进行输出。
本发明具有以下技术效果:
1)本发明实现了蝶形结的流水与并行相结合的运算方式,解决大点数FFT运算中时钟周期过多、进行大点数的运算较为困难等问题,理论上无最大点数限制;
2)本发明可以根据实际需求任意更改并行数,理论上可达到N/2路的全并行,实现可重构的FFT运算IP核,以便更好适应不同应用场景的需要;
3)本发明支持固定位宽下的无符号整型、有符号整型、定点类型以及浮点类型等多种输入格式,在浮点转换模块中将输入数据转换为浮点格式进行FFT运算,支持单精度浮点或双精度浮点两种格式的选择,输入输出位宽可根据实际需求任意配置。
4)本发明FFT运算IP核可以使用高层次综合(High Level Synthesis)工具(简称HLS工具)进行开发,其可将C/C++代码先转换为verliog代码,利用HLS工具对FFT算法进行重构、优化以降低逻辑资源的消耗,再将verliog代码综合实现成特定电路。所有的配置信息都可放入头文件中,以参数形式进行配置修改,更加方便快捷。
附图说明
图1是本发明基于FPGA的大容量可重构FFT运算IP核的具体实施方式结构图;
图2是本发明中数据缓存模块5的结构图;
图3是本发明中FFT运算模块的结构图;
图4是FFT运算模块的工作流程图;
图5是本发明中数据输出处理模块的结构图;
图6是8点FFT的全基二蝶形结算法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
为了更好地说明本发明的技术方案,首先对FFT运算方法进行简要说明。FFT运算总体上可分为按时间抽取(DIT)以及按频率抽取(DIF)两种计算方法;根据蝶形结的不同又分为基二、基四以及基二和基四混合基这三种计算方式;由于数据流的输入顺序不同,又可分为自然序输入-倒位序输出和倒位序输入-自然序输出两种运算流程;最后根据存储方式的不同,还可分为同址存储和异址存储两种存储结构,选择不同的组合方式,其在时间与资源消耗上各有不同。本发明中选用DIT方式,以全基二蝶形结算法,结合倒位序输入-自然序输出以及异址存储的方式,以实现时间消耗最少的FFT运算。
图1是本发明基于FPGA的大容量可重构FFT运算IP核的具体实施方式结构图。如图1所示,本发明基于FPGA的大容量可重构FFT运算IP核包括倒位序存储单元1、旋转因子存储单元2、数据存储RAMA3、数据存储RAMB4、数据缓存模块5、FFT运算模块6和数据输出处理模块7,以上模块均在FPGA中设置。接下来分别对各个模块进行详细说明。
倒位序存储单元1用于存储预先根据全基二蝶形结算法和FFT运算点数N确定好的倒位序数据,第n个倒位序数据即为FFT运算中第n个数据在数据存储RAMA的存储地址,n=0,1,…,N-1。
旋转因子存储单元2用于顺序存储预先根据全基二蝶形结算法和FFT运算点数N确定好的N/2旋转因子数据其中t表示旋转角度份数,t=0,1,…,N/2-1。为了实现并行,本发明中使用顺序计数分块方法(Block方法)对旋转因子存储单元进行分块,记预先设置的并行路数为P,P为2的整数次幂且P≤N/2;当旋转因子存储单元采用单口ROM时,将旋转因子存储单元等分为P个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P,n=0,1,…,N/2P-1;当旋转因子存储单元采用双口ROM时,将旋转因子存储单元等分为P/2个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P/2,n=0,1,…,N/P-1。本实施例中旋转因子存储单元2包括旋转因子实部存储单元和旋转因子虚部存储单元,旋转因子实部存储单元和旋转因子虚部存储单元均进行分块,将每个旋转因子分为实部和虚部进行存储。
数据存储RAMA3、数据存储RAMB4用于形成乒乓结构以存储运算数据,即一个用于读取,另一个用于写入,蝶形结运算的每级流图对两个RAM进行交替读写。为了实现并行,同样需要对两个RAM进行分块,即:数据存储RAMA和数据存储RAMB采用相同的存储结构,分别等分为P个分块,记各个分块的序号为i,分块中各个数据的序号为j,其中i=1,2,…,P,j=0,1,…,N/P-1。与旋转因子存储单元类似,本实施例中数据存储RAMA和数据存储RAMB均包括数据实部存储单元和数据虚部存储单元,数据实部存储单元和数据虚部存储单元均进行分块,将每个数据分为实部和虚部进行存储。
数据缓存模块5用于将上级FIFO传入的数据进行预处理。图2是本发明中数据缓存模块5的结构图。如图2所示,本发明中数据缓存模块5包括浮点转换模块51和倒位序存储模块52,其中浮点转换模块51用于将上级FIFO中所存储的输入数据转换为浮点数据,然后发送给倒位序存储模块52;倒位序存储模块52从倒位序存储单元1中读取倒位序数据,按照倒位序数据将浮点转换模块51转换得到的各个浮点数据的实部和虚部存储至数据存储RAMA3相应存储地址对应的实部存储单元和虚部存储单元。
FFT运算模块6用于实现上级FIFO传入数据的FFT运算。图3是本发明中FFT运算模块的结构图。如图3所示,FFT运算模块6包括级数计数器61、读取选择模块62、蝶形结计算模块63和写入选择模块64,其中:
级数计数器61用于对蝶形结运算的级数进行计数。
读取选择模块62用于根据蝶形结运算级数从数据存储RAMA3或数据存储RAMB4中分批读取所需进行蝶形结计算的数据对,从旋转因子存储单元2中读取数据对进行蝶形结运算时所需的旋转因子,将数据对和旋转因子按批次发送至蝶形结计算模块63。
蝶形结计算模块63用于对每个批次接收的数据对和旋转因子并行进行蝶形结运算,将计算结果发送至写入选择模块64。
写入选择模块64用于根据蝶形结运算级数将本次蝶形结运算的结果写入数据存储RAMB4或数据存储RAMA3中。
图4是FFT运算模块的工作流程图。如图4所示,本发明中FFT运算模块的工作流程如下:
S401:级数计数器61设置级数值k=1。
S402:读取数据:
读取选择模块62判断当前级数值k是否为奇数,如果是,则从数据存储RAMA3中读取数据,否则从数据存储RAMB4中读取数据。由于数据存储RAMA3/RAMB4中的数据已经是按照蝶形结运算所需的数据顺序进行存储的,每次运算需要相邻存储地址的2个数据点,而本发明中采用P路并行进行蝶形结运算,因此其读取数据的方法为:读取选择模块62从当前进行数据读取的数据存储RAM中分N/2P个批次进行数据读取,第d个批次数据包括P个数据对,每个数据对包括一个偶数点数据和一个奇数点数据,即每个分块中第2d个数据和第2d+1个数据,d=0,1,…,N/2P-1。并计算未分块前数据对的原始地址发送给写入选择模块,记数据对所在分块的序号为i,记偶数点数据所在的地址序号为j,奇数点数据的地址序号为j+1,偶数点数据的原始地址addi,j和奇数点数据的原始地址addi,j+1的计算公式分别如下:
读取选择模块62在读取每组数据的同时,计算得到该组数据所对应旋转因子在旋转因子存储单元2中的存储地址,然后读取对应的旋转因子并送入蝶形结计算模块63。旋转因子存储地址的计算方法如下:
由于旋转因子是顺序存储的,因此旋转因子数据对应的存储地址序号为t。根据旋转因子存储单元2的分块规则,当旋转因子存储单元2采用单口ROM时,采用以下公式计算得到旋转因子数据的分块序号m和在分块中的序号n:
其中,%表示求取余数。
S403:蝶形结计算:
蝶形结计算模块63在每接收到一个批次的P个数据对和对应的P个旋转因子后,进行P路并行蝶形结运算,N/2P个批次的P路并行蝶形结运算采用流水线结构进行,将得到N/2组加法计算结果和减法运算结果发送至写入选择模块64。
如图4所示,在蝶形结计算模块63中,一次蝶形结运算需要读取三个输入数据(一个偶数数据点、一个奇数数据点以及一个旋转因子),完成一次复数乘法、一次复数加法和一次复数减法,最后得到两个结果。因为输入数据是复数值,所以参与运算的数据实际为三个实部数据以及三个虚部数据,共六个数据,这里以or和oi表示偶数点的实部与虚部数据,er与ei表示奇数点的实部与虚部数据,wr和wi表示旋转因子的实部和虚部数据,则蝶形结计算的具体过程如下:
1)进行乘法运算,以tr和ti分别表示乘法结果的实部和虚部,具体计算公式如下所示:
tr=er×wr-ei×wi
ti=er×wi+ei×wr
2)同时进行加法和减法运算,以or*和oi*表示加法计算结果的实部与虚部数据,er*和ei*表示减法计算结果的实部与虚部数据,具体计算公式如下所示:
or*=or+tr
oi*=oi+ti
er*=or-ti
ei*=oi-ti
S404:运算结果写入:
当完成一次蝶形结计算结束后,需要将计算结果进行存储,其写入方式与读取方式不同,加法计算结果与减法计算结果需要分离存储。同样地,写入选择模块64首先根据蝶形结当前的运算级数k确定本次所需要进行数据写入的RAM,即判断当前级数值k是否为奇数,如果是,则将计算结果写入数据存储RAMB4,否则将计算结果写入数据存储RAMA3。对于接收到的每组加法计算结果和减法运算结果,写入数据的方法为:
采用以下公式,计算得到未分块前本次加法计算结果的原始写入地址addi*,j*和减法计算结果的原始写入地址addi*,j*+1:
S405:写入选择模块64判断是否当前级数k<K,K表示蝶形结运算总级数,K=log2N,如果是,进入步骤S406,否则进入步骤S407。
S406:进入下一级运算:
写入选择模块64向级数计数器61发送本次运算完成消息,级数计数器令k=k+1,返回步骤S402。
S407:蝶形结运算结束:
写入选择模块64向数据输出处理模块5发送蝶形结运算完成消息。
数据输出处理模块7用于在接收到蝶形结运算完成消息后将FFT运算结果进行顺序输出。图5是本发明中数据输出处理模块的结构图。如图5所示,本发明中数据输出处理模块7包括读取选择模块71、数据处理模块72和数据输出模块73,其中:
读取选择模块71判断蝶形结运算总级数K是否为奇数,如果是,则从数据存储RAMB4中读取全部计算结果数据的实部和虚部,否则从数据存储RAMA3中读取全部计算结果数据的实部和虚部,然后发送给数据处理模块72。
数据处理模块72将所接收的全部计算结果数据的虚部数据取反,连同实部数据发送给数据输出模块73。虚部取反是为了确保计算结果与matlab的计算结果相同。
数据输出模块73将接收到的实部数据和取反后虚部总数构成复数计算结果顺序输出。假设为32位浮点数据,其高32位为实部数据,低32位为虚部数据,即打包成64位数据输出,64位浮点同理,位宽乘2即可。
此外,为了令FFT运算IP核正常工作,还需要根据需要配置若干接口单元。如图1所示,本实施例中配置的接口单元包括时钟与复位接口、控制信号接口以及数据接口构成。
1)时钟接口和复位接口,分别为ap_ctrl接口以及ap_rst接口,其中ap_ctrl接口用于接收时钟信号,ap_rst接口用于接收复位信号,高电位表示IP核处于复位状态,所有功能都无法使用,电位置零后可正常使用。
2)控制信号接口,使用ap_ctrl_hs协议,用于控制模块的开启与关闭以及表示模块的工作状态,分别为ap_start接口、ap_done接口、ap_idle接口以及ap_ready接口,其中:
ap_start接口用于接收IP核的执行控制信号ap_start,高电位时IP核开始运行。执行控制信号需要一直保持高电位,直到准备信号ap_ready被置为1后,其在下个时钟周期再进行改变。当准备信号ap_ready置为1时,表明本次任务结束,执行控制信号ap_start可以选择置为1并继续执行下次任务或设置为0,表示在当前事务的结束之后暂停工作,直到下次拉高后继续开始工作。如果在准备信号ap_ready置为1之前执行控制信号ap_start就被拉低,则表明本次任务有可能没有把所有输入端口数据读完,并可能延迟下一个输入的读取操作。
ap_ready接口用于接收准备信号ap_ready,准备信号ap_ready输出为高电位时,表示设计已经准备好接受新数据,表明本次任务所需的输入数据已经全部读入。如果设计不是流水线操作,则会在下一次任务才开始才执行新的读操作。所以,这个信号是用来决定是否在输入端口上使用新的数据,并决定是否用一个执行控制信号ap_start输入信号来启动下一个新的任务。如果执行控制信号ap_start没有被设置为高电位,只有在当前任务完成了所有的操作后,准备信号ap_ready才会被拉低。
ap_done接口用于接收执行完成信号ap_done,执行完成信号ap_done用于表明当前任务是否完成了所有的操作。在任务完成前一个时钟拉高,下一个时钟立刻拉低,表示已经完成了当前任务的所有操作。
ap_idle接口用于接收闲置状态信号ap_idle,闲置状态信号ap_idle用于表示IP核正在操作或闲置状态(无操作)。闲置状态信号ap_idle置为高电位表明处于空闲状态,表示设计完成操作,且未进行任何进一步的操作。一旦设计开始运行,该信号拉低。
3)数据接口由一个输入端接口与一个输出端接口构成。本实施例中IP核的数据输入端,采用标准的FIFO接口,分为读使能信号read、FIFO空信号empty(特别说明该信号为低电平有效)以及数据输入信号din,用于接收上级FIFO传入的数据。其中数据输入信号din的位宽可根据实际需求设置,如输入数据由16位AD产生,则数据位宽也可设置为16位相同位宽,用于接收16位整数数据。
IP核的数据输出端,同样采用标准FIFO接口,分为写使能信号write、FIFO满信号full(特别说明该信号为低电平有效)以及数据输出信号dout,用于传输数据给下级FIFO。输出信号dout的位宽可根据实际需求设置,本实施例中将位宽固定为64位,采用单精度浮点float编码格式,高32位为实部数据,低32位为虚部数据。若采用双精度浮点运算实际位宽会为上述设置位宽的两倍。
本发明的FFT运算IP核所使用的HLS工具、基于高级程序语言C/C++进行开发,较传统直接使用verliog开发,实现更加简单,开发周期更短,可快速设置运算点数、并行路数、资源类型以及数据位宽,使用灵活。
为了优化资源,防止存储资源的浪费,本实施例使用HLS工具中的pragma HLSbind_storage设置指令对资源类型进行设置,对于数据存储RAM的资源选择做了以下优化,当单块RAM存储点数小于1k时,选择使用DRAM,当点数大于等于1k时,使用BRAM。对于FPGA中DSP资源过少,需要并行数过多的情况,可选择使用触发器与查找表组合代替DSP以实现计算功能。
为了提高设计的通用性与灵活性,对于不同的FFT运算点数,不同的计算精度要求,以及不同输入输出数据类型以及位宽需求,本实施例将其实现方式都以头文件中常量参数以及数据类型的形式进行设置,针对不同测量仪器的数据传输架构,更改具体参数数值即可实现运算电路的通用。为了实现运算速率与资源消耗的灵活配置,本实施例使用HLS工具中的pragma HLS pipeline指令设置流水结构,以pragma HLS unroll指令设置并行路数,通过更改指令参数即可实现不同并行路数的电路综合。
由于使用了HLS工具,以上设置可方便快捷地在工具中实现。此外,使用HLS工具也能直接对本发明所使用的顺序计数分块方法以及实部数据与虚部数据分块存储方法进行设置,不需要另行编写代码实现。
接下来以8点FFT的全基二蝶形结算法为例,对本发明的实施过程进行详细说明。图5是8点FFT的全基二蝶形结算法流程图。如图5所示,在传统FFT运算方法中,如果流图选择的是异址存储方式,新的计算结果不会只在原址存储,这很可能会把还未进行计算的数据给覆盖掉,计算结果会产生错误;如果进行流水线计算,除了数据覆盖的问题,还会存在读写冲突问题。以图5为例,x(0)与x(4)进行蝶形运算时,其首先需要从RAM的(0)与(1)地址中读取两个点的数据,然后进行计算,再计算结束后写入RAM的(0)和(4)地址中,此时新的数据会将(4)中还未计算的数据覆盖掉,并且在写入同时,对于x(3)与x(7)这对蝶形结,需要从RAM的(6)和(7)地址中读取数据,读写冲突则会产生。而本发明中单块RAM用RAMA与RAMB两块代替,一个用于读取,一个用于写入,并再每级交换两块RAM的读取与写入的方式,形成乒乓结构,将读写操作分离,使用真双口RAM,同一时钟可以进行两个数据的读写,即解决了数据覆盖问题,同时也避免了读写冲突。
在此基础上,继续讨论并行运算时的情况。在传统FFT运算IP核中,通常是以读取数据-运算-写入这个流程来进行操作的,为了提高效率可以采用流水线模式。先以最简单的两路并行为例,即分块数为2。对于8点的FFT,将RAMA与RAMB分为上下两个对等的部分,即(0)到(3)地址为第一块,(4)到(7)地址为第二块。则4对蝶形运算就可由原来进行4次流水计算,变为进行2次并行运算,每次并行时同时进行两对蝶形运算,2次并行运算间则采用流水结构。实例中,首先进行x(0)与x(4)和x(1)与x(5)两对蝶形结的运算,由于读取数据时分别在第一块和第二块进行,所以不会有读取冲突,并且运算时也采用独立的运算资源,同样能实现并行处理,最后需要考虑的问题是在写操作时,其地址是否会产生冲突。现在来分析实例中的写操作,x(0)与x(4)的计算结果会写入(0)与(4)地址中,同时x(1)与x(5)的计算结果会写入(2)与(6)地址中,其中(0)与(2)地址属于第一块RAM而(4)与(6)属于第二块RAM,此时每块RAM都在同一时刻只进行了两点的写入,所以对于真双口RAM依然不会产生写入冲突,并行运算可行。同理,剩余两对蝶形结也可进行上面相同的操作,只是在时间上相差了一个时钟周期,若点数大于8点,其后更多的蝶形结也可依次按照一个时钟周期的流水进行两路并行运算。需要特别说明的是每次并行蝶形结对数的选择需要与分块方式一致,例如16点4分RAM,需要两次并行完成,第一次并行计算因当选择四块RAM中各自的第一对蝶形结,第二次选择第二对。
对于两路并行来说,其写入相对比较特殊,每次只有两点对同一块RAM进行写入,对于真双口RAM而言完全能够满足,若并行数增加,是否会出现超过真双口RAM最大允许写入数量的情况,这也需要进行进一步的分析。下面考虑并行数为四路的情况,此时会有四对蝶形结同时进行运算。表1是8点4路并行2块分块的并行情况表。
表1
如表1所示,很容易得出对于每块RAM不论读写,其都会在同一时刻访问4个数据,冲突必然产生,其主要原因是RAM划分数少于并行数。
表2是8点4路并行4块分块的并行情况表。
表2
如表2所示,将RAM从两分改为四分后,冲突即可解决。对于每对蝶形结,其读取RAM都各自独立,同一时刻只会读取两个数据,对于真双口RAM不会冲突;对于每对蝶形结,其写入RAM都为两块不同的RAM,但每块RAM同一时刻也只会有两个数据的写入,对于真双口RAM依然不会有写入冲突。
对于旋转因子而言,计算时只需要进行读取,不需要写入,故对于串行与流水结构不存在读取冲突问题,只需考虑并行时的情况。在8点四路并行的情况下,第一级蝶形结运算只需读取故只用读取(0)地址数据一次,分给四对蝶形结使用;第二级蝶形结运算需要与将旋转因子的存储RAM进行二分,存储在第一块RAM中,而则存储在第二块RAM中,在各自RAM中同时读取一次;第三级蝶形结需要与当旋转因子存储单元采用单口ROM时,旋转因子存储单元采用四分,则四个旋转因子也都独立存储。当旋转因子存储单元采用双口ROM时,旋转因子存储单元采用二分,则与存储在第一块RAM中,而与存储在第二块RAM中,也可以实现同时读取不存在冲突。
对于8点的FFT运算,四路并行已经达到了最大并行数,即实际上已经实现了全并行运算,所以对于更大点数的FFT运算而言,理论上,不论是部分并行分步流水还是全并行进行,都不会有读写冲突的问题。由于更大点数的分块原理与该实例一致,只是细节更加繁琐,故本文不再予以详述,只选取16点4路并行这一中间情况进行举例说明。表3是16点4路并行的并行情况表。
表3
为了更好地说明本发明的技术效果,对本发明IP核进行不同点数FFT运算进行仿真,并和赛灵思官方IP核的运算结果进行对比。
表4是本实施例中采用本发明IP核对16位ADC采集数据进行不同点数FFT运算的仿真结果。
表4
如表1所示,本发明IP核可以处理大点数、大并行数的FFT运算,理论上无最大点数限制,可达到N/2路的全并行。但是由于实际FPGA资源的限制,需根据实际情况选择。
表5是本实施例中采用本发明IP核与赛灵思官方IP核进行65536点FFT运算所消耗的时间与资源对比表。
表5
如表2所示,本发明IP核通过采用并行运算,可以大大提高FFT的运算效率。
需要特别说明的是,本发明是一种基于FPGA的大容量可重构FFT运算IP核,其普遍适用于2的整数次幂的任意点数的FFT运算;其改进了已有IP的计算点数上限,并通过并行与流水相结合的方式实现了提高计算速率的目标;其支持串行、流水以及可配置并行数等计算方式,实现了速度与资源的均衡;其可以使用HLS工具进行开发,实现不同点数、不同数据类型以及不同运算精度的快速灵活配置;本发明的最大优势在于解决了已有IP无法自由均衡时间消耗与资源消耗这一局限,其依靠本身电路的设计特点,结合HLS的优势,使该IP具有极高的适用性、灵活性和可配置性,以普遍适用不同的资源限制与性能需求。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (3)
1.一种基于FPGA的大容量可重构FFT运算IP核,其特征在于,包括倒位序存储单元、旋转因子存储单元、数据存储RAMA、数据存储RAMB、数据缓存模块、FFT运算模块和数据输出处理模块,以上模块均在FPGA中设置,其中:
倒位序存储单元用于存储预先根据全基二蝶形结算法和FFT运算点数N确定好的倒位序数据,第n个倒位序数据即为FFT运算中第n个数据在数据存储RAMA的存储地址,n=0,1,…,N-1;
旋转因子存储单元用于顺序存储预先根据全基二蝶形结算法和FFT运算点数N确定好的N/2旋转因子数据其中t表示旋转角度份数,t=0,1,…,N/2-1;记预先设置的并行路数为P,P为2的整数次幂且P≤N/2;当旋转因子存储单元采用单口ROM时,将旋转因子存储单元等分为P个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P,n=0,1,…,N/2P-1;当旋转因子存储单元采用双口ROM时,将旋转因子存储单元等分为P/2个分块,记各个分块的序号为m,分块中各个旋转因子的序号为n,其中m=1,2,…,P/2,n=0,1,…,N/P-1;
数据存储RAMA、数据存储RAMB用于形成乒乓结构以存储运算数据,即一个用于读取,另一个用于写入,蝶形结运算的每级流图对两个RAM进行交替读写;数据存储RAMA和数据存储RAMB采用相同的存储结构,分别等分为P个分块,记各个分块的序号为i,分块中各个数据的序号为j,其中i=1,2,…,P,j=0,1,…,N/P-1;
数据缓存模块用于将上级FIFO传入的数据进行预处理,数据缓存模块包括浮点转换模块和倒位序存储模块,其中浮点转换模块用于将上级FIFO中所存储的输入数据转换为浮点数据,然后发送给倒位序存储模块;倒位序存储模块从倒位序存储单元中读取倒位序数据,按照倒位序数据将浮点转换模块转换得到的各个浮点数据的实部和虚部存储至数据存储RAMA相应存储地址对应的实部存储单元和虚部存储单元;
FFT运算模块用于实现上级FIFO传入数据的FFT运算,FFT运算模块包括级数计数器、读取选择模块、蝶形结计算模块和写入选择模块,其中:
级数计数器用于对蝶形结运算的级数进行计数;
读取选择模块用于根据蝶形结运算级数从数据存储RAMA或数据存储RAMB中分批读取所需进行蝶形结计算的数据对,从旋转因子存储单元中读取数据对进行蝶形结运算时所需的旋转因子,将数据对和旋转因子按批次发送至蝶形结计算模块;
蝶形结计算模块用于对每个批次接收的数据对和旋转因子并行进行蝶形结运算,将计算结果发送至写入选择模块;
写入选择模块用于根据蝶形结运算级数将本次蝶形结运算的结果写入数据存储RAMB或数据存储RAMA中;
FFT运算模块的工作流程如下:
S1:级数计数器设置级数值k=1;
S2:读取选择模块判断当前级数值k是否为奇数,如果是,则从数据存储RAMA中读取数据,否则从数据存储RAMB中读取数据;读取数据的方法为:从当前进行数据读取的数据存储RAM中分N/2P个批次进行数据读取并发送给蝶形结计算模块,第d个批次数据包括P个数据对,每个数据对包括一个偶数点数据和一个奇数点数据,即每个分块中第2d个数据和第2d+1个数据,d=0,1,…,N/2P-1;并计算未分块前数据对的原始地址发送给写入选择模块,记数据对所在分块的序号为i,记偶数点数据所在的地址序号为j,奇数点数据的地址序号为j+1,偶数点数据的原始地址addi,j和奇数点数据的原始地址addi,j+1的计算公式分别如下:
读取选择模块在读取每个数据对的同时,计算得到该数据对所对应旋转因子在旋转因子存储单元中的地址,然后读取对应的旋转因子并送入蝶形结计算模块;旋转因子地址的计算方法如下:
其中,%表示求取余数;
S3:蝶形结计算模块在每接收到一个批次的P个数据对和对应的P个旋转因子后,进行P路并行蝶形结运算,N/2P个批次的P路并行蝶形结运算采用流水线结构进行,将得到N/2组加法计算结果和减法运算结果发送至写入选择模块;
S4:写入选择模块判断当前级数值k是否为奇数,如果是,则将计算结果写入数据存储RAMB,否则将计算结果写入数据存储RAMA;对于接收到的每组加法计算结果和减法运算结果,写入数据的方法为:
S5:写入选择模块判断是否当前级数k<K,K=log2N,如果是,进入步骤S6,否则进入步骤S7;
S6:写入选择模块向级数计数器发送本次运算完成消息,级数计数器令k=k+1,返回步骤S2;
S7:写入选择模块向数据输出处理模块发送蝶形结运算完成消息;
数据输出处理模块用于在接收到蝶形结运算完成消息后将FFT运算结果进行顺序输出;数据输出处理模块包括读取选择模块、数据处理模块和数据输出模块,其中:
读取选择模块判断蝶形结运算总级数K是否为奇数,如果是,则从数据存储RAMB中读取全部计算结果数据的实部和虚部,否则从数据存储RAMA中读取全部计算结果数据的实部和虚部,然后发送给数据处理模块;
据处理模块将所接收的全部计算结果数据的虚部数据取反,连同实部数据发送给数据输出模块;
数据输出模块将将接收到的实部数据和取反后虚部数据,以高位实部,低位虚部打包构成复数计算结果顺序输出。
2.根据权利要求1所述的FFT运算IP核,其特征在于,所述旋转因子存储单元包括旋转因子实部存储单元和旋转因子虚部存储单元,旋转因子实部存储单元和旋转因子虚部存储单元均进行分块,将每个旋转因子分为实部和虚部进行存储;
所述数据存储RAMA和数据存储RAMB均包括数据实部存储单元和数据虚部存储单元,数据实部存储单元和数据虚部存储单元均进行分块,将每个数据分为实部和虚部进行存储。
3.根据权利要求1所述的FFT运算IP核,其特征在于,所述FFT运算IP核采用高层次综合HLS工具进行开发,使用HLS工具中的pragma HLS bind_storage设置指令对数据存储RAM的资源类型进行设置,当单块RAM存储点数小于1k时,选择使用DRAM,当点数大于等于1k时,使用BRAM;将FFT运算点数、计算精度要求、输入输出数据类型以及位宽需求,均以头文件中常量参数以及数据类型的形式进行设置;使用HLS工具中的pragma HLS pipeline指令设置流水结构,以pragma HLS unroll指令设置并行路数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110458193.5A CN113157637B (zh) | 2021-04-27 | 2021-04-27 | 一种基于fpga的大容量可重构的fft运算ip核 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110458193.5A CN113157637B (zh) | 2021-04-27 | 2021-04-27 | 一种基于fpga的大容量可重构的fft运算ip核 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113157637A true CN113157637A (zh) | 2021-07-23 |
CN113157637B CN113157637B (zh) | 2023-03-07 |
Family
ID=76871183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110458193.5A Active CN113157637B (zh) | 2021-04-27 | 2021-04-27 | 一种基于fpga的大容量可重构的fft运算ip核 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157637B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113608023A (zh) * | 2021-08-18 | 2021-11-05 | 国网湖南省电力有限公司 | 采样频率自适应的谐波检测方法及系统 |
CN113778940A (zh) * | 2021-09-06 | 2021-12-10 | 电子科技大学 | 基于fpga的高精度可重构相位调整ip核 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231632A (zh) * | 2007-11-20 | 2008-07-30 | 西安电子科技大学 | 应用fpga进行浮点fft处理的方法 |
WO2010012207A1 (zh) * | 2008-07-28 | 2010-02-04 | 中兴通讯股份有限公司 | 快速傅立叶变换/快速傅立叶反变换处理器及其处理方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN105068955A (zh) * | 2015-07-20 | 2015-11-18 | 北京广利核系统工程有限公司 | 一种局部总线结构及数据交互方法 |
WO2017000756A1 (zh) * | 2015-06-29 | 2017-01-05 | 深圳市中兴微电子技术有限公司 | 基于3072点快速傅里叶变换的数据处理方法及处理器、存储介质 |
CN107291657A (zh) * | 2016-04-05 | 2017-10-24 | 中国科学院微电子研究所 | 一种信号处理的方法及系统 |
CN107505053A (zh) * | 2017-08-23 | 2017-12-22 | 浙江工业大学 | 一种基于fpga和fft技术的正弦信号相位差测量方法 |
CN109828744A (zh) * | 2019-01-18 | 2019-05-31 | 东北师范大学 | 一种基于fpga的可配置浮点向量乘法ip核 |
CN109901472A (zh) * | 2019-03-20 | 2019-06-18 | 电子科技大学 | 一种基于fpga的顺序等效采样系统 |
CN110244304A (zh) * | 2019-04-15 | 2019-09-17 | 浙江工业大学 | 一种基于zynq的侧扫声纳信号处理方法 |
CN112307421A (zh) * | 2020-10-21 | 2021-02-02 | 电子科技大学 | 一种基4频率抽取快速傅里叶变换处理器 |
-
2021
- 2021-04-27 CN CN202110458193.5A patent/CN113157637B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231632A (zh) * | 2007-11-20 | 2008-07-30 | 西安电子科技大学 | 应用fpga进行浮点fft处理的方法 |
WO2010012207A1 (zh) * | 2008-07-28 | 2010-02-04 | 中兴通讯股份有限公司 | 快速傅立叶变换/快速傅立叶反变换处理器及其处理方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
WO2017000756A1 (zh) * | 2015-06-29 | 2017-01-05 | 深圳市中兴微电子技术有限公司 | 基于3072点快速傅里叶变换的数据处理方法及处理器、存储介质 |
CN105068955A (zh) * | 2015-07-20 | 2015-11-18 | 北京广利核系统工程有限公司 | 一种局部总线结构及数据交互方法 |
CN107291657A (zh) * | 2016-04-05 | 2017-10-24 | 中国科学院微电子研究所 | 一种信号处理的方法及系统 |
CN107505053A (zh) * | 2017-08-23 | 2017-12-22 | 浙江工业大学 | 一种基于fpga和fft技术的正弦信号相位差测量方法 |
CN109828744A (zh) * | 2019-01-18 | 2019-05-31 | 东北师范大学 | 一种基于fpga的可配置浮点向量乘法ip核 |
CN109901472A (zh) * | 2019-03-20 | 2019-06-18 | 电子科技大学 | 一种基于fpga的顺序等效采样系统 |
CN110244304A (zh) * | 2019-04-15 | 2019-09-17 | 浙江工业大学 | 一种基于zynq的侧扫声纳信号处理方法 |
CN112307421A (zh) * | 2020-10-21 | 2021-02-02 | 电子科技大学 | 一种基4频率抽取快速傅里叶变换处理器 |
Non-Patent Citations (2)
Title |
---|
SHENG ZHOU等: "Design and implementation of a 1024-point high-speed FFT processor based on the FPGA" * |
ZHU MIAOFEN等: "Image focusing system based on FPGA" * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113608023A (zh) * | 2021-08-18 | 2021-11-05 | 国网湖南省电力有限公司 | 采样频率自适应的谐波检测方法及系统 |
CN113778940A (zh) * | 2021-09-06 | 2021-12-10 | 电子科技大学 | 基于fpga的高精度可重构相位调整ip核 |
CN113778940B (zh) * | 2021-09-06 | 2023-03-07 | 电子科技大学 | 基于fpga的高精度可重构相位调整ip核 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117389946B (zh) * | 2023-11-09 | 2024-05-28 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Also Published As
Publication number | Publication date |
---|---|
CN113157637B (zh) | 2023-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113157637B (zh) | 一种基于fpga的大容量可重构的fft运算ip核 | |
CN101290613B (zh) | Fft处理器的数据存储系统和方法 | |
CN109146067B (zh) | 一种基于FPGA的Policy卷积神经网络加速器 | |
CN101231632A (zh) | 应用fpga进行浮点fft处理的方法 | |
CN102541774B (zh) | 多粒度并行存储系统与存储器 | |
CN102541749B (zh) | 多粒度并行存储系统 | |
CN101782893A (zh) | 可重构数据处理平台 | |
CN104778025B (zh) | 基于随机访问存储器的先入先出存储器的电路结构 | |
CN103793590A (zh) | 一种基于gpu的快速求解配电网潮流的计算方法 | |
CN101763338A (zh) | 一种点数可变的混合基fft/ifft实现装置及其方法 | |
CN109104190B (zh) | 一种基于多次采样的时间数字转换电路 | |
CN104077492A (zh) | 一种基于fpga的采样数据内插方法 | |
CN102209962A (zh) | 计算离散傅里叶变换(dft)系数矩阵的方法和设备 | |
CN106502580A (zh) | 一种深存储器以及测量仪器 | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
CN102129419B (zh) | 基于快速傅立叶变换的处理器 | |
CN103034621B (zh) | 基2×k并行fft架构的地址映射方法及系统 | |
US9268744B2 (en) | Parallel bit reversal devices and methods | |
CN113222129A (zh) | 一种基于多级缓存循环利用的卷积运算处理单元及系统 | |
CN102411557B (zh) | 多粒度并行fft计算装置 | |
CN102541813B (zh) | 一种多粒度并行fft蝶形计算的方法及相应的装置 | |
CN108008665B (zh) | 基于单片fpga的大规模圆阵实时波束形成器及波束形成计算方法 | |
CN101398784A (zh) | 一种二维寻址方法及装置 | |
CN115640493A (zh) | 基于fpga的分段线性分数阶运算ip核 | |
RU2717950C1 (ru) | Высокоскоростное устройство быстрого преобразования фурье с бесконфликтным линейным доступом к памяти |
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 |