CN106776474A - 一种矢量处理器实现fft运算的方法及系统 - Google Patents
一种矢量处理器实现fft运算的方法及系统 Download PDFInfo
- Publication number
- CN106776474A CN106776474A CN201611021245.8A CN201611021245A CN106776474A CN 106776474 A CN106776474 A CN 106776474A CN 201611021245 A CN201611021245 A CN 201611021245A CN 106776474 A CN106776474 A CN 106776474A
- Authority
- CN
- China
- Prior art keywords
- data
- fft
- vector
- address
- 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
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000013500 data storage Methods 0.000 claims description 33
- 210000000352 storage cell Anatomy 0.000 claims description 16
- 241001269238 Data Species 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 claims description 6
- 241000255777 Lepidoptera Species 0.000 claims description 5
- 230000002452 interceptive effect Effects 0.000 claims description 3
- 238000013461 design Methods 0.000 abstract description 5
- 238000004891 communication Methods 0.000 abstract description 4
- 230000006870 function Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 13
- 238000006243 chemical reaction Methods 0.000 description 12
- 238000013507 mapping Methods 0.000 description 12
- 230000008859 change Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 240000008168 Ficus benjamina Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 241000270295 Serpentes Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- ORQBXQOJMQIAOY-UHFFFAOYSA-N nobelium Chemical compound [No] ORQBXQOJMQIAOY-UHFFFAOYSA-N 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Discrete Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
一种通过矢量处理器实现FFT运算的方法及系统,通过利用矢量处理器中的标量乘累加运算单元,对现有矢量处理器中并行的4个乘累加单元进行交叉互联,同时配合根据FFT各级蝶形运算数据而设计的存储器地址指针的更新方法,从而在矢量处理器中实现进行FFT运算的功能。本发明,针对数字信号处理芯片,尤其是矢量处理器进行了新颖的DSP架构,重新设计了FFT蝶形运算指令。本发明通过不同的存储器地址指针更新模式,直接高效地选取蝶形运算所针对的数据,可以直接通过矢量处理器实现FFT运算。在保证运算准确性与效率的同时,节省了芯片面积,可以广泛应用于各类通信类芯片中的可编程矢量处理器的设计中。
Description
技术领域
本发明涉及FFT(Fast Fourier Transformation,快速傅氏变换)运算方法,尤其涉及一种通过矢量处理器实现FFT运算的方法。
背景技术
FFT运算是通信系统中最基本的运算。在有些处理器或DSP系统中,FFT运算通过专用的硬件加速单元实现,虽然这样效率较高,但是由于增加了一个独立的硬件加速单元,所以在芯片面积上并不占优。由于矢量处理器具有多个标量运算单元,可以通过改进实现矢量运算,而FFT运算也具有矢量运算的特点,所以通过矢量处理器也能够进行FFT运算。那么通过矢量处理器如何高效的进行FFT运算就非常重要。
目前,通过矢量处理器实现FFT运算的困难在于处理器或DSP架构,尤其是数字信号处理芯片中FFT蝶形运算指令的设计。
本发明所公开的通过矢量处理器实现FFT的运算方法,针对矢量处理器的特点,自行定义了新的FFT蝶形运算指令(DIT),通过将矢量处理器中的各个标量乘累加运算单元进行新颖的互联,以实现FFT蝶形运算。同时,本发明还通过采用高效新颖的存储器地址指针的更新模式,能够快速的计算出FFT运算的输入和输出数据地址。通过各个标量乘累加单元运算结果以及地址指针之间的相互配合,实现了高效的FFT运算。本发明实现简单,可以广泛应用于各种通信类芯片中的可编程矢量处理器设计中。
发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种通过矢量处理器实现FFT运算的方法及系统。
首先,为实现上述目的,提出一种矢量处理器实现FFT运算的系统,包括顺序串联的指令存储器、取址单元、译码单元和执行单元,其特征在于,所述执行单元包括矢量寄存器单元、数据交换网络、矢量运算单元、数据存储单元、地址产生单元和数据存储器,所述的矢量寄存器单元、数据交换网络和矢量运算单元依次串联形成环形结构,所述矢量寄存器单元的输出端同时连接数据交换网络的输入端与数据存储单元的输入端,矢量寄存器单元的第一输入端连接矢量运算单元的输出端,矢量寄存器单元的第二输入端连接数据存储单元第一输出端,数据存储单元的第二输出端与数据存储器的输入端双向交互连接,数据存储器的另一输入端连接地址产生单元;
所述顺序串联的指令存储器、取址单元和译码单元用以产生指令译码控制信号,控制执行单元;
所述矢量寄存器单元用以暂存数据存储单元读取的即将进行FFT蝶形运算的数据,以及矢量运算单元输出的由FFT蝶形运算产生的数据;
所述数据交换网络用以对即将进行FFT蝶形运算的旋转因子以及蝶形运算的两个数据的实部与虚部按照矢量运算单元的要求进行交换,并将交换得到3个矢量数据输出至矢量运算单元的对应接口;
所述矢量运算单元中设有4个并行的乘累加单元,用于完成FFT运算中的各级蝶形运算;
所述地址产生单元用以产生每一级FFT蝶形运算中输入数据、输出数据以及旋转因子的地址;
所述数据存储单元用以根据地址产生单元产生的地址,将数据存储器内的数据读取至矢量寄存器单元,或根据地址产生单元产生的地址,将矢量寄存器单元输出的数据写入数据存储器;
所述数据存储器用以存储需要进行FFT蝶形运算的数据,以及FFT蝶形运算产生的数据。
进一步的,本发明系统中,所述的矢量运算单元中包括4个并行的乘累加单元,每个乘累加单元由顺序串联的乘法器、取反器和加法器构成;第一乘累加单元中的乘法器输出端通过取反器后连接至第三乘累加单元中的加法器输入端,第二乘累加单元中的乘法器输出端通过取反器后连接至第四乘累加单元中的加法器输入端,第三乘累加单元中的乘法器输出端通过取反器后连接至第一乘累加单元中的加法器输入端,第四乘累加单元中的乘法器输出端连接第二乘累加单元中的加法器输入端。
进一步的,本发明系统中,所述的数据交换网络用以对即将进行FFT蝶形运算的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}的实部与虚部按照矢量运算单元的要求进行交换,得到3个矢量数据:加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w), I(w),R(w)},所述三个矢量数据的结构为{元素3, 元素2,元素1,元素0},交换网络(101)的输出端用以将加法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的加法器数据接口,将第一乘法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的乘法器的第一数据接口,将第二乘法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的乘法器的第二数据接口。
进一步的,本发明系统中,所述的矢量寄存器单元由8个一级矢量寄存器组成,每个一级矢量寄存器分别由2个二级寄存器组成,每个二级寄存器分别由2个三级寄存器组成。针对32位FFT运算,所述的三级寄存器为16bit,所述的二级寄存器为32bit,所述的一级矢量寄存器为64bit。
其次,为实现上述目的,还提出一种矢量处理器实现FFT运算的数据交换方法,其特征在于,数据交换步骤如下:
第1步,根据数据读取指令读入存储器地址指针所对应的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}和蝶形运算的第二个数据{ I(x2),R(x2)};
第2步,通过数据交换网络将读入的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}按照加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w), I(w),R(w)}的形式进行矢量数据交换;其中,每个矢量数据均依次由{元素3,元素2, 元素1,元素0}四个元素组成;
第3步,向矢量运算单元的四个加法数据接口依次输出加法矢量数据{I(x1),R(x1), I(x1),R(x1)}中的四个元素,向矢量运算单元的四个第一数据接口依次输出第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}中的四个元素,向矢量运算单元的四个第二数据接口依次输出第二乘法矢量数据{R(w),I(w), I(w),R(w)}中的四个元素。
同时,为实现上述目的,经过上述方法完成数据交换后的数据需要按照如下的矢量运算单元实现蝶形运算的方法完成蝶形运算,其具体步骤为:
第一步,在矢量运算单元的四个乘累加单元中分别将第一乘法矢量数据中的第一至第四个元素和第二乘法矢量数据中的第一至第四个元素分别进行乘法运算,分别得到第一乘法器结果R(x2)*R(w),第二乘法器结果R(x2)*I(w),第三乘法器结果I(x2)*I(w)和第四乘法器结果I(x2)*R(w);
第二步,将加法矢量数据中的第一至第四个元素按顺序分别输入4个加法器,与第一至第四乘法器结果进行加法运算,分别得到第一乘累加运算结果R(x1+x2×w)= R(x1)+R(x2)*R(w)- I(x2)*I(w);第二乘累加运算结果I(x1+x2×w)= I(x1)+R(x2)*I(w)+ I(x2)*R(w);第三乘累加运算结果R(x1-x2×w)= R(x1)+I(x2)*I(w)- R(x2)*R(w);以及第四乘累加运算结果I(x1-x2×w)= I(x1)+I(x2)*R(w)- R(x2)*I(w);
第三步,输出四个乘累加运算结果。
为完成整个FFT运算一共需要进行的FFT蝶形运算的次数按照如下公式:
。
根据公式计算出需要进行多少次上述的蝶形运算,并通过软件编程控制循环次数实现。全部蝶形运算完成之后,表示整个FFT运算完成。每一次数据交换,完成FFT蝶形运算后还需要配合存储器地址指针的更新,使存储器地址指针分别指向下一个蝶形运算的三个数据的地址:旋转因子{I’(w),R’(w)}、蝶形运算的第一个数据{I’(x1),R’(x1)}和蝶形运算的第二个数据{ I’(x2),R’(x2)}的地址,然后按照上述步骤继续进行下一个蝶形运算,直至完成整个FFT运算。
同时,为了配合上述数据交换与蝶形运算的方法,本发明同时提供一种矢量处理器实现FFT运算的地址生成方法,所述地址生成方法包括并行的输入数据地址生成步骤、输出数据地址生成步骤和旋转因子地址生成步骤。在每完成一次蝶形运算后,同时对输入数据地址、输出数据地址和旋转因子地址进行更新,蛇女成新的地址。其中,输入数据地址和输出数据地址根据所处FFT蝶形运算的级数不同按照如下方式生成:
在第一级FFT蝶形运算中,输入数据的地址从0开始,按照reverse模式进行更新,即由高位向低位每次进1的方式进行自增;reverse模式下地址更新方式为(dpx.addr &(0xfffe<<fft_stage)) | (reverse(dpx.addr[0:15]+(0x8000>>fft_stage)) & ~(0xfffe<<fft_stage));其中,0xfffe为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“reverse”为按位颠倒运算,0x8000为常数,“>>”为右移运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;在第一级FFT蝶形运算中,输出数据的地址按照从0到7的顺序产生;
在第二级以及以后各级的FFT蝶形运算中,输入数据和输出数据的地址均从0开始,按照一次keep模式、一次nbf模式交替的方式产生;keep模式下地址保持不变,nbf模式下地址更新的方式为((dpx.addr+dpx.offset) +1)&(~dpx.offset),其中,dpx.offset为地址指针偏移,dpx.addr为地址指针,“~”为按位取反运算,“+”为加法运算,“&”为按位与运算;第二级蝶形运算开始dpx.offset的初值设置为2,之后每完成一级蝶形运算,dpx.offset的取值都需要乘以2后再进行下一级FFT蝶形运算;
所述旋转因子地址按照如下方式生成:
每一级FFT蝶形运算中,旋转因子的读取地址按照twf模式进行更新,twf模式下地址变换方式为(dpx.addr& (0xffff<<fft_stage)) | ((dpx.addr+dpx.offset) & ~(0xffff<<fft_stage)));其中,0xffff为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;第一级FFT运算中旋转因子对应的存储器地址指针的偏移值为,其中,fft_stage为FFT运算的级数,在每次进入下一级运算前,偏移值需要除以2;
每进行一级FFT运算蝶形运算后,地址产生单元(103)均按照上述方法分别产生新一级FFT运算蝶形运算的输入数据地址、输出数据地址和旋转因子地址,并输出。
FFT运算由多级蝶形运算构成,前一级蝶形运算的结果作为下一级运算的输入,而每一级运算中又分别存在若干相互独立的蝶形运算。每个蝶形运算中,输入数据依次为蝶形运算的第一个数据{I(x1),R(x1)}和蝶形运算的第二个数据{ I(x2),R(x2)};输出数据依次为蝶形运算的第一个结果{I(x1-x2×w),R(x1-x2×w)}和蝶形运算的第二个结果{I(x1+x2×w),R(x1+x2×w)}。
有益效果
本发明针对矢量处理器,通过改进芯片架构,对现有矢量处理器中并行的4个乘累加单元进行交叉互联。同时配合重新设计的FFT蝶形运算指令,以及根据FFT各级蝶形运算数据而重新设计的存储器地址指针的更新方法,利用现有的矢量处理器实现FFT运算。通过矢量处理器实现FFT运算,可以在保证运算准确性与效率的同时,节省芯片面积,可以适用于各类通信类芯片中的可编程矢量处理器。
进一步的,为了增加本发明描述的方法和系统在处理蝶形运算时的正确率以及效率,本发明中同时设置了多个存储器地址指针,并为每个存储器地址指针设置了独立的模式寄存器,通过配置对应的存储器地址指针模式寄存器,可对FFT运算过程中输入和输出数据的地址变换进行设定。在每次存储器读取指令(ld32)和存储器存储指令(st32)执行之后,对应的地址指针变会根据所设定的模式进行变换,直接查找到下一个蝶形运算所需要的输入数据,并确定下一个蝶形运算输出数据的存储位置。由于这些指针的更新方式都是针对FFT蝶形运算而特别设计的,可以直接查找到相应的数据,从而大大提高了系统的运算能力。
本方案设定了特殊指令完成了最基本的蝶形运算,以及每一级FFT运算中需要的地址变换。根据本发明所述的方法,通过软件编程的方式设定地址变换模式并调用蝶形运算指令,在对应地增加标量乘累加单元,并配合根据FFT点数而设计的矢量寄存器单元后,即可以实现更高点数的FFT运算。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明所述矢量处理器实现FFT运算的系统架构框图;
图2为本发明中矢量寄存器单元的结构框图;
图3为本发明中矢量寄存器单元中复数数据存放方式的示意图;
图4为蝶形运算示意图;
图5为本发明中矢量运算单元的结构框图;
图6为8点FFT运算流程图;
图7为8点FFT运算中第一级输入数据地址更新方式的示意图;
图8为8点FFT运算中第二级输入数据地址更新方式的示意图;
图9为8点FFT运算中第三级输入数据地址更新方式的示意图;
图10为8点FFT运算中旋转因子地址更新方式的示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1
本实施例为本发明所述矢量处理器实现FFT运算的系统的具体实现方式。
图1为本实施例所述的矢量处理器实现FFT运算的系统架构图。该系统包括顺序串联的指令存储器106、取址单元107、译码单元108和执行单元109,其特征在于,执行单元109包括矢量寄存器单元100、数据交换网络101、矢量运算单元102、数据存储单元104、地址产生单元103和数据存储器105,所述的矢量寄存器单元100、数据交换网络101和矢量运算单元102顺序串联形成环形结构,所述矢量寄存器单元100的输出端同时连接数据交换网络101的输入端与数据存储单元104的输入端,矢量寄存器单元100的第一输入端连接矢量运算单元102的输出端,矢量寄存器单元100的第二输入端连接数据存储单元104第一输出端,数据存储单元104的第二输出端与数据存储器105的输入端双向交互连接,数据存储器105的另一输入端连接地址产生单元103;
所述顺序串联的指令存储器106、取址单元107和译码单元108用以产生指令译码控制信号,控制执行单元109。
首先,系统通过数据读取指令(ld32)将FFT蝶形运算的输入数据从数据存储器105中,通过数据存储单元104,读入至矢量寄存器单元100中,之后利用自定义的蝶形运算指令(DIT)在矢量运算单元102中完成FFT蝶形运算,并将运算结果存放至矢量寄存器单元100中,最后通过数据存储指令(st32)将蝶形运算的结果存放至数据存储器105中。在进行FFT数据读取和存储的时候,地址产生单元103则用于产生下一个FFT蝶形运算的输入和输出数据以及旋转因子的地址。
具体到每个模块的分工如下:
所述顺序串联的指令存储器106、取址单元107和译码单元108用以产生指令译码控制信号,控制执行单元109;
所述矢量寄存器单元100用以暂存数据存储单元104读取的即将进行FFT蝶形运算的数据,以及矢量运算单元102输出的由FFT蝶形运算产生的数据;
所述数据交换网络101用以对即将进行FFT蝶形运算的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}的实部与虚部按照矢量运算单元(102)的要求进行交换,交换得到3个矢量数据:加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w), I(w),R(w)},所述三个矢量数据的结构为{元素3, 元素2, 元素1,元素0};
数据交换网络101还将所有矢量数据内的各个元素输出至矢量运算单元102的对应接口。
所述矢量运算单元102中包括4个并行的乘累加单元,每个乘累加单元由顺序串联的乘法器、取反器和加法器构成;第一乘累加单元中的乘法器输出端通过取反器后连接至第三乘累加单元中的加法器输入端,第二乘累加单元中的乘法器输出端通过取反器后连接至第四乘累加单元中的加法器输入端,第三乘累加单元中的乘法器输出端通过取反器后连接至第一乘累加单元中的加法器输入端,第四乘累加单元中的乘法器输出端连接第二乘累加单元中的加法器输入端;
所述地址产生单元103用以产生每一级FFT蝶形运算中输入数据、输出数据以及旋转因子的地址;
所述数据存储单元104用以根据地址产生单元103产生的地址,将数据存储器105内的数据读取至矢量寄存器单元100,或根据地址产生单元103产生的地址,将矢量寄存器单元100输出的数据写入数据存储器105;
所述数据存储器105用以存储需要进行FFT蝶形运算的数据,以及FFT蝶形运算产生的数据。
在本系统中,针对矢量处理器,提出了一种新颖的自定义的FFT蝶形运算指令(DIT),通过将矢量处理器中的各个标量乘累加运算单元进行新颖的互联(具体连接关系参照图5),从而实现FFT蝶形运算。这种方式下,每次能够完成的蝶形运算的个数取决于矢量处理器中的标量乘累加运算单元的个数。
所述的矢量处理器需要配合数据交换网络101对即将进行FFT蝶形运算的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}的实部与虚部进行交换,才能正确地对数据进行蝶形运算。交换后,按照{元素3, 元素2, 元素1,元素0}的顺序得到3个矢量数据:加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w),I(w),R(w)},并将加法矢量数据的元素0至元素3依次被送至第一至第四乘累加单元的加法器数据接口,将将第一乘法矢量数据的元素0至元素3依次被送至第一至第四乘累加单元的乘法器的第一数据接口,第二乘法矢量数据的元素0至元素3依次被送至第一至第四乘累加单元的乘法器的第二数据接口。
进一步的,为了增加本发明描述的方法和系统在处理蝶形运算时的正确率以及效率,本发明中同时设置了多个存储器地址指针,并为每个存储器地址指针设置了新颖的独立模式寄存器,通过配置对应的存储器地址指针模式寄存器,可对FFT运算过程中输入和输出数据的地址以及旋转因子的地址进行设定。存储器的地址指针变换模式设定好之后,每次存储器读取指令(ld32)和存储器存储指令(st32)执行之后,对应的地址指针变会根据所设定的模式进行变换。
具体而言,本发明系统中,输入数据和输出数据的地址根据所处FFT蝶形运算的级数按照以下方式产生:所述的地址产生单元103在第一级FFT蝶形运算中,输入数据的地址从0开始,按照reverse模式进行更新,即由高位向低位每次进1的方式进行自增;reverse模式下地址更新方式为(dpx.addr & (0xfffe<<fft_stage)) | (reverse(dpx.addr[0:15]+(0x8000>>fft_stage)) & ~(0xfffe<<fft_stage));其中,0xfffe为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“reverse”为按位颠倒运算,0x8000为常数,“>>”为右移运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;在第一级FFT蝶形运算中,输出数据的地址按照从0到7的顺序产生;
在第二级以及以后各级的FFT蝶形运算中,输入数据和输出数据的地址均从0开始,按照一次keep模式、一次nbf模式交替的方式产生;keep模式下地址保持不变;nbf模式下地址更新的方式为((dpx.addr+dpx.offset) +1)&(~dpx.offset);其中,dpx.offset为地址指针偏移,dpx.addr为地址指针,“~”为按位取反运算,“+”为加法运算,“&”为按位与运算;第二级蝶形运算开始dpx.offset的初值设置为2,之后每完成一级蝶形运算,dpx.offset的取值都需要乘以2后再进行下一级FFT蝶形运算。具体到本实施例中的8点FFT运算中,第二级旋转因子的地址从0开始按照每次偏移2产生,第三级旋转因子的地址从0开始按照每次偏移1产生。
与输入输出数据地址变换相对应的,在每一级FFT蝶形运算中,旋转因子的读取地址也同时根据twf模式进行更新,twf模式下地址变换方式为(dpx.addr& (0xffff<<fft_stage)) | ((dpx.addr+dpx.offset) & ~(0xffff<<fft_stage)));其中,0xffff为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;第一级FFT运算中旋转因子对应的存储器地址指针的偏移值为2^(fft_stage-1) ,其中,fft_stage为FFT运算的级数。即在本实施例中的8点FFT运算中,第一级FFT运算需要设置旋转因子对应的存储器地址指针的偏移值为4,在每次进入下一级运算前,偏移值需要除以2;
每进行一级FFT运算蝶形运算后,地址产生单元(103)均按照上述方法分别产生新一级FFT运算蝶形运算的输入数据地址、输出数据地址和旋转因子地址,并输出。
这里针对FFT运算设置了四种新颖的指针变换模式:reverse自增模式、nbf模式、twf模式、keep模式。reverse自增模式下,地址指针会进行反向自增,也就是说,地址指针的自增加法运算不是从低位向高位进位,而是高位向低位进位。这种模式用于FFT第一级蝶形运算的输入及输出数据的地址变换。nbf模式下,在读取或存储完一个蝶形运算的第二个数据之后,地址指针会变换为下一个蝶形运算的第一个数据的地址。该模式用于FFT运算中,从第二级蝶形运算开始,每个蝶形运算的第一个数据地址的计算。twf则模式用于每一级FFT运算中,旋转因子地址的计算,其偏移量根据蝶形运算的级数而确定。keep模式下,地址指针不发生变化。
进一步的,针对32位FFT运算,本发明系统中,所述的矢量寄存器单元100由8个64bit的一级矢量寄存器v组成,每个一级矢量寄存器v分别由2个32bit的二级寄存器d组成,每个二级寄存器d分别由2个16bit的三级寄存器s组成。也就是说,该矢量寄存器单元100由8个64bit的一级矢量寄存器(v0~v7)或者16个32bit的二级寄存器(d0~d15)或者32个16bit的三级寄存器(s0~s31)组成。每个一级寄存器v由两个二级寄存器d组成,每个二级寄存器d由两个三级寄存器s组成,每个三级寄存器s都叫做矢量的一个元素。例如:v0是一个64bit的一级矢量寄存器,它的低32bit为二级寄存器d0,高32bit为二级寄存器d1。二级寄存器d0的低16bit为三级寄存器s0,高16bit为三级寄存器s1。二级寄存器d1的低16bit为三级寄存器s2,高16bit为三级寄存器s3。s0~s3分别对应一级寄存器v0的四个元素(e0~e3)。该一级矢量寄存器包含4个bank,每个一级寄存器v的元素e0构成bank0,元素e1构成bank1,元素e2构成bank2,元素e3构成bank3。矢量运算单元102具有4个并行的乘累加单元,可对矢量寄存器单元100中的矢量数据进行并行计算。矢量运算单元102和数据存取单元104可对矢量寄存器单元100进行读写操作,每次读写操作可针对一级寄存器v(ld64或st64)、二级寄存器d(ld32或st32)或三级寄存器s(ld16或st16)。
FFT运算的输入和输出数据都是复数,复数在矢量寄存器单元100中存放示意图如图3所示。每个矢量寄存器中可以存放两个复数,其中元素e0和元素e2存放复数的实部,元素e1和元素e3存放复数的虚部。
实施例2
为实现上述目的,在实施例2中还提出一种矢量处理器实现FFT运算的数据交换方法。这种方法针对矢量运算单元而设计,通过数据交换网络与矢量运算单元的配合实现FFT运算中的蝶形运算。值得注意的是,这里的数据交换方法实际上还需要依托图5所示的矢量运算单元中的独特的硬件连接关系才能够完全实现蝶形运算。交换的具体计算步骤如下:
第1步,根据数据读取指令读入存储器地址指针所对应的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)};
第2步,通过数据交换网络101将读入的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}按照加法矢量数据{I(x1),R(x1),I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w), I(w),R(w)}的形式进行矢量数据交换;
第3步,向矢量运算单元102的四个加法数据接口依次输出加法矢量数据{I(x1),R(x1), I(x1),R(x1)}中的四个元素,向矢量运算单元的四个第一数据接口依次输出第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}中的四个元素,向矢量运算单元的四个第二数据接口依次输出第二乘法矢量数据{R(w),I(w), I(w),R(w)}中的四个元素。
结合上述的数据交换方法,还需要如下的一种利用矢量运算单元实现蝶形运算的方法。具体步骤为:
第一步,在矢量运算单元的四个乘累加单元中分别将第一乘法矢量数据中的第一至第四个元素和第二乘法矢量数据中的第一至第四个元素进行乘法运算,分别得到第一乘法器结果R(x2)*R(w),第二乘法器结果R(x2)*I(w),第三乘法器结果I(x2)*I(w)和第四乘法器结果I(x2)*R(w);
第二步,将加法矢量数据中的第一至第四个元素按顺序分别输入4个加法器,依次与第一至第四乘累加运算的结果进行加法运算,最终分别完成第一乘累加运算结果R(x1+x2×w)= R(x1)+R(x2)*R(w)- I(x2)*I(w);第二乘累加运算结果I(x1+x2×w)= I(x1)+R(x2)*I(w)+ I(x2)*R(w);第三乘累加运算结果R(x1-x2×w)= R(x1)+I(x2)*I(w)- R(x2)*R(w);以及第四乘累加运算结果I(x1-x2×w)= I(x1)+I(x2)*R(w)- R(x2)*I(w);
第三步,输出四个乘累加运算结果。
为了完成FFT运算中的全部蝶形运算,每次按照上述步骤完成一次蝶形运算还需要配合更新存储器地址指针,使存储器地址指针分别指向下一个蝶形运算的旋转因子{I’(w),R’(w)}、下一个蝶形运算的第一个数据{I’(x1),R’(x1)}和下一个蝶形运算的第二个数据{ I’(x2),R’(x2)}的地址。根据这些地址读取相应的数据或者将运算结果存储至相应的存储单元内,再回到第一步进行下一个蝶形运算,直至完成。
本实施例所针对的是8点FFT运算。8点FFT运算分为三级,前一级运算的结果作为后一级运算的输入,其中每一级运算都需要独立地进行4个蝶形运算。所述的蝶形运算的示意图如图4所示,图中x1和x2为蝶形运算的输入数据,w为蝶形运算的旋转因子, x1+x2*w和x1-x2*w为蝶形运算的两个输出结果。图5为实施例的矢量运算单元102结构框图。该矢量运算单元102包括4个乘累加单元,将这4个乘累加单元经过适当的互联,便可轻松实现图4所描述的FFT的蝶形运算。蝶形运算指令(DIT)得到的运算结果x1+x2*w的实部和虚部位于矢量元素e0和元素e1,运算结果x1-x2*w的实部和虚部位于矢量元素e2和元素e3。
蝶形运算指令(DIT)需要配合存储器地址指针的灵活变化,才能将FFT运算高效的完成。在该实施例的系统中,设置了多个存储器地址指针,并为每个存储器地址指针设置了独立的模式寄存器,通过配置对应的存储器地址指针模式寄存器,可对FFT运算过程中输入和输出数据的地址变换进行设定。存储器的地址指针变换模式设定好之后,每次存储器读取指令(ld32)和存储器存储指令(st32)执行之后,对应的地址指针就会根据所设定的模式进行变换。
也就是说,针对8点FFT运算,本发明通过矢量处理器实现FFT运算时除了需要依照上述数据交换方法实现基础的蝶形运算,还需要配合下面的地址生成方法,在每一次蝶形运算后,按照下面的方式更新存储器地址指针。
值得注意的是,这里所述的地址生成方法包括FFT蝶形运算中输入数据、输出数据和旋转因子三者的地址生成方法。在每一级蝶形运算后,并行的生成输入数据地址、输出数据地址和旋转因子地址,所述输入数据地址和输出数据地址根据所处FFT蝶形运算的级数不同按照如下方式生成。其中,输入数据和输出数据的地址根据所处FFT蝶形运算的级数不同按照如下方式生成:
在第一级FFT蝶形运算中,输入数据的地址从0开始,按照reverse模式进行更新,即由高位向低位每次进1的方式进行自增;第一级旋转因子的地址从0开始按照每次偏移4产生;输出数据的地址按照从0到7的顺序产生;
在第二级FFT蝶形运算中,输入数据和输出数据的地址均从0开始,按照一次keep模式、一次nbf模式交替的方式产生;keep模式下地址保持不变,nbf模式下地址更新的方式为((dpx.addr+dpx.offset) +1)&(~dpx.offset),其中,dpx.offset为地址指针偏移,dpx.addr为地址指针,“~”为按位取反运算,“+”为加法运算,“&”为按位与运算;第二级旋转因子的地址从0开始按照每次偏移2产生;
在第三级FFT蝶形运算中,输入数据和输出数据的地址均从0开始,按照一次keep模式、一次nbf模式交替的方式产生,第三级FFT蝶形运算中地址指针偏移dpx.offset的值为第二级FFT蝶形运算中的一半;第三级旋转因子的地址从0开始按照每次偏移1产生;
其中,输入数据依次为蝶形运算的第一个数据{I(x1),R(x1)}和蝶形运算的第二个数据{ I(x2),R(x2)};输出数据依次为蝶形运算的第一个结果{I(x1-x2×w),R(x1-x2×w)}和蝶形运算的第二个结果{I(x1+x2×w),R(x1+x2×w)}。
具体而言,本发明方法中,所述reverse模式下地址更新的方式为(dpx.addr &(0xfffe<<fft_stage)) | (reverse(dpx.addr[0:15])+(0x8000>>fft_stage)) & ~(0xfffe<<fft_stage)),其中,0xfffe为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“reverse”为按位颠倒运算,0x8000为常数,“>>”为右移运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算。
具体而言,本发明方法中,所述旋转因子的地址按照twf模式进行更新,twf模式下地址更新的方式为(dpx.addr&(0xffff<<fft_stage))|((dpx.addr+dpx.offset)&~(0xffff<<fft_stage))),其中,0xffff为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算, “+”为相加运算,“~”为按位取反运算,“|”为按位或运算。
具体,在实现图6所示的8点FFT运算中,8点FFT运算共3级,在进行每级FFT运算前,需要设置选用的存储器地址指针(dpx)的指针变换模式(dpx.mode)、地址指针的初始地址(dpx.addr)以及地址的指针偏移值(dpx.offset)。之后在每次存储器读取指令(ld32)和存储器存储指令(st32)执行之后,对应的地址指针会根据所设定的模式进行变换。
图7为FFT运算第一级输入数据地址变换示意图。ld32 [dpx.addr]为FFT运算输入数据读取指令,该指令将存储器中位于地址dpx.addr的复数读入矢量寄存器单元中。在数据读取前,需要将存储器的地址指针变换模式设置为reverse自增模式,并且将地址指针的初始地址设置为0。第一级FFT输入数据的地址则会按照以下模式变换:0x0,0x4,0x2,0x6,0x1,0x5,0x3,0x7。这种地址变换模式相当于输入数据的地址每次增值是bit2加1,并且bit2向bit1进位,bit1向bit0进位。另外,FFT第一级数据的输出地址需要按照顺序变换,此处不做说明。假设存储器地址指针的位宽为16位,那么在reverse自增模式下,地址更新方式为:
(dpx.addr & (0xfffe<<fft_stage)) | (reverse(dpx.addr[0:15]+(0x8000>>fft_stage)) & ~(0xfffe<<fft_stage))。
reverse自增模式下,地址更新的步骤如下:
1)将常数0xfffe逻辑左移fft_stage位。fft_stage是FFT运算的级数。例如8点FFT运算时,fft_stage为3。
2)将地址指针dpx.addr与第一步的结果进行按位与操作
3)将地址指针dpx.addr按位颠倒,并与0x8000右移fft_stage的结果进行相加操作,并将相加的结果再进行按位颠倒。
4)将0xfffe左移fft_stage位,之后将结果按位取反。
5)将第三步的结果与第四步的结果进行按位与操作。
6)将第二步的结果与第五步的结果进行按位或操作,得到最终地址更新值。
图8为FFT运算第二级输入数据地址变换示意图。ld32 [dpx.addr]和ld32[dpx.addr+dpx.offset]为FFT运算输入数据读取指令,分别用于读取存储器中位于地址dpx.addr和dpx.addr+dpx.offset的复数,这两个复数对应一个蝶形运算的两个点。在数据读取前,需要将地址指针的初始地址设置为0,指针偏移为2,并设置存储器的地址指针变换模式。在dpx.addr寻址模式下,地址指针变换模式为keep模式,在dpx.addr+dpx.offset寻址模式下,地址指针变换模式为nbf模式。另外,FFT第二级数据的输出地址也按照上述规律变换,此处不做说明。keep模式下,地址指针保持不变。nbf模式下,地址指针变换方式如下:
((dpx.addr+dpx.offset) +1)&(~dpx.offset)。
nbf模式下,地址更新的步骤如下:
1)将地址指针偏移dpx.offset进行按位取反
2)将地址指针dpx.addr与地址指针偏移dpx.offset以及常数1相加
3)将第一步的结果与第二步的结果进行按位与操作,得到最终的地址更新值
图9为FFT运算第三级输入数据地址变换示意图。第三级FFT运算开始前,需要把对应地址指针的偏移乘以2,之后再按照和第二级FFT运算一样的模式进行数据的读取和指针变换。
图10为8点FFT运算旋转因子地址变换示意图。ld32 [dpx.addr]用于读取FFT蝶形运算的旋转因子。每级FFT运算前,先要设置旋转因子对应的存储器地址指针的偏移值。第一级FFT运算需要设置旋转因子对应的存储器地址指针的偏移值为4,在每次进入下一级运算前,偏移值需要除以2。twf模式下,地址更新方式如下:
(dpx.addr& (0xffff<<fft_stage)) |
((dpx.addr+dpx.offset) &~(0xffff<<fft_stage)))。
twf自增模式下,地址更新的步骤如下:
1)将常数0xffff逻辑左移fft_stage位。fft_stage是FFT运算的级数。例如8点FFT运算时,fft_stage为3。
2)将地址指针dpx.addr与第一步的结果进行按位与操作
3)将地址指针dpx.addr与地址指针偏移dpx.offset相加。
4)将0xffff左移fft_stage位,之后将结果按位取反。
5)将第三步的结果与第四步的结果进行按位与操作。
6)将第二步的结果与第五步的结果进行按位或操作,得到最终地址更新值。
本发明利用自定义的FFT蝶形运算指令(DIT),并配合高效的存储器地址指针变换模式,可实现高效的FFT运算。如果可将FFT蝶形运算指令(DIT)以及存储器读取(ld32)和存储(st32)指令并行发射,将会得到更高的FFT运算效率。
以上实施例仅仅是是针对8点FFT而设计的。本领域技术人员可以理解,根据本实施例所述的方法,通过软件编程的方式设定地址变换模式并调用蝶形运算指令,可以实现更多点数FFT的运算。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种矢量处理器实现FFT运算的系统,包括顺序串联的指令存储器(106)、取址单元(107)、译码单元(108)和执行单元(109),其特征在于,所述执行单元(109)包括矢量寄存器单元(100)、数据交换网络(101)、矢量运算单元(102)、数据存储单元(104)、地址产生单元(103)和数据存储器(105),所述的矢量寄存器单元(100)、数据交换网络(101)和矢量运算单元(102)顺序串联形成环形结构,所述矢量寄存器单元(100)的输出端同时连接数据交换网络(101)的输入端与数据存储单元(104)的输入端,矢量寄存器单元(100)的第一输入端连接矢量运算单元(102)的输出端,矢量寄存器单元(100)的第二输入端连接数据存储单元(104)的第一输出端,数据存储单元(104)的第二输出端与数据存储器(105)的输入端双向交互连接,数据存储器(105)的另一输入端连接地址产生单元(103);
所述顺序串联的指令存储器(106)、取址单元(107)和译码单元(108)用以产生指令译码控制信号,控制执行单元(109)。
2.根据权利要求1所述的矢量处理器实现FFT运算的系统,其特征在于,所述矢量运算单元(102)中包括4个并行的乘累加单元,每个乘累加单元由顺序串联的乘法器、取反器和加法器构成;第一乘累加单元中的乘法器输出端通过取反器后连接至第三乘累加单元中的加法器输入端,第二乘累加单元中的乘法器输出端通过取反器后连接至第四乘累加单元中的加法器输入端,第三乘累加单元中的乘法器输出端通过取反器后连接至第一乘累加单元中的加法器输入端,第四乘累加单元中的乘法器输出端连接第二乘累加单元中的加法器输入端。
3.根据权利要求2所述的矢量处理器实现FFT运算的系统,其特征在于,所述的数据交换网络(101)用以对即将进行FFT蝶形运算的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}的实部与虚部按照矢量运算单元(102)的要求进行交换,交换得到3个矢量数据:加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w),I(w),R(w)},所述三个矢量数据的结构为{元素3, 元素2, 元素1,元素0},交换网络(101)的输出端用以将加法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的加法器数据接口,将第一乘法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的乘法器的第一数据接口,将第二乘法矢量数据的元素0至元素3依次送至第一至第四乘累加单元的乘法器的第二数据接口。
4.根据权利要求1所述的矢量处理器实现FFT运算的系统,其特征在于,所述的矢量寄存器单元(100)由8个一级矢量寄存器组成,每个一级矢量寄存器分别由2个二级寄存器组成,每个二级寄存器分别由2个三级寄存器组成。
5.一种矢量处理器实现FFT运算的数据交换方法,其特征在于,该方法包括以下步骤:
第1步,根据数据读取指令读入存储器地址指针所对应的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}和蝶形运算的第二个数据{ I(x2),R(x2)};
第2步,通过数据交换网络(101)将读入的旋转因子{I(w),R(w)}、蝶形运算的第一个数据{I(x1),R(x1)}、蝶形运算的第二个数据{ I(x2),R(x2)}按照加法矢量数据{I(x1),R(x1), I(x1),R(x1)}、第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}和第二乘法矢量数据{R(w),I(w), I(w),R(w)}的形式进行矢量数据交换;
第3步,向矢量运算单元(102)的四个加法数据接口依次输入加法矢量数据{I(x1),R(x1), I(x1),R(x1)}中的四个元素,向矢量运算单元的四个第一数据接口依次输入第一乘法矢量数据{I(x2),I(x2), R(x2),R(x2)}中的四个元素,向矢量运算单元的四个第二数据接口依次输出第二乘法矢量数据{R(w),I(w), I(w),R(w)}中的四个元素。
6.一种矢量处理器实现FFT运算的地址生成方法,其特征在于,该方法在每一级蝶形运算后,并行的生成输入数据地址、输出数据地址和旋转因子地址,所述输入数据地址和输出数据地址根据所处FFT蝶形运算的级数不同按照如下方式生成:
在第一级FFT蝶形运算中,输入数据的地址从0开始,按照reverse模式进行更新,即由高位向低位每次进1的方式进行自增;reverse模式下地址更新方式为(dpx.addr &(0xfffe<<fft_stage)) | (reverse(dpx.addr[0:15]+(0x8000>>fft_stage)) & ~(0xfffe<<fft_stage));其中,0xfffe为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“reverse”为按位颠倒运算,0x8000为常数,“>>”为右移运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;在第一级FFT蝶形运算中,输出数据的地址按照从0到7的顺序产生;
在第二级以及以后各级的FFT蝶形运算中,输入数据和输出数据的地址均从0开始,按照一次keep模式、一次nbf模式交替的方式产生;keep模式下地
址保持不变;nbf模式下地址更新的方式为((dpx.addr+dpx.offset) +1)&(~dpx.offset);其中,dpx.offset为地址指针偏移,dpx.addr为地址指针,“~”为按位取反运算,“+”为加法运算,“&”为按位与运算;第二级蝶形运算开始dpx.offset的初值设置为2,之后每完成一级蝶形运算,dpx.offset的取值都需要乘以2后再进行下一级FFT蝶形运算;
所述旋转因子地址按照如下方式生成:
每一级FFT蝶形运算中,旋转因子的读取地址按照twf模式进行更新,twf模式下地址变换方式为(dpx.addr& (0xffff<<fft_stage)) | ((dpx.addr+dpx.offset) & ~(0xffff<<fft_stage)));其中,0xffff为常数,“<<”为逻辑左移,fft_stage为FFT运算的级数,dpx.addr为地址指针,“&”为按位与运算,“+”为相加运算,“~”为按位取反运算,“|”为按位或运算;第一级FFT运算中旋转因子对应的存储器地址指针的偏移值为,其中,fft_stage为FFT运算的级数,在每次进入下一级运算前,偏移值均除以2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611021245.8A CN106776474B (zh) | 2016-11-21 | 2016-11-21 | 矢量处理器实现fft的系统及其数据交换、地址生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611021245.8A CN106776474B (zh) | 2016-11-21 | 2016-11-21 | 矢量处理器实现fft的系统及其数据交换、地址生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776474A true CN106776474A (zh) | 2017-05-31 |
CN106776474B CN106776474B (zh) | 2019-04-16 |
Family
ID=58969497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611021245.8A Active CN106776474B (zh) | 2016-11-21 | 2016-11-21 | 矢量处理器实现fft的系统及其数据交换、地址生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776474B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231626A (zh) * | 2020-10-19 | 2021-01-15 | 南京宁麒智能计算芯片研究院有限公司 | 一种fft处理器 |
CN114579083A (zh) * | 2022-05-09 | 2022-06-03 | 上海擎昆信息科技有限公司 | 一种基于矢量处理器的数据处理装置和方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6282631B1 (en) * | 1998-12-23 | 2001-08-28 | National Semiconductor Corporation | Programmable RISC-DSP architecture |
US6366937B1 (en) * | 1999-03-11 | 2002-04-02 | Hitachi America Ltd. | System and method for performing a fast fourier transform using a matrix-vector multiply instruction |
CN1808419A (zh) * | 2005-07-15 | 2006-07-26 | 北京大学深圳研究生院 | 一种实时快速傅立叶变换电路 |
CN102737009A (zh) * | 2011-04-01 | 2012-10-17 | 中兴通讯股份有限公司 | 一种fft旋转因子产生装置及其应用方法 |
CN103412851A (zh) * | 2013-07-30 | 2013-11-27 | 复旦大学 | 一种高精度低功耗的fft处理器 |
CN102346728B (zh) * | 2010-07-29 | 2016-02-10 | 中兴通讯股份有限公司 | 一种采用矢量处理器实现fft/dft倒序的方法和装置 |
-
2016
- 2016-11-21 CN CN201611021245.8A patent/CN106776474B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6282631B1 (en) * | 1998-12-23 | 2001-08-28 | National Semiconductor Corporation | Programmable RISC-DSP architecture |
US6366937B1 (en) * | 1999-03-11 | 2002-04-02 | Hitachi America Ltd. | System and method for performing a fast fourier transform using a matrix-vector multiply instruction |
CN1808419A (zh) * | 2005-07-15 | 2006-07-26 | 北京大学深圳研究生院 | 一种实时快速傅立叶变换电路 |
CN102346728B (zh) * | 2010-07-29 | 2016-02-10 | 中兴通讯股份有限公司 | 一种采用矢量处理器实现fft/dft倒序的方法和装置 |
CN102737009A (zh) * | 2011-04-01 | 2012-10-17 | 中兴通讯股份有限公司 | 一种fft旋转因子产生装置及其应用方法 |
CN103412851A (zh) * | 2013-07-30 | 2013-11-27 | 复旦大学 | 一种高精度低功耗的fft处理器 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231626A (zh) * | 2020-10-19 | 2021-01-15 | 南京宁麒智能计算芯片研究院有限公司 | 一种fft处理器 |
CN114579083A (zh) * | 2022-05-09 | 2022-06-03 | 上海擎昆信息科技有限公司 | 一种基于矢量处理器的数据处理装置和方法 |
CN114579083B (zh) * | 2022-05-09 | 2022-08-05 | 上海擎昆信息科技有限公司 | 一种基于矢量处理器的数据处理装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106776474B (zh) | 2019-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101782893B (zh) | 可重构数据处理平台 | |
CN106940815B (zh) | 一种可编程卷积神经网络协处理器ip核 | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
CN107807819A (zh) | 一种支持离散数据表示的用于执行人工神经网络正向运算的装置及方法 | |
CN103955447B (zh) | 基于dsp芯片的fft加速器 | |
JP5658556B2 (ja) | メモリ制御装置、及びメモリ制御方法 | |
CN108268422A (zh) | 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构 | |
CN101061460B (zh) | 用于混移运算的微处理器设备和方法 | |
CN104204989B (zh) | 用于选择向量计算的元素的装置和方法 | |
CN107423816A (zh) | 一种多计算精度神经网络处理方法和系统 | |
CN102541749B (zh) | 多粒度并行存储系统 | |
CN101083643A (zh) | 一种低存储器开销的混合基fft处理器及其方法 | |
CN102495721A (zh) | 一种支持fft加速的simd向量处理器 | |
CN106776474A (zh) | 一种矢量处理器实现fft运算的方法及系统 | |
CN103034621B (zh) | 基2×k并行fft架构的地址映射方法及系统 | |
CN102510273A (zh) | 一种有限脉冲响应滤波器 | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
CN104050148A (zh) | 快速傅里叶变换加速器 | |
CN100442847C (zh) | H.264整数变换加速的装置 | |
CN102411557A (zh) | 多粒度并行fft计算装置 | |
CN101615113A (zh) | 一条指令完成一次蝶形运算的微处理器实现方法 | |
JP2007004542A (ja) | 半導体信号処理装置 | |
CN104317554A (zh) | 用于simd处理器的寄存器文件数据读写装置和方法 | |
JPH04316153A (ja) | ニューロプロセッサ | |
CN103677735B (zh) | 一种数据处理装置及数字信号处理器 |
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 |