用于FFT计算的RISC-V扩展架构的制作方法

未命名 07-19 阅读:118 评论:0

用于fft计算的risc-v扩展架构
技术领域
1.本技术实施例涉及嵌入式处理器领域,特别涉及一种用于fft计算的risc-v扩展架构。


背景技术:

2.risc-v是开源指令架构(isa),不受各种组织的约束和影响,规避了arm等国外处理器架构的潜在风险,可实现自主可控,且risc-v可以进行各种指令扩展,具有简洁性、模块化等优点。
3.基于risc-v指令架构的嵌入式处理器芯片正在逐步应用于各工业领域,其中新能源汽车三电系统(电池、电机、电控)需求量大、增长快。用于三电系统控制的处理器芯片需要支持一系列硬件数字信号处理计算,其中最为常用的复杂运算是离散快速傅里叶变换(fft),通过fft将一个信号从时域变换到频域,便于进行频谱分析。
4.fft的计算速度是高性能汽车电子芯片的重要性能指标,提升risc-v指令架构处理器的fft计算速度,一般有两个方法。第一种方法是基于risc-v浮点指令集,针对fft计算特点,在编译器层面进行优化。此方法本质是通过软件对硬件资源的调度优化,缺点是性能提升有限。另一种方法是在主处理器之外附加一个异构处理器,异构处理器利用向量架构实现高度并行计算,此方法本质是为fft定制硬件,缺点是研发成本和生产成本高。


技术实现要素:

5.本技术实施例提供一种用于fft计算的risc-v扩展架构,提升risc-v架构cpu计算离散蝶形fft的计算速度和计算效率。
6.具体的,包括由取指模块、译码模块、执行模块、访存模块和写回模块构成的流水线结构,以及寄存器组和cache;其特征在于,所述cache连接外部存储器memory,用于读写蝶形数据;所述寄存器组分别和所述cache和所述执行模块连接,用于从所述cache读写蝶形数据并送入所述寄存器组,以及将所述执行模块计算结果写入到所述cache中;所述cache包括m个cache组,在初始执行蝶形数据读取指令,且对其中的目标cache组命中失效时,将所述目标cache组中的原始数据移动到其他cache中并设置独占标志位,所述独占标志位用于在fft计算阶段独占对所述目标cache组的缓存控制。
7.可选的,当cpu执行所述蝶形数据读取指令时,逐次从指定内存地址中读取2个32bit位的数据到所述寄存器组中的第一寄存区;内存地址包括所述cache或memory对应的地址;当cpu执行所述蝶形数据运算指令时,根据设置的蝶形运算单元数量从所述第一寄存区中读取目标蝶形数据,并通过所述fft蝶形运算组进行蝶形计算,将输出的蝶形计算结果存放到所述寄存器组中的第二寄存区;当cpu执行所述蝶形数据写入指令时,读取所述第二寄存区中的蝶形计算结果,将其回存到所述内存地址。
8.可选的,所述旋转因子根据fft点数存放在memory的连续存储空间,不同fft点数对应不同数量的旋转因子;输入数据、输出数据和旋转因子为复数,包括实部数据和虚部数据,实部和虚部分别占32bit位;所述第一寄存区和所述第二寄存区包含若干数量的32bit位寄存器,用于存蝶形计算前后数据的实部或虚部;读取待读蝶形数据和存入蝶形计算结果时,直接将数据的实部和虚部同时读取或存放到两个连续的寄存器中。
9.可选的,在读取阶段,所述第一寄存区中的每组蝶形数据按照第一输入数据、第二输入数据和旋转因子的顺序存储;在fft计算阶段,一个蝶形运算单元对应输入一组蝶形数据,输出一组蝶形计算结果,一组蝶形计算结果包括两个频域数据。
10.可选的,所述fft蝶形运算组包括4个并行的所述蝶形运算单元,用于并行执行4组蝶形数据,输出和存入4组频域数据。
11.可选的,所述蝶形运算单元基于两个输入数据将硬件结构分为三级计算结构,一级结构为4组并行浮点乘法器、二级和三级结构分别为4组并行浮点加法器;其中,所述三级计算结构的级与级之间为串行架构,级内为并行结构。
12.可选的,输入数据按照实部和虚部顺序连续存储在memory中的连续地址中;当在所述cache未命中所述待读蝶形数据时,从memory对应的地址空间连续读取包含所述待读蝶形数据在内的目标数量个蝶形数据,并存放在所述cache中;再逐次从所述cache中读取一个输入数据或旋转因子到所述第一寄存区;当在所述cache命中所述待读蝶形数据时,直接读取相应输入数据或旋转因子到所述第一寄存区;其中,所述待读蝶形数据分为输入数据和旋转因子,当未命中输入数据时,从memory读取输入数据;当未命中旋转因子时,从memory读取旋转因子;所述cache中的旋转因子和输入数据分开存储。
13.可选的,基于所述蝶形数据写入指令回存蝶形计算结果时,将所述第二寄存区的输出数据写入到所述cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换,用于下一轮fft计算;下一轮fft计算将回存的输出数据作为新的输入数据,并根据对应的旋转因子进行迭代计算。
14.可选的,基于所述蝶形数据写入指令回存蝶形计算结果时,将所述第二寄存区的输出数据写入到所述cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换;当替换输入数据达到目标数量时,将目标数量个输出数据回存到memory的地址空间,用于下一轮fft计算;下一轮fft计算将回存的输出数据作为新的输入数据,并根据对应的旋转因子进行迭代计算。
15.可选的,所述第一寄存区包含的寄存器数量是参与蝶形计算的所述蝶形运算单元数量的6倍;所述第二寄存区的包含的寄存器数量是参与蝶形计算的所述蝶形运算单元数量的4倍。
16.本技术提供的技术方案带来的有益效果至少包括:通过risc-v指令集扩展针对蝶形fft计算的操作指令,并在cpu系统架构上设置专门处理蝶形数据的扩展单元,实现fft运
算核心蝶形运算单元的指令化和并行化,并优化缓存控制,新增指令和扩展架构可移植和可复用在risc-v架构各类处理器中,在成本可控的情况下通过底层硬件加速fft计算速度,提升处理器对数字信号的处理计算性能。
附图说明
17.图1是8点fft的计算流程图;图2是1024点fft的计算流程图;图3 是risc-v指令集包含的指令格式示意图;图4是本技术实施例提供的用于fft计算的risc-v扩展架构;图5是fft访存控制单元的控制读取蝶形数据的流程示意图;图6是fft蝶形运算组和蝶形运算单元的结构示意图。
具体实施方式
18.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
19.在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
20.本发明针对处理器对蝶形fft的计算速度进行优化和改进,而不影响正常处理其他操作指令的运行。下面基于时间抽取的基2-fft实现时间域到频率域的转换为例说明蝶形fft计算的流程。
21.xm(k)= xm-1(k) + xm-1(j) *
┄┄①
xm(j)= xm-1(k)
ꢀ–ꢀ
xm-1(j) *
┄┄②
j-k = 2m-1
┄┄③
= cos(r)
ꢀ–ꢀ
jsin(r)
┄┄④
上述公式中,将
①②
合称为蝶形运算,w为旋转因子。x和w均为复数。n点fft计算过程是:输入n点复数,反位序调整,经过s轮(n=2s)、每轮n/2对蝶形运算,输出n点复数。说明,

中r的计算方法是将k表示成s位二进制数,将此二进制数左移s-m位,把右边空出的位置补零。
22.图1是8点fft的计算流程图。输入数据为[x0:x7],最终输出数据为[y0:y7],其中的输入数据为时域数据(信号),输出为频域数据(信号),中间过程的[a0:a7]、[b0:b7]和[c0:c7]为中间迭代计算数据。
[0023]
第一步s0,反位序调整,输入[x0:x7],输出[a0:a7]。反位序调整是fft计算中的一个步骤,是为了使输出直接对应输入,在输入之前进行序列调整。反位序调整算法是将序号转换成二进制数,将二进制数的最高有效位到最低有效位的位序进行颠倒排列而得到反位序二进制数,再转换成十进制序号。0-7序号的反位序算法见下表1。
[0024]
表1 反位序调整表
第二步s1,进行第一轮蝶形运算,输入[a0:a7],输出[b0:b7]。其中第一蝶形运算块101有三个输入a0、a1和w,输出两个中间数据b0和b1,输入输出均为浮点复数,有实部和虚部。第二蝶形运算块102同理,其中的表示旋转因子。
[0025]
第三步s2,进行第二轮蝶形运算,输入[b0:b7],输出[c0:c7]。
[0026]
第四步s3,进行第三轮蝶形运算,输入[c0:c7],输出[d0:d7]。n=2s,此处8点fft 中的n=8,s=3,也就是说8点fft需要完成三轮蝶形运算。
[0027]
第五步sl,进行fft的输出,输入[d0:d7],输出[y0:y7],本质没有任何计算,只是方便表述。
[0028]
图2是1024点fft的计算流程图。输入为[x0:x1023],输出为[y0:y1023],经过10轮、每轮512对蝶形运算。其中的构建过程省略,更高点数的fft与此类似。
[0029]
通过分析fft公式、图1和图2两个具体的fft计算过程,发现fft运算具有模块化、并行化的特点,模块化指核心模块是蝶形运算,并行化指每一轮蝶形运算中所有的运算是完全数据并行的。结合fft计算特点,遵循处理器架构设计思想“使用抽象简化设计”、“加速经常性事件”、“通过并行提高性能”以及“优化存储层次”,本发明提出扩展指令和对应扩展架构。
[0030]
risc-v指令架构体系允许在遵循risc-v指令基本规则的基础上进行指令集扩展,因为指令架构体系(isa)是计算机硬件与系统软件之间的接口,所以扩展的指令集本质上增加了硬件的操作接口。
[0031]
参考图3是risc-v指令集包含的指令格式,从功能分类,将其分为r型指令、i型指令、s型指令、b型指令、u型指令和j型指令。其中的opcode表示指令操作码,imm表示代码立即数,func3和func7代表对应的功能,rs1和rs2分别表示源寄存器,通常用于表示读取数据的寄存器,rd表示目标寄存器,通常用于表示存数据的寄存器。
[0032]
基于risc-v指令集的特性,本方案构建出专门用于处理fft的fft计算指令,并设计出用于fft计算的risc-v扩展架构,如图4所示,该扩展架构用于嵌入式cpu,包括取指模块(if模块)、译码模块(id模块)、执行模块(ex模块)、访存模块(mem模块)、写回模块(wb模块)、寄存器组(regs)和cache。其中的 cache连接外部memory,共同构成系统或处理器的内存,用于保存和读写蝶形数据。取指模块、译码模块、执行模块、访存模块和写回模块构成的流水线结构,寄存器组分别和cache和执行模块连接,用于从cache读写蝶形数据并送入寄存器组,以及将执行模块计算结果写入到cache中。
[0033]
if模块用于读取fft计算指令。id模块内置fft指令译码单元,该fft指令译码单元用于对fft计算指令进行译码。访存模块410内置fft访存控制单元,fft访存控制单元用于
控制cache、寄存器组和memory中蝶形数据的读取及缓存。执行模块内置fft蝶形运算组,该fft蝶形运算组基于regs中的蝶形数据执行fft蝶形运算。也就是图1中101标号的计算过程。需要说明的是,一组蝶形数据包括两个浮点型输入数据和一个浮点型旋转因子,每次蝶形计算都输入一组蝶形数据,输出相应的中间数据或最终的频域数据。
[0034]
本方案中针对fft计算过程构建三条fft计算指令,包括i型蝶形数据读取指令(float load butterfly data,下述fldb)、s型蝶形数据写入指令(float store butterfly data,下述fsbd)和r型蝶形数据运算指令(float butterfly operation,下述fbo.s),这些指令基于risc-v指令集扩展构建,其数据组成结构参考图3中的对应形式。基于底层指令集构建的计算指令可以控制底层硬件结构的工作状态,相比于上层软件的操作方式,其执行效率和速度都答复提升,稳定性也大大提高。
[0035]
在risc-v体系结构中,浮点寄存器与整数寄存器是独立的,一般为32个32bit寄存器空间,命名为f0-f31,f0-f31共同组成本技术实施例中所说的regs。risc-v遵循“寄存器-寄存器”设计原则,即所有参与计算的数据取自寄存器、存往寄存器,寄存器和内存之间数据搬移需要独立的指令。
[0036]
flbd指令的作用是将内存地址[rs1+imm]中的32bit数据读取到rd指定的浮点寄存器。内存地址包括cache或memory对应的地址。此指令只在fft计算时使用,只用于从内存向寄存器读取蝶形数据(包括中间计算过程输入的数据)。特别需要说明的事,虽然flbd指令和rv32f指令集中的flw指令都是数据读取的功能,但是本质不一样,因为fldb指令增加了对缓存的优化控制,也就是后续读写设计的缓存过程。此外fldb指令每次读取的是2个32bit数据,而flw指令只能单次读取。cache和memory中的蝶形数据是复数,所以每个输入数据和旋转因子都包含实部和虚部,且每种数据分别按照实部和虚部顺序分开存储,每个实部和虚部为连续存储,各自都占32bit位。
[0037]
当cpu执行flbd指令时,将逐次从指定内存地址中读取2个32bit位的数据到寄存器组中的第一寄存区。逐次读取的次数基于fbo.s指令设置的蝶形运算单元数目决定,参见后续说明。第一寄存区是regs中若干存入蝶形数据的浮点寄存器的总称,一组蝶形数据包含两个输入数据和一个旋转因子,共须6个寄存器,当读取m组蝶形数据时,第一寄存区则包含6m个寄存器。本方案以f0-f23为例进行说明,如图5所示,第一寄存区505中的蝶形数据按照“a0-实部、a0-虚部、a1-实部、a1-虚部、w-实部、w-虚部、a2
┈”
这样的顺序在浮点寄存器中顺序排列,当然在读取执行蝶形运算时也按照这个顺序执行。
[0038]
fbo.s指令的作用是执行蝶形运算,根据r型指令可知,rs1指定输入数据起始浮点寄存器,rs2指定蝶形运算单元数量,也就是参与fft计算的蝶形运算单元,rd指定输出数据起始浮点寄存器。
[0039]
当cpu执行fbo.s指令时,根据rs2指定的蝶形运算单元数量从第一寄存区中读取目标蝶形数据,并通过fft蝶形运算组进行蝶形计算,将输出的蝶形计算结果存放到寄存器组中的第二寄存区,也就是rd指定的寄存器。
[0040]
第二寄存区是regs中存放输出数据的浮点寄存器的总称,一组输出数据包括两个复数,也即是4个32bit浮点寄存器。
[0041]
例如,fbo.s指令的rs1=3、rs2=1、rd=9,表明执行1个蝶形运算,1*3*2=6个输入浮点数(3个复数对应6个浮点数)存放在[f3:f8],6个输出浮点数存放在[f9:f12]。再如,rs1=
0、rs2=4、rd=0,表明执行4个蝶形运算,4*3*2=24个输入浮点数存放在[f0:f23],24个输出浮点数存放在[f0:f15]。
[0042]
此处需要特别说明的是,第一寄存区和第二寄存区是在不同阶段对regs中若干寄存器的总称,当regs包含寄存器数量较多,且输入蝶形数据较少时,第一和第二寄存器可以不存在交叉,如[f3:f8]和[f9:f12]的位置关系,否则就存在交叉命名的情况,如[f0:f23]和[f0:f15],但因为发生在不同的时间线上,所以并不影响指令的运行。
[0043]
fsbd指令的作用是将rs2指定的浮点寄存器中的数据存放到内存地址[rs1+imm]。此处的rs2指定的寄存器就是fbo.s指令中rd指定的寄存器,同为第二寄存器包含的寄存器。
[0044]
所以当cpu执行蝶形数据写入指令时,读取第二寄存区中的蝶形计算结果,将其回存到内存地址。同样需要强调的是,虽然这个指令和rv32f中的fsw指令同样实现回存的功能,但是本质不一样,fsdb对应于flbd指令,每次写入2个32bit数据,也就是一次回存一个输出数据。相比于fsw指令的读写效率翻倍。
[0045]
此外,本方案设计三个独立fft计算指令的主要目的是为了区分正常的数据处理过程,因为fft计算指令对应于fft指令译码单元、fft访存控制单元和fft蝶形运算组,只在fft计算时使用。而fsw指令和flw指令则对应于普通数据的操作流程,让本设计的扩展架构根据指令有选择的执行ftt计算。
[0046]
图5描述了fft访存控制单元的机制,以常用的1024点fft为例进行说明,蝶形数据是1024个信号数据(时域)和512个旋转因子,输出是1024个信号数据(频域),均为浮点复数,即每个数据有实部和虚部2个浮点数,每个浮点数采用32bit表示。输入的信号数据可以是通过传感器实时采样获得,放在memory的某一个地址段,如memory中输入数据存放区501所示。输入的旋转因子根据公式

可知,只要确定了fft点数,对应的旋转因子可以确定。考虑到三角函数的计算量大,且实际操作中fft的点数取值一般为512点、1024点、2048点、4096点,所以提前将这些点数对应的旋转因子表作为程序代码的一部分,程序启动后放在memory的某一个连续地址段 ,如memory中旋转因子数据存放区502所示。
[0047]
输入数据存放区和旋转因子存放区分别是memory中连续的地址空间,前者[a0:an-1]有1024*2=2048个32bit数据,后者[:]有512*2=1024个32bit数据。
[0048]
图6是fft蝶形运算组和蝶形运算单元的结构示意图,本实施例中fft蝶形运算组包括4个并行的蝶形运算单元,用于并行执行4组蝶形数据,输出和存入4组频域数据。也就是说fbo.s指令可以设置1-4个蝶形运算单元参与并行计算。以4个蝶形运算单元同时参与说明,[a0:a7]以及对应的旋转因子同时参与fft计算,8点fft只需一次既可读取所有蝶形数据。
[0049]
本实施例中将蝶形运算单元基于两个输入数据将硬件结构分为三级计算结构,一级结构为4组并行浮点乘法器、二级和三级结构分别为4组并行浮点加法器。其中,三级计算结构的级与级之间为串行架构,级内为并行结构。下面予以解释说明。
[0050]
假设两个输入数据x1= a+bj,x2= c+dj,旋转因子w= e+fj,基于x1和x2的蝶形运算公式的变形后对应如下:y1=x1+w*x2=(a+bj)+(e+fj)(c+dj)=(a+ec-df)+(b+ed+fc)jy2=x1-w*x2=(a+bj)-(e+fj)(c+dj)=(a-ec-fd)+(b-ed-fc)j
根据y1和y2展开对应关系可知,完成最基本的并行计算至少需要四个乘法器,用于计算ec、df、ed和 fc的值(两个数相乘),这也是蝶形计算的cc1阶段;此外还需要四个加法器来计算cc1阶段ec-df、ed+fc、-ec-fd和-ed-fc的值(两个数相加/减),这是蝶形计算的cc2阶段;在cc3阶段还需要4个加法器,用于计算cc2阶段中a+ec-df、b+ed+fc、a-ec-fd和b-ed-fc的值。这其中每个阶段的乘法器和加法器是并行计算的,级与级之间是串行的,这样的设计能够利用成熟组件实现大带宽的并行性,既不使用过多的器件导致硬件复杂臃肿,也不减少器件而导致复用产生过多时延。
[0051]
cache是处理器和memory的桥梁,处理器对cache的读写速度一般是cache对memory读写速度的百倍。逻辑上说,cache是memory的一个动态子集,是memory一部分地址空间的实时镜像。所以本方案在fft计算过程中尽量一次性多的从memory搬移蝶形数据到cache中,以提高读写效率。
[0052]
图5所示,本实施例中cache每次从memory一次性读取256个信号数据和256个旋转因子数据,对应cache中的输入数据存储区503和旋转因子存储区504,这是综合考虑了主流cache的大小和调度策略。说明,256个信号数据对应所需的旋转因子是128个,这里读取256个旋转因子原因是从指令层面无法区分读取的是数据还是旋转因子,只能统一处理,并不影响效率,多读取的旋转因子供下一批计算使用。
[0053]
在执行flbd指令过程,当cpu在执行cache未命中待读蝶形数据时,将从memory对应的地址空间连续读取包含待读蝶形数据在内的目标数量个蝶形数据,并存放在cache中。之后再逐次从cache中读取一个输入数据或旋转因子到第一寄存区。
[0054]
当在cache命中待读蝶形数据时,直接读取相应输入数据或旋转因子到第一寄存区。
[0055]
事实上,上述cache未命中往往表示fft刚开始,cache必然读取不到待读蝶形数据,即cache失效,或者上一次读取的所有输入数据[a0:a254]已执行完毕,预示需要再次从memory搬运新数据。cache命中表示输入数据或旋转因子数据尚未全部执行完。其中的待读蝶形数据分为输入数据和旋转因子,而且menory和cache中的旋转因子和输入数据分开存储,当未命中输入数据时,从memory读取输入数据;当未命中旋转因子时,从memory读取旋转因子。
[0056]
基于上述实施例内容,当运行flbd指令时,如果待读蝶形数据p不在cache中(即cache失效),fft访存控制单元将p及其后的254个数据(总计255个数据)一次性读取到cache。如果被读数据p在cache中(即cache命中),则将数据p从cache读取到flbd指令指定的寄存器。fft开始后,将f0-f23数据通过flbd指令逐一读取到regs中。flbd指令读取a0数据,cache失效(因为此时所有数据都在memory中,还没有读取到cache),从memory将a0-a255一次性读取到cache,从cache将a0读取到regs的f0和f1中,指令完成。flbd指令读取a1数据,cache命中(因为此时a0-a255都在cache中),从cache将a1读取到regs的f2和f3中,指令完成。fldb指令读取数据,cache失效(因为此时w数据没有在cache中),从memory将-一次性读取到cache,从cache将读取到regs的f4和f5中,指令完成。后续读取的f6-f23均可直接从cache读取,以此类推。当需要读取a256数据或时,需要再次从memory读取到cache,此后类推。如上方法的本质是充分利用fft的输入数据在内存中连续分布和fft计算特点,memory-》cache少次大量搬运,cache-》regs按需搬运,以提高计算
效率。
[0057]
在一种可能的实施方式中,在输出数据回存阶段,基于蝶形数据写入指令回存蝶形计算结果时,将第二寄存区的输出数据写入到cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换。当替换输入数据达到目标数量时,将目标数量个输出数据回存到memory的地址空间,用于下一轮fft计算。下一轮fft计算将回存的输出数据作为新的输入数据,并根据对应的旋转因子进行迭代计算。
[0058]
参考图5中的regs,将数据从regs写回到cache和memory中。扩展访存控制将fsbd所用的cache空间和flbd所用的cache空间保持一致,这个控制机制是考虑到蝶形数据的输入数据只会被使用一次,输出数据作为下一级的输入也只会被使用一次,也就是说,cache中的数据不需要在cache中驻留,可以直接被“改写”或“替换”。与flbd同样的思路,为了提高cache写memory的效率,只有当cache中的输出数据积累到256个时,才一次性的写入memory。
[0059]
当然,在一些实施例中,若fft点数不高或cache本身较大,可以将fsbd指令写入cache的所有数据都保留在cache中,也就是将第二寄存区的输出数据写入到cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换,因为这些写入的数据待到下一轮蝶形运算时又会作为输入数据读入。
[0060]
cache包括m个cache组,在初始执行蝶形数据读取指令,且对其中的目标cache组命中失效时,将目标cache组中的原始数据移动到其他cache中,并设置独占标志位。这样在后续执行过程中能够一直使用该目标cache组,在完成所有fft计算后清除独占位,系统进入正常工作状态。
[0061]
以上对本发明的较佳实施例进行了描述;需要理解的是,本发明并不局限于上述特定实施方式,其中未尽详细描述的设备和结构应该理解为用本领域中的普通方式予以实施;任何熟悉本领域的技术人员,在不脱离本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例,这并不影响本发明的实质内容;因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。

技术特征:
1.一种用于fft计算的risc-v扩展架构,包括由取指模块、译码模块、执行模块、访存模块和写回模块构成的流水线结构,以及寄存器组和cache;其特征在于,所述cache连接外部存储器memory,用于读写蝶形数据;所述寄存器组分别和所述cache和所述执行模块连接,用于从所述cache读写蝶形数据并送入所述寄存器组,以及将所述执行模块计算结果写入到所述cache中;所述cache包括m个cache组,在初始执行蝶形数据读取指令,且对其中的目标cache组命中失效时,将所述目标cache组中的原始数据移动到其他cache中并设置独占标志位,所述独占标志位用于在fft计算阶段独占对所述目标cache组的缓存控制;所述取指模块用于读取fft计算指令;fft计算指令基于risc-v指令集扩展构建,包括i型蝶形数据读取指令、s型蝶形数据写入指令和r型蝶形数据运算指令;所述译码模块内置fft指令译码单元,对fft计算指令进行译码;所述访存模块内置fft访存控制单元,控制所述cache、寄存器组和memory中蝶形数据的读取及缓存;所述执行模块内置fft蝶形运算组,基于寄存器组中的蝶形数据执行fft蝶形运算;一组蝶形数据包括两个浮点型输入数据和一个浮点型旋转因子。2.根据权利要求1所述的用于fft计算的risc-v扩展架构,其特征在于,当cpu执行所述蝶形数据读取指令时,逐次从指定内存地址中读取2个32bit位的蝶形数据到所述寄存器组中的第一寄存区;内存地址包括所述cache或memory对应的地址;当cpu执行所述蝶形数据运算指令时,根据设置的蝶形运算单元数量从所述第一寄存区中读取目标蝶形数据,并通过所述fft蝶形运算组进行蝶形计算,将输出的蝶形计算结果存放到所述寄存器组中的第二寄存区;当cpu执行所述蝶形数据写入指令时,读取所述第二寄存区中的蝶形计算结果,将其回存到所述内存地址。3.根据权利要求2所述的用于fft计算的risc-v扩展架构,其特征在于,所述旋转因子根据fft点数存放在memory的连续存储空间,不同fft点数对应不同数量的旋转因子;输入数据、输出数据和旋转因子为复数,包括实部数据和虚部数据,实部和虚部分别占32bit位;所述第一寄存区和所述第二寄存区包含若干数量的32bit位寄存器,用于存蝶形计算前后数据的实部或虚部;读取待读蝶形数据和存入蝶形计算结果时,直接将数据的实部和虚部同时读取或存放到两个连续的寄存器中。4.根据权利要求3所述的用于fft计算的risc-v扩展架构,其特征在于,在读取阶段,所述第一寄存区中的每组蝶形数据按照第一输入数据、第二输入数据和旋转因子的顺序存储;在fft计算阶段,一个蝶形运算单元对应输入一组蝶形数据,输出一组蝶形计算结果,一组蝶形计算结果包括两个频域数据。5.根据权利要求2所述的用于fft计算的risc-v扩展架构,其特征在于,所述fft蝶形运算组包括4个并行的所述蝶形运算单元,用于并行执行4组蝶形数据,输出和存入4组频域数据。6.根据权利要求5所述的用于fft计算的risc-v扩展架构,其特征在于,所述蝶形运算单元基于两个输入数据将硬件结构分为三级计算结构,一级结构为4组并行浮点乘法器、二级和三级结构分别为4组并行浮点加法器;其中,所述三级计算结构的级与级之间为串行架构,级内为并行结构。7.根据权利要求3所述的用于fft计算的risc-v扩展架构,其特征在于,输入数据按照
实部和虚部顺序连续存储在memory中的连续地址中;当在所述cache未命中所述待读蝶形数据时,从memory对应的地址空间连续读取包含所述待读蝶形数据在内的目标数量个蝶形数据,并存放在所述cache中;再逐次从所述cache中读取一个输入数据或旋转因子到所述第一寄存区;当在所述cache命中所述待读蝶形数据时,直接读取相应输入数据或旋转因子到所述第一寄存区;其中,所述待读蝶形数据分为输入数据和旋转因子,当未命中输入数据时,从memory读取输入数据;当未命中旋转因子时,从memory读取旋转因子;所述cache中的旋转因子和输入数据分开存储。8.根据权利要求7所述的用于fft计算的risc-v扩展架构,其特征在于,基于所述蝶形数据写入指令回存蝶形计算结果时,将所述第二寄存区的输出数据写入到所述cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换,用于下一轮fft计算;下一轮fft计算将回存的输出数据作为新的输入数据,并根据对应的旋转因子进行迭代计算。9.根据权利要求7所述的用于fft计算的risc-v扩展架构,其特征在于,基于所述蝶形数据写入指令回存蝶形计算结果时,将所述第二寄存区的输出数据写入到所述cache中对应输入数据的地址空间,将完成该轮fft计算的输入数据进行替换;当替换输入数据达到目标数量时,将目标数量个输出数据回存到memory的地址空间,用于下一轮fft计算;下一轮fft计算将回存的输出数据作为新的输入数据,并根据对应的旋转因子进行迭代计算。10.根据权利要求9所述的用于fft计算的risc-v扩展架构,其特征在于,所述第一寄存区包含的寄存器数量是参与蝶形计算的所述蝶形运算单元数量的6倍;所述第二寄存区的包含的寄存器数量是参与蝶形计算的所述蝶形运算单元数量的4倍。

技术总结
本申请公开用于FFT计算的RISC-V扩展架构,涉及处理器领域,包括取指、译码、执行、访存和写回模块,寄存器组和Cache;取指模块内置FFT指令译码单元,对FFT计算指令进行译码;访存模块内置FFT访存控制单元,控制Cache、寄存器组和Memory中蝶形数据的读取及缓存;执行模块内置FFT蝶形运算组,基于寄存器组中的蝶形数据执行FFT蝶形运算。在CPU系统架构上设置专门处理蝶形数据的扩展单元和指令,实现FFT蝶形运算指令化和并行化,通过底层硬件加速FFT计算速度,提升处理器对数字信号的计算性能。提升处理器对数字信号的计算性能。提升处理器对数字信号的计算性能。


技术研发人员:郑茳 肖佐楠 匡启和 陈石 施彦 王耀
受保护的技术使用者:无锡国芯微高新技术有限公司
技术研发日:2023.06.13
技术公布日:2023/7/17
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐