CN102043761A - 一种基于可重构技术的傅立叶变换的实现方法 - Google Patents
一种基于可重构技术的傅立叶变换的实现方法 Download PDFInfo
- Publication number
- CN102043761A CN102043761A CN 201110000634 CN201110000634A CN102043761A CN 102043761 A CN102043761 A CN 102043761A CN 201110000634 CN201110000634 CN 201110000634 CN 201110000634 A CN201110000634 A CN 201110000634A CN 102043761 A CN102043761 A CN 102043761A
- Authority
- CN
- China
- Prior art keywords
- data
- fourier transform
- reconfigurable arrays
- input
- computing
- 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
Landscapes
- Complex Calculations (AREA)
Abstract
本发明涉及一种基于可重构技术的傅立叶变换的实现方法,该方法针对常用的基于点的离散傅立叶变换按时间抽取算法,基于点的快速傅立叶变换运算可分解为M阶运算过程,每一阶运算由N/2个蝶形运算构成,每个蝶形运算都使用到一个旋转因子;其中M为任一正整数;N为需要进行傅立叶变换的序列的长度,即为对应的值;该方法应用于包括总线、嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器的嵌入式***,其中,嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器分别与总线通信。该方法提高了运算效率。
Description
技术领域
本发明属于嵌入式信息技术领域,一种基于可重构技术的快速傅立叶变换(Fast FourierTransform,FFT)算法的实现方法,可应用于面向移动通信终端的高性能嵌入式可重构阵列片上***(system on chip,SoC)芯片设计中通信基带算法的优化。
背景技术
在大众已经习惯的计算模式中,处理器和专用集成电路(ASIC)一直是两大主流。伴随着应用领域特别是嵌入式环境对***的性能、能耗、上市时间等指标需求的不断提高,传统的计算模式暴露出了种种弊端。
处理器方式能够灵活地实现各种应用,但却在性能上有缺陷;而硬件逻辑实现性能虽然高,但灵活性却很差。为了在计算性能和实现灵活性上做一个很好的权衡,可重构计算(Reconfigurable Computing)技术浮出了水面。可重构计算技术集中了处理器和专用集成电路的优势,能够提供高效灵活的计算能力,同时也是探索一条解决纳米级芯片高昂设计和投片成本的新路。当芯片特征尺寸降至45nm之后,芯片一次性工程(Non-RecurringEngineering,NRE)费用暴涨,可重构技术是降低芯片摊销成本,实现一款芯片多个应用的新路。在嵌入式领域中的一些主流的计算密集型应用都非常适合利用可重构计算技术去实现。面向交互式图形、图像和视频实时处理等高密度媒体信号计算,可重构阵列片上***(systemon chip,SoC)芯片可以实现面向移动通信终端和高性能媒体处理等多种应用,为我国参与新一代媒体处理和高性能移动计算国际竞争提供战略技术储备。
离散傅立叶变换(Discrete Fourier Transform,DFT)的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由DFT变换到时域。快速傅里叶变换(FastFourier Transform,FFT)是一种快速有效地计算离散傅里叶变换DFT的方法。按时间抽取的基于2M点的一维FFT算法,是根据离散傅立叶变换的奇、偶、虚、实等特性,在输入序列分成越来越小的子序列上执行DFT运算。基于一个N点序列x(n)的DFT可以从两个N/2点序列的DFT求出,依次类推,可以继续分下去,最后剩下的是两点DFT。FFT算法的出现大大推动了离散傅里叶变换在各方面的应用。在数字信号处理***中,FFT作为一个非常重要的工具经常使用,实现快速有效灵活的FFT运算对数字信号处理***的优化和推广有着至关重要的作用。
发明内容
技术问题:本发明的目的在于突破传统的模式,针对快速傅立叶变换(FFT)算法通用性强、数据量大、运算规整等特点,考虑到可重构***指令并发执行、中间结果可循环利用、运算模块独立可配置及资源结构分布式可调度等优点,采用可重构技术来实现按时间抽取的基于2M点的一维FFT算法,以达到性能和灵活性两者的平衡,不仅有利于算法的进一步开发和升级,同时也为实现一款芯片多种应用做好铺垫。
技术方案:为解决上述技术问题,本发明提供的技术方案针对常用的基于2M点的离散傅立叶变换按时间抽取算法,2M点的离散傅立叶变换可分解为M阶运算过程,每一阶运算由N/2个蝶形运算构成;其中M为任一正整数;N为需要进行傅立叶变换的序列的长度,即为2M对应的值;该方法应用于包括总线、嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器的嵌入式***,其中,嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器分别与总线通信,该方法包括如下步骤:
将傅立叶变换映射到可重构阵列上,即将傅立叶变换转化成数据流图,然后根据数据流图,配置可重构阵列,由可重构阵列来完成加速,由此实现傅立叶变换,即:
1)分析傅立叶变换,将其组成算法蝶形运算转换成数据流图的形式;
2)根据数据流图确定的运算流程,结合傅立叶变换数据非连续输入的特点,制定傅立叶变换的数据输入方式;
3)确定了数据流图和数据输入方式后,通过配置可重构阵列将傅立叶变换映射到可重构阵列上;
4)然后将配置信息、所需要使用到的运算数据存入相应的存储器中;
5)最后由嵌入式微处理器进行设置,启动可重构阵列进行运算,运算结束后,可重构阵列发出中断信号,嵌入式微处理器对可重构阵列内相关寄存器进行清零。
所述可重构阵列是一个包含8×8个的运算单元的阵列,其包含两个主设备端口和三个从设备端口分别挂接在总线上,实现配置信息的写入和数据的输入输出;每个运算单元以算术逻辑单元为基本单元,并且能完成乘法运算、移位加减法运算、逻辑运算、绝对值运算复杂的运算;可重构阵列内部还针对非连续输入输出的数据存储方式设计了一个专用的直接存储器访问控制器,实现寻址功能;可重构阵列的配置信息包括每个运算单元的运算控制、数据输入、数据输出和结构的互连;可重构阵列自动完成多次循环操作。
将傅立叶变换转化成数据流图的过程中,蝶形运算的输入数据为a、b与一个旋转因子W,输出数据为a+bW、a-bW,其中a、b、W均为复数形式的数据,转化后的数据流图需要使用12个运算单元,可重构阵列进行循环运算实现由M*N/2个蝶形运算构成的基于2M点的快速傅立叶变换算法,其中M代表任一正整数,N为需要进行傅立叶变换的序列的长度,即2M对应的值。
所述傅立叶变换的数据输入方式分为以下两种形式:
1)定制倒位序运算输入方式;内部直接存储器访问控制器中定义了一个数据输入计数器,记录数据输入的个数,每次发出读数据请求时,将数据输入计数器的最低位与最高位依次颠倒,得到倒位序的序列,
2)定制M阶运算的数据输入方式;每次运算所需要的数据需要有规则地跳转,且不同阶的蝶形运算的数据输入的跳转规则不同;当前的阶数为M的蝶形运算,用于蝶形运算的数据间隔是2M-1;运算完成后输出数据的位置与输入数据的位置相同,跳转机制与输入数据的跳转机制完全相同,M代表任一正整数。
可重构阵列的配置信息是通过对其内部的寄存器进行赋值来实现的,其内部寄存器包括每个运算单元的配置寄存器、控制寄存器以及相应于内部存储单元的寄存器;其中配置寄存器对应的是每个运算单元的运算控制、数据输入、数据输出和结构的互连;控制寄存器对应的是可重构阵列循环次数、运行周期、配置信息切换、中断产生控制信息;相应于内部存储单元的寄存器对应的是可重构阵列阵列内部的直接存储器访问控制器配置。
2M点的离散傅立叶变换中所需的旋转因子是固定的,将旋转因子事先生成存储起来,以查表的方法获取所需旋转因子的值,旋转因子为复数形式,其表达式为其中,W代表旋转因子,N代表需进行傅立叶变换的序列的长度,m代表小于N的整数,j代表虚数单位。
有益效果:(1)本发明的基于可重构技术的快速傅立叶变换(FFT)算法实现方法,充分利用可重构***具有很多可用的独立可配置的运算模块,每个运算模块可以独立地完成不同的计算任务,使得其可在一个时间步内执行大量的计算操作,适合大量并行性计算任务的优势,通过把FFT算法映射到可重构阵列上的方式,由可重构阵列(RCA)对FFT算法进行加速,比传统的软件实现方法运算效率更高;
(2)本发明的基于可重构技术的实现的快速傅立叶变换(FFT)方法,面向2N(N为大于等于3的整数)点的FFT运算,对配置信息进行较小的改动就可以实现不同点的运算,比传统的硬件实现方法灵活性更高。
本发明的基于可重构技术的FFT算法的实现方法,在电子***级(ESL)平台进行仿真验证,统计运算运行的仿真周期数。为了进行比较,将其软件算法在ARM9(是一款微处理器的名称)上运行,统计算法运行一次所需的周期数,两种情况下的仿真都在相同的硬件主频下完成。结果显示由可重构***来实现FFT算法需要188,775个周期,而软件运行FFT算法需要35,442,420个周期,加速比为188。事实证明可重构阵列上的FFT算法运行时间大大优于软件FFT算法,可重构阵列充分发挥了其完成大量数据的并行运算和多次循环运算的特点。另外,通过对配置信息进行较小的改动,经验证,可以实现不同点数的FFT运算,其灵活性非常高,且操作方便。
附图说明
图1为本发明的基于可重构技术的快速傅立叶变换(FFT)算法实现方法所采用的可重构***结构框图;
图2为本发明的基于可重构技术实现的FFT算法中的一次蝶形运算转化成的数据流图;
图3为本发明的一种基于可重构技术的FFT算法实现方法涉及到的可重构阵列内部结构图。
其中,ARM嵌入式微处理器1、存储器2、直接存储器访问控制器3、可重构阵列4、输入先入先出队列(FIFO)5、配置信息端口6、输出先入先出队列(FIFO)7、输入选择8、循环控制器9、输出选择10、运算阵列11、临时数据阵列12。
具体实施方式
下面结合附图对本发明做进一步说明。
说明1:下面用到的英文所写所代表的含义:离散傅立叶变换(DFT),可重构阵列(Reconfigurable Array,RCA),ARM(一款微处理器的名称),AHB(一款***总线名称),直接存储器访问控制器(DMAC),运算单元(PE),主设备(master),从设备(slave),算术逻辑单元(Arithmetic Logic Unit,ALU),快速傅立叶变换(Fast Fourier Transform,FFT),嵌入式可重构阵列片上***(system on chip,SoC),离散傅立叶变换(Discrete FourierTransform,DFT)。
表1为本发明的一种基于可重构技术的FFT算法实现方法涉及到的可重构阵列内部寄存器说明;
表2为本发明的一种基于可重构技术的2048点的FFT算法实现方法中配置可重构阵列的配置信息。
表1
表2
本发明所设计的基于可重构技术的FFT算法实现方法所针对的可重构***以ARM(一款处理器名称)为主处理器,颗粒度为16bits的可重构阵列作为协处理器,另外还包括直接存储器访问控制器(DMAC)模块、外部存储器(memory)等。
其中,可重构阵列(RCA)模块是一个8×8的运算单元阵列,完成算法的加速,每个运算(PE)以算术逻辑单元(ALU)为基本单元,能够在一个周期内完成乘法运算、移位加减法运算、逻辑运算、绝对值运算等复杂的单个运算,其包含两个主设备端口(master)端口和三个从设备(slave)端口分别挂接在总线上,实现配置信息的写入和数据的输入输出;DMAC主要用于向RCA传输配置信息。
本可重构阵列可以自动完成多次循环操作,具有创新的数据传输方式和灵活快速的配置方式;其特征在于:实现方式不同于传统的软件和硬件实现方式,本发明采用的方法重点在于根据算法本身的特点提取出对可重构阵列的配置信息,包括配置可重构阵列的配置寄存器、控制寄存器以及内部存储单元相应的寄存器等,利用可重构技术的灵活性可以实现每次不同点数的FFT运算;方法是:基于传统的FFT算法,我们需要将算法转化成数据流图,并定制FFT的数据输入方式,然后根据数据流图和数据输入方式,对应于特定的可重构***生成相应的配置信息,通过配置可重构阵列将算法映射到该阵列上,由此实现FFT算法;其中,该实现方式中所需要运算的数据以及配置信息需要事先存放于外部存储器指定地址处。
包含以下具体步骤:
(1)分析传统FFT算法的特点,归纳出数据流图;
(2)根据数据流图确定的运算流程,再结合算法特点,定制FFT的数据输入方式;
(3)确定了数据流图和数据输入方式后,针对可重构***中的可重构阵列的特点,在了解其工作机制和内部各个寄存器的作用的基础上,配置可重构阵列并生成配置信息;
(4)然后我们需要将配置信息、运算数据、本地生成的旋转因子存入相应的存储器中;
(5)最后进行ARM的软件设置,启动RCA进行一次运算,一次运算结束后,RCA发出中断信号,ARM对寄存器进行清零。
下面就每一个步骤进行具体说明:
1)分析FFT算法的特点,将其转化为数据流图
本发明所针对的FFT算法是按时间抽取的基于2M点的离散傅立叶变换(DFT)算法,对于任何一个2的整数幂N=2M,总是可以通过M次的分解最后完全成为2点的DFT运算。这样的M次分解,就构成x(n)到X(k)的M阶运算过程。每一阶运算都由N/2个蝶形运算构成,一次蝶形运算表示如下运算:两个输入数据a=S0+jS1、b=S2+jS3与一个旋转因子W=R0+jR1,a、b、W均为复数形式,输出为a+bW、a-bW,
a+bW=(S0+jS1)+(S2+jS3)*(R0+jR1)=[S0+(S2*R0-S3*R1)]+j[S1+(S3*R0+S2*R1)]_
13-
a-bW=(S0+jS1)-(S2+jS3)*(R0+jR1)=[S0-(S2*R0-S3*R1)]+j[S1-(S3*R0+S2*R1)]本发明中的FFT运算基于整型数据,所以将旋转因子:
其中,M代表任一正整数,N代表2M的值,x(n)代表需要进行傅里叶变换的序列,n代表序列标号,为非负整数,X(k)代表运算完的序列,k代表序列标号,为非负整数,a代表蝶形运算的输入数据之一、b代表蝶形运算的输入数据之一、W代表蝶形运算的旋转因子,S0代表输入数据a的实部部分,S1代表输入数据a的虚部部分,S2代表输入数据b的实部部分,S3代表输入数据b的虚部部分,R0代表旋转因子W的实部部分,R1代表旋转因子W的虚部部分,j代表虚数单位.
先放大32倍与输入信号相乘,然后再将结果右移5位得到正确的结果。基于此,我们将一次蝶形运算转化为可映射到可重构阵列上的数据流图,一次蝶形运算涉及到12次运算,对于一个8×8的RCA阵列可以完成四次蝶形运算。RCA每运算一次,需要16个输入信号和若干个旋转因子,旋转因子的多少由蝶形运算的阶数决定。
根据数据流图和FFT算法特点,定制FFT运算的数据输入模式
a)FFT运算的第一步是倒位序运算。倒位序是指,例如,4点的FFT运算必须按x(0)、x(2)、x(1)、x(3)的顺序输入,8点的FFT运算必须按x(0)、x(4)、x(2)、x(6)、x(1)、x(5)、x(3)、x(7)的顺序输入,以次类推。输入序列的排序看起来很乱,其实很有规律,倒位序的二进制表示恰好为顺序表示的二进制表示所有位进行倒置,即将顺序数的二进制数表示nM-1nM-2...n1n0变化为倒序的二进制表示n0n1...nM-2nM-1。基于这种数据输入的规律性,本文在RCA的内部DMA中定制一种倒位序的数据输入方式,可以有效地解决数据输入的无序性问题。即在内部DMA中定义了一个数据输入计数器,记录数据输入的个数,每次发出读数据请求时,将数据输入计数器的最低位与最高位依次颠倒,得到倒位序的序列。其中,x代表需要进行傅里叶变换的序列,n代表序列标号。x(0)代表序列中标号为0的的数,x(1)代表序列中标号为1的的数,x(2)代表序列中标号为2的的数,x(3)代表序列中标号为3的的数,x(4)代表序列中标号为4的的数,x(5)代表序列中标号为5的的数,x(6)代表序列中标号为6的的数,x(7)代表序列中标号为7的的数。
b)倒位序输入后,下一步就是进行M阶运算,每一阶运算由N/2个蝶形运算构成,FFT运算的每一阶运算的数据流图都是相同的,所不同的是每次运算时所使用数据的次序和旋转因子。如果当前蝶形运算的阶数是M,那么用于蝶形运算的数据间隔是2M-1。如果选择连续的数据作为输入,那么蝶形运算不能完整地运行完,运算的另一半只有等到下次数据重新输入才能得到执行,这就增加了运算量和数据输入量。本发明选择连续4次的蝶形运算映射为一次RCA的运算,每次运算所需要的数据都需要有规则地跳转,且不同阶的蝶形运算的数据输入的跳转规则不同。运算完成后输出数据的位置与输入数据的位置相同,因此也需要进行有规则的跳转,跳转机制与输入数据的跳转机制完全相同。
以第四阶蝶形运算为例,运行一次可重构阵列(RCA)涉及到4次连续的蝶形运算,这4次蝶形运算的输入数据分别为x(0)~x(3)和x(8)~x(11)8个复数数据,这8个数据之间是不连续的,需要跳过J1=23-4=4个数据去取另外4个数据,同时会记住前4个数据的起始位置,等下一次4次连续蝶形运算取数据时以这个起始位置为基准跳转4个数据开始读取。当连续取的数据超过J2=24时,下一次取数据要完成一次大的跳转,跳转幅度为J2。其它阶的蝶形运算跳转机制与此基本相同,只是不同阶数的蝶形运算J1、J2的值不同。以第M(M≥3)阶蝶形运算为例,J1=2M-1-4,J2=2M。J1代表一种跳转类型的跳转幅度值,J2代表另一种跳转类型的跳转幅度值。
蝶形运算同时还需要输入旋转因子,第四阶蝶形运算总共有23个旋转因子,每次需要4个旋转因子,当所取旋转因子总数超过23个时,旋转因子读取指针会回到起始位置重新开始读取。其它阶数的蝶形运算取旋转因子的原理相同,第M(M≥3)阶蝶形运算的旋转因子总数为2M-1个。
3)针对可重构阵列的特点,配置可重构阵列以生成配置信息
在完成了上面两步工作后,我们需要开始配置可重构阵列(RCA)。配置可重构阵列即配置其内部的寄存器,RCA在使用过程中,首先由直接存储器访问控制器(DMAC)通过context_slave(接口名称)接口写入寄存器的信息。在配置技术上,可重构阵列提供两套配置信息,可以在两者之间实现快速的配置信息切换。可重构阵列内部寄存器包括cfg_0,cfg_1……cfg_73,control0,control1,control2,load_base,load_cfg,store_base,store_cfg,block_dma等80个寄存器,其中
a)cfg_0、cfg_1……cfg_73对应的是每个运算单元的运算控制、数据输入、数据输出和结构的互连;
b)control0、ontrol1、control2对应的是可重构阵列循环次数、运行周期、配置信息切换、中断产生等控制信息;
c)load_base,load_cfg,store_base,store_cfg,block_dma对应的是RCA阵列内部的DMA配置。
4)将配置信息、运算数据、本地生成的旋转因子存入相应的memory中
a)配置信息是指RCA阵列中的80个配置寄存器的值,使用可重构阵列时,需要由DMAC将存入存储器(memory)中的配置信息通过context_slave接口写给RCA内部的寄存器;
b)运算数据是指需要进行FFT运算的序列x(1)...x(n),该序列为复数类型,我们需要将数据的实部和虚部分开存储;
c)旋转因子其中求正弦和余弦函数值的计算量是很大的,在RCA上完成这样的运算非常复杂,而且固定点FFT运算旋转因子是固定的,因此本发明中将旋转因子事先生成存储起来,以查表的方法获取所需旋转因子的值。
5)进行ARM(一款处理器名称)的软件设置,可重构阵列开始运算
a)由DMAC通过配置信息写入接口(context_slave)写入可重构阵列内部80个配置寄存器信息;
b)当配置完成后,将RCA使能,RCA进入运算模式,数据通过主设备(master)或从设备(slave)端口写入输入先入先出队列(First In First Out,FIFO),同时输入FIFO中的数据会被分发到各运算单元,可重构阵列会按照配置完成一次运算,运算结果会输出到输出FIFO,然后通过输出接口读出;
c)可重构阵列的配置信息规定了一次运算的循环次数,当循环次数达到预定值时一次运算结束,发出中断信号,对寄存器进行清零。
图1为本发明的基于可重构技术的FFT算法实现方法所采用的可重构***结构框图。该***以ARM为主处理器,颗粒度为16bits的可重构阵列作为协处理器。主处理器与协处理器之间通过AHB总线互联,以进行数据的交互和主处理器对协处理器的配置。同时片上内嵌了两块ESRAM,用于中间数据的缓存。外部的直接存储器访问控制器(DMAC)可以完成存储器与可重构阵列之间配置信息的载入和数据的自动存取,提高了数据传输的效率。
本发明的开发平台采用的是ARM公司的ESL仿真验证平台——SoC Designer(一款软件名称),通过建立可重构阵列的时钟周期精确的性能仿真模型,搭建可重构***的性能仿真环境,在这一虚拟的硬件仿真平台上验证可重构***的功能和FFT算法配置信息的正确性与性能。
本发明的工作流程如下:
第一步,分析FFT算法的特点及运算流程,以8点的FFT运算流程为例,首先x(0)、x(4)、x(2)、x(6)、x(1)、x(5)、x(3)、x(7)的顺序输入,然后进行三阶运算,每阶运算由4次蝶形运算组成,一次蝶形运算如下面两式所示:
a+bW=(S0+jS1)+(S2+jS3)*(R0+jR1)=[S0+(S2*R0-S3*R1)]+j[S1+(S3*R0+S2*R1)]
a-bW=(S0+jS1)-(S2+jS3)*(R0+jR1)=[S0-(S2*R0-S3*R1)]+j[S1-(S3*R0+S2*R1)]某于此我们得出结论只需要将蝶形运算映射到可重构阵列上,改变输入数据让其进行循环运算就可以实现FFT算法。所以我们归纳出一次蝶形运算的数据流图,如图2所示,其中S0、S1、S2、S3为两个输入信号的实部和虚部,R0、R1为本地生成的旋转因子,在运算中我们将旋转因子先放大32倍与输入信号相乘,然后再将结果右移5位得到正确的结果;
第二步,根据数据流图,再结合算法特点,定制FFT的数据输入方式。本专利所实现的2048个点的FFT运算,分为11阶蝶形运算和1次倒位序运算,每一阶运算的数据输入都有所不同。在内部DMA中,我们根据倒位序运算定制一种数据输入方式,再根据11阶蝶形运算定制三种数据输入方式,分别对应第1阶、第2阶和第3~11阶的数据输入,数据输入方式的选择根据配置信息而变化;
第三步,确定了数据流图和数据输入方式后,针对8*8的RCA阵列一次可以执行4次蝶形运算的特点,配置可重构阵列从而将FFT运算映射到RCA阵列上。表1我们所使用的可重构阵列内部寄存器说明。为实现2048个点的FFT运算需要三套配置信息,这三套配置信息主要区别在于针对内部直接存储器访问控制器(DMAC)的一些寄存器的值不相同,具体设置如表2所示;
第四步,将配置信息、运算数据、本地生成的旋转因子存入相应的存储器中;
第五步,最后进行ARM(一款处理器名称)的软件设置,启动可重构阵列进行针对一套配置信息的运算,运算结束后,可重构阵列发出中断信号,ARM对寄存器进行清零。
下面介绍本发明的基于可重构技术的FFT算法实现方法涉及的一个关键模块:可重构阵列
本发明所使用的可重构阵列是一个8×8的运算单元阵列,其中每8个可重构单元组成一行,相邻两行之间通过数据调度模块(Router)相连,每一行的可重构单元可以通过Router模块获得上一行任意一个可重构单元的输出结果,第一行可重构单元的输入数据来自于最后一行可重构单元的输出数据。可重构单元以算术逻辑单元(ALU)为基本单元,并且能完成乘法运算、移位加减法运算、逻辑运算、绝对值运算等复杂的运算。每个可重构单元有两个输入寄存器和一个输出寄存器,能够在一个周期内完成单个运算,但要求每个运算的输入数据不超过两个。当某个任务的运算个数大于可重构单元个数的时候,此任务必须经过处理才能实现在可重构阵列上的执行。阵列内部包括一套临时数据阵列,该阵列配合可重构阵列完成数据在可重构单元之间的自由传输,并且提供一定容量的中间数据存储空间。数据的输入输出采用了两种方式,一种是主设备(Master)模式,可以自动对外部存储器进行存取,它内部还针对某些特殊的数据存储方式设计了一个专用的DMA模块,可以实现一些特殊的寻址功能,如按块读取;一种是从设备(Slave)模式,由主处理器发出指令对RCA阵列进行数据的读入和写出。本阵列内还拥有两个输入输出先入先出阵列(FIFO),分别用于输入数据和输出数据在RCA阵列内的缓存,提高可重构阵列数据传输速度。
在配置技术上,可重构阵列提供两套配置信息,可以在两者之间实现快速的配置信息切换,并且为了降低控制代价,可重构阵列能够自动的切换配置信息,而不需要处理器的干预。阵列中的所有配置信息均支持部分重复配置,进一步降低了配置的代价。在使用一套配置信息的同时可以改写另一套配置信息,当循环运算完成时可以进行配置信息切换,节省了配置信息载入的时间。配置信息以寄存器的方式存储,每一个可重构单元都有自己的配置信息,因此可以实现局部的可重配置,对每个可重构单元进行单独配置。配置信息的切换有手动切换和自动切换两种方式。当没有数据依赖关系的循环发生配置信息切换时,采用手动切换即写入配置控制信号对配置信息进行一次切换。当将较大的循环划分为小块在可重构阵列上执行时,配置信息则需要不断地切换,采用自动切换方式即循环控制器在循环结束之后自动地切换到另一份配置信息,并且可以自动地反复切换。
可重构阵列内部结构如图3所示,下面具体介绍其内部模块:
1)输入先入先出队列(FIFO)5和输出先入先出队列(FIFO)6:各有1个从设备(Slave)接口和主设备(Master)接口,既能够接受外部主设备(Master)传输的数据,也能够访问外部的数据,其中每个主设备(Master)接口对应着1个内部的直接存储器读取控制器(DMAC)模块,可以根据循环的需要进行一些特殊的寻址操作,能够满足可重构阵列的数据传输要求。输入输出先入先出队列(FIFO)用于数据输入可重构阵列之后和输出阵列之前的缓存,从而提高可重构阵列的性能。
2)配置信息模块7:有1个从设备(Slave)接口,外部直接存储器读取控制器(DMAC)将可重构阵列的配置信息写入该模块内。
3)输入选择模块8:负责将输入先入先出队列(FIFO)中的数据分发到可重构阵列的输入寄存器中。每个运算单元有2个输入寄存器和1个输出寄存器。一次从先入先出队列(FIFO)中取16个数据,假如一次循环只需要9个数据,将这9个数据根据编号发给所需的输入寄存器,哪些寄存器需要数据的编号由配置信息决定。
8)循环控制器模块9:记录从输入先入先出队列(FIFO)中取出数据的行数、输出到输出FIFO数据的行数、可重构阵列开始运行的时间、加载数据(load)的次数、执行(execute)次数和存储数据(store)的次数;判断锁定信号(lock)、循环结束信号(loop_end)、中断信号(interrupt)、下一次执行信号(rca_step)、阵列复位信号(rca_reset)、配置选择信号(config_sel)、数据加载(data_load)、数据存储(data_store)等信号的产生,上述信号均为模块内部定义的控制信号。
5)输出选择模块10:负责将64个运算单元的64个输出寄存器的输出结果有选择地排列在输出先入先出队列(FIFO)中
6)运算阵列11:本专利采用的运算阵列为8×8的阵列,包含64个运算单元和数据调度模块(ROUTER)。每个运算单元包含两个16bits输入寄存器,一个16bits输出寄存器,因此只支持16位的运算。每个运算单元的运算模块支持32种运算类型,每种运算又分为有符号运算和无符号运算,通过配置符号寄存器(sign)就可以改变运算方式。ROUTER模块负责数据的输入方式选择,运算单元的输入数据有三种选择,一种是从外部输入到先入先出队列(FIFO)中的数据,一种是上一行运算单元输出的数据,一种是存储在临时数据寄存器(TEMPDATA)中的数据
7)临时数据阵列12:临时数据单元用来存放计算过程中的中间数据,或者用来在任意两个可重构单元之间传输数据。本专利采用的临时数据阵列由8×8的阵列寄存器组成,它们与64个运算单元输出寄存器相对应,这些寄存器能够按照配置信息选择特定的数据源来更新自身的数据。每个寄存器可以选择所在行的运算单元输出寄存器一行的8个数据中的任何一个作为输入,也可以选择所在列的临时数据寄存器(TEMP DATA)一列的8个数据中的任何一个作为输入。
Claims (6)
1.一种基于可重构技术的傅立叶变换的实现方法,其特征在于:该方法针对常用的基于点的离散傅立叶变换按时间抽取算法,点的离散傅立叶变换可分解为M阶运算过程,每一阶运算由N/2个蝶形运算构成;其中M为任一正整数;N为需要进行傅立叶变换的序列的长度,即为对应的值;该方法应用于包括总线、嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器的嵌入式***,其中,嵌入式微处理器、存储器、可重构阵列和直接存储器访问控制器分别与总线通信,该方法包括如下步骤:将傅立叶变换映射到可重构阵列上,即将傅立叶变换转化成数据流图,然后根据数据流图,配置可重构阵列,由可重构阵列来完成加速,由此实现傅立叶变换,即:
1)分析傅立叶变换,将其组成算法蝶形运算转换成数据流图的形式;
2)根据数据流图确定的运算流程,结合傅立叶变换数据非连续输入的特点,制定傅立叶变换的数据输入方式;
3)确定了数据流图和数据输入方式后,通过配置可重构阵列将傅立叶变换映射到可重构阵列上;
4)然后将配置信息、所需要使用到的运算数据存入相应的存储器中;
5)最后由嵌入式微处理器进行设置,启动可重构阵列进行运算,运算结束后,可重构阵列发出中断信号,嵌入式微处理器对可重构阵列内相关寄存器进行清零。
2.根据权利要求1所述的基于可重构技术的傅立叶算法的实现方法,其特征在于:所述可重构阵列是一个包含8×8个的运算单元的阵列,其包含两个主设备端口和三个从设备端口分别挂接在总线上,实现配置信息的写入和数据的输入输出;每个运算单元以算术逻辑单元为基本单元,并且能完成乘法运算、移位加减法运算、逻辑运算、绝对值运算复杂的运算;可重构阵列内部还针对非连续输入输出的数据存储方式设计了一个专用的直接存储器访问控制器,实现寻址功能;可重构阵列的配置信息包括每个运算单元的运算控制、数据输入、数据输出和结构的互连;可重构阵列自动完成多次循环操作。
3.根据权利要求2所述的基于可重构技术的傅立叶算法的实现方法,其特征在于:将傅立叶变换转化成数据流图的过程中,蝶形运算的输入数据为a、b与一个旋转因子W,输出数据为、,其中a、b、W均为复数形式的数据,转化后的数据流图需要使用12个运算单元,可重构阵列进行循环运算实现由M*N/2个蝶形运算构成的基于点的快速傅立叶变换算法,其中M代表任一正整数,N为需要进行傅立叶变换的序列的长度,即对应的值。
4.根据权利要求1所述的基于可重构技术的傅立叶算法的实现方法,其特征在于:所述傅立叶变换的数据输入方式分为以下两种形式:
1)定制倒位序运算输入方式;内部直接存储器访问控制器中定义了一个数据输入计数器,记录数据输入的个数,每次发出读数据请求时,将数据输入计数器的最低位与最高位依次颠倒,得到倒位序的序列,
2)定制M阶运算的数据输入方式;每次运算所需要的数据需要有规则地跳转,且不同阶的蝶形运算的数据输入的跳转规则不同;当前的阶数为M的蝶形运算,用于蝶形运算的数据间隔是;运算完成后输出数据的位置与输入数据的位置相同,跳转机制与输入数据的跳转机制完全相同,M代表任一正整数。
5.根据权利要求2所述的基于可重构技术的傅立叶算法的实现方法,其特征在于:可重构阵列的配置信息是通过对其内部的寄存器进行赋值来实现的,其内部寄存器包括每个运算单元的配置寄存器、控制寄存器以及相应于内部存储单元的寄存器;其中配置寄存器对应的是每个运算单元的运算控制、数据输入、数据输出和结构的互连;控制寄存器对应的是可重构阵列循环次数、运行周期、配置信息切换、中断产生控制信息;相应于内部存储单元的寄存器对应的是可重构阵列阵列内部的直接存储器访问控制器配置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100006343A CN102043761B (zh) | 2011-01-04 | 2011-01-04 | 一种基于可重构技术的傅立叶变换的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100006343A CN102043761B (zh) | 2011-01-04 | 2011-01-04 | 一种基于可重构技术的傅立叶变换的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102043761A true CN102043761A (zh) | 2011-05-04 |
CN102043761B CN102043761B (zh) | 2012-06-13 |
Family
ID=43909906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011100006343A Expired - Fee Related CN102043761B (zh) | 2011-01-04 | 2011-01-04 | 一种基于可重构技术的傅立叶变换的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102043761B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411555A (zh) * | 2011-08-17 | 2012-04-11 | 清华大学 | 一种可伸缩式动态可重构阵列配置信息方法 |
CN103970720A (zh) * | 2014-05-30 | 2014-08-06 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN103984560A (zh) * | 2014-05-30 | 2014-08-13 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN104281559A (zh) * | 2013-07-09 | 2015-01-14 | 罗伯特·博世有限公司 | 用于执行基于数据的函数模型的模型计算的方法和装置 |
CN104679670A (zh) * | 2015-03-10 | 2015-06-03 | 东南大学 | 一种面向fft和fir的共享数据缓存结构及管理方法 |
CN105302525A (zh) * | 2015-10-16 | 2016-02-03 | 上海交通大学 | 用于多层次异构结构的可重构处理器的并行处理方法 |
CN108153709A (zh) * | 2017-12-12 | 2018-06-12 | 中国人民解放军战略支援部队信息工程大学 | 一种任意点数fft的可重构计算结构的调度方法 |
CN108491354A (zh) * | 2018-02-01 | 2018-09-04 | 四川大学 | 一种通用的离散信号分解和重建方法 |
CN109947416A (zh) * | 2019-03-15 | 2019-06-28 | 电子科技大学 | 一种软件化雷达跨平台通用并行计算库的构建方法 |
CN110008436A (zh) * | 2019-03-07 | 2019-07-12 | 中国科学院计算技术研究所 | 基于数据流架构的快速傅里叶变换方法、***和存储介质 |
CN112511480A (zh) * | 2020-11-10 | 2021-03-16 | 展讯半导体(成都)有限公司 | 二次fft和ifft变换方法及相关产品 |
CN112559954A (zh) * | 2020-12-18 | 2021-03-26 | 清华大学 | 基于软件定义可重构处理器的fft算法处理方法及装置 |
CN112800385A (zh) * | 2021-01-25 | 2021-05-14 | 鹏城实验室 | 数据处理方法、装置、终端设备以及存储介质 |
CN113254390A (zh) * | 2021-06-09 | 2021-08-13 | 千芯半导体科技(北京)有限公司 | 可重构计算结构、计算方法及硬件架构 |
CN113939815A (zh) * | 2019-05-31 | 2022-01-14 | 罗伯特·博世有限公司 | 用于处理传感器信号的方法和设备 |
CN115080503A (zh) * | 2022-07-28 | 2022-09-20 | 中国人民解放军63921部队 | 一种针对fft基模块映射的脉动阵列可重构处理器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1900927A (zh) * | 2006-07-14 | 2007-01-24 | 中国电子科技集团公司第三十八研究所 | 可重构数字信号处理器 |
US20070027679A1 (en) * | 2005-07-29 | 2007-02-01 | Texas Instruments Incorporated | System and method for optimizing the operation of an oversampled discrete fourier transform filter bank |
CN101521649A (zh) * | 2009-03-25 | 2009-09-02 | 吕正德 | 可配置变换长度dft的频域补偿方法及装置 |
CN101930426A (zh) * | 2009-06-24 | 2010-12-29 | 华为技术有限公司 | 信号处理方法、数据处理方法及装置 |
-
2011
- 2011-01-04 CN CN2011100006343A patent/CN102043761B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070027679A1 (en) * | 2005-07-29 | 2007-02-01 | Texas Instruments Incorporated | System and method for optimizing the operation of an oversampled discrete fourier transform filter bank |
CN1900927A (zh) * | 2006-07-14 | 2007-01-24 | 中国电子科技集团公司第三十八研究所 | 可重构数字信号处理器 |
CN101521649A (zh) * | 2009-03-25 | 2009-09-02 | 吕正德 | 可配置变换长度dft的频域补偿方法及装置 |
CN101930426A (zh) * | 2009-06-24 | 2010-12-29 | 华为技术有限公司 | 信号处理方法、数据处理方法及装置 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411555A (zh) * | 2011-08-17 | 2012-04-11 | 清华大学 | 一种可伸缩式动态可重构阵列配置信息方法 |
CN102411555B (zh) * | 2011-08-17 | 2014-01-01 | 清华大学 | 一种可伸缩式动态可重构阵列配置信息方法 |
CN104281559A (zh) * | 2013-07-09 | 2015-01-14 | 罗伯特·博世有限公司 | 用于执行基于数据的函数模型的模型计算的方法和装置 |
CN103970720A (zh) * | 2014-05-30 | 2014-08-06 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN103984560A (zh) * | 2014-05-30 | 2014-08-13 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN103984560B (zh) * | 2014-05-30 | 2017-09-19 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN103970720B (zh) * | 2014-05-30 | 2018-02-02 | 东南大学 | 基于大规模粗粒度嵌入式可重构***及其处理方法 |
CN104679670A (zh) * | 2015-03-10 | 2015-06-03 | 东南大学 | 一种面向fft和fir的共享数据缓存结构及管理方法 |
CN104679670B (zh) * | 2015-03-10 | 2018-01-30 | 东南大学 | 一种面向fft和fir的共享数据缓存结构及管理方法 |
CN105302525A (zh) * | 2015-10-16 | 2016-02-03 | 上海交通大学 | 用于多层次异构结构的可重构处理器的并行处理方法 |
CN105302525B (zh) * | 2015-10-16 | 2018-01-05 | 上海交通大学 | 用于多层次异构结构的可重构处理器的并行处理方法 |
CN108153709A (zh) * | 2017-12-12 | 2018-06-12 | 中国人民解放军战略支援部队信息工程大学 | 一种任意点数fft的可重构计算结构的调度方法 |
CN108491354A (zh) * | 2018-02-01 | 2018-09-04 | 四川大学 | 一种通用的离散信号分解和重建方法 |
CN108491354B (zh) * | 2018-02-01 | 2021-04-13 | 四川大学 | 一种通用的离散信号分解和重建方法 |
CN110008436A (zh) * | 2019-03-07 | 2019-07-12 | 中国科学院计算技术研究所 | 基于数据流架构的快速傅里叶变换方法、***和存储介质 |
CN109947416A (zh) * | 2019-03-15 | 2019-06-28 | 电子科技大学 | 一种软件化雷达跨平台通用并行计算库的构建方法 |
CN113939815A (zh) * | 2019-05-31 | 2022-01-14 | 罗伯特·博世有限公司 | 用于处理传感器信号的方法和设备 |
CN112511480A (zh) * | 2020-11-10 | 2021-03-16 | 展讯半导体(成都)有限公司 | 二次fft和ifft变换方法及相关产品 |
CN112559954A (zh) * | 2020-12-18 | 2021-03-26 | 清华大学 | 基于软件定义可重构处理器的fft算法处理方法及装置 |
CN112559954B (zh) * | 2020-12-18 | 2022-08-12 | 清华大学 | 基于软件定义可重构处理器的fft算法处理方法及装置 |
CN112800385A (zh) * | 2021-01-25 | 2021-05-14 | 鹏城实验室 | 数据处理方法、装置、终端设备以及存储介质 |
CN113254390A (zh) * | 2021-06-09 | 2021-08-13 | 千芯半导体科技(北京)有限公司 | 可重构计算结构、计算方法及硬件架构 |
CN113254390B (zh) * | 2021-06-09 | 2021-10-29 | 千芯半导体科技(北京)有限公司 | 可重构计算结构、计算方法及硬件架构 |
CN115080503A (zh) * | 2022-07-28 | 2022-09-20 | 中国人民解放军63921部队 | 一种针对fft基模块映射的脉动阵列可重构处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN102043761B (zh) | 2012-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102043761B (zh) | 一种基于可重构技术的傅立叶变换的实现方法 | |
CN101782893B (zh) | 可重构数据处理平台 | |
CN106940815A (zh) | 一种可编程卷积神经网络协处理器ip核 | |
CN101826142B (zh) | 一种可重构椭圆曲线密码处理器 | |
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
CN103699360B (zh) | 一种向量处理器及其进行向量数据存取、交互的方法 | |
CN103984560B (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
CN101533387A (zh) | 基于fpga的边角块稀疏矩阵并行lu分解器 | |
CN101504599A (zh) | 适于数字信号处理应用的专用指令集微处理*** | |
CN103955447A (zh) | 基于dsp芯片的fft加速器 | |
CN102279818A (zh) | 支持有限共享的向量数据访存控制方法及向量存储器 | |
CN103984677A (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
Meloni et al. | A high-efficiency runtime reconfigurable IP for CNN acceleration on a mid-range all-programmable SoC | |
Yang et al. | ISOSceles: Accelerating sparse CNNs through inter-layer pipelining | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
CN103793208A (zh) | 矢量dsp 处理器和协处理器协同运作的数据处理*** | |
CN102722472B (zh) | 一种复数矩阵的优化方法 | |
CN103235717B (zh) | 具有多态指令集体系结构的处理器 | |
CN102012802B (zh) | 面向向量处理器数据交换的方法及装置 | |
Tian et al. | swSuperLU: A highly scalable sparse direct solver on Sunway manycore architecture | |
CN101615113A (zh) | 一条指令完成一次蝶形运算的微处理器实现方法 | |
CN107368459A (zh) | 基于任意维数矩阵乘法的可重构计算结构的调度方法 | |
CN103761213A (zh) | 基于循环流水计算的片上阵列*** | |
CN102541813A (zh) | 一种多粒度并行fft蝶形计算的方法及相应的装置 | |
Abdelhamid et al. | MITRACA: A next-gen heterogeneous architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120613 Termination date: 20150104 |
|
EXPY | Termination of patent right or utility model |