本发明涉及基于risc-v架构的处理器,尤其是涉及支持浮点三角函数和双曲函数等超越函数的risc-v处理器架构下的指令集扩展方法及装置。
背景技术:
1、risc-v指令集是基于精简指令集(risc)基础上开发的开源指令集架构(instruction set architecture,isa),是个新兴的、完全开放的、标准的、能够支持各种应用的全新指令集。risc-v的指令集包括基础指令集和扩展指令集两类。risc-v指令集架构被定义为一个基础指令集和若干可选扩展指令集的组合。基础指令集为整数指令集rv32i与rv64i,分别提供32位与64位的地址空间;其他的可选指令集包括整数乘除运算(m)、原子操作(a)、单/双浮点运算(f/d)、压缩指令(c)等。由于risc-v在可定制性与可扩展性等方面的优势,能够高效、迅速而低成本地完成各自领域中地系统级任务。risc-v架构在设计之初就留出了足够的可编码空间来支持自定义指令集扩展,用户可以根据特定的需求设计自定义扩展指令,通过灵活选择不同的模块组合或者进行扩展,构建适用于任何一个领域的微处理器,比如针对高级系统应用的高性能cpu,或是针对面积小、低功耗的嵌入式mcu等。
2、随着计算机系统中浮点运算操作的需求日益增多,应用范围从人工智能、电磁散射理论到图像处理、fft计算、特征值计算等。为了支持和加速这些应用,需要能够产生高吞吐量的高性能计算设备。浮点处理器(floating point unit,fpu)极大地提高了这些高计算应用的性能,同时作为一种加速器,与整数流水线并行工作,并从主处理器分担大型计算、高延迟的浮点指令。基于risc-v的浮点扩展指令有浮点加法、浮点乘法、浮点乘累加、浮点除法、浮点平方根、浮点转换以及浮点数比较等基本操作的指令。
3、目前对于有三角函数、双曲函数等超越函数的高级语言程序,如果目标isa支持超越函数等的机器指令(如x86),编译器则会通过将相关代码编译成isa支持的机器指令来优化。但是在传统risc-v指令集中,没有针对这类超越函数的指令,如果需要在高级应用程序中使用到三角函数,那么risc-v gcc(gnu compiler collection)会编译出大量的基础整型指令去执行例如一条三角函数,导致编译后的指令代码体积大、计算延迟长等问题。
4、另外,现有的cordic ip中,浮点数都以定点数据类型表示,在高级语言应用程序中,定点数据格式需要根据不同应用需求设置整数位和小数位的位宽,在有限的位宽下,表示的数据范围较小,精度不高,缺乏统一的标准。而基于ieee-754标准的浮点数据是最广泛使用的浮点数据类型,相比定点数据类型,在相同的数据位宽下,浮点数能表示的数据范围远远大于定点数表示的数据范围,相对精度也比定点数要高。同时目前高级应用程序中,也都采用ieee-754标准,所以需要设计一个能支持ieee-754标准浮点数输入与浮点数输出的cordic运算模块。
技术实现思路
1、针对现有技术中存在的问题,本发明提供了一种基于risc-v的浮点超越函数指令集扩展方法与装置,以实现一种基于risc-v指令集架构,在支持浮点运算指令集rvf/d的基础上,还支持浮点超越函数扩展指令。具体而言,本发明提供了以下技术方案:
2、一方面,本发明提供了基于risc-v浮点超越函数指令集扩展装置,所述装置包括:
3、基于risc-v架构的处理器;所述处理器包括程序计数器、译码模块、多个执行单元、加载存储模块、寄存器堆、指令存储器和数据存储器;
4、所述多个执行单元包括cordic单元和fpu单元;
5、所述多个执行单元接收译码模块发送的指令控制信号,以执行超越函数的cordic浮点运算;
6、所述cordic单元采用并行的浮点融合乘加器、浮点加法器、浮点乘法器形成迭代结构,迭代结构负责完成迭代运算;通过两个并行的浮点乘法器形成缩放结构,缩放结构负责完成缩放运算;所述指令控制信号基于扩展指令集得到。
7、优选地,所述迭代结构具体为:2个并行的浮点融合乘加器,1个浮点乘法器,1个浮点加法器。
8、优选地,所述cordic单元迭代计算方式为:
9、(1)
10、(2)
11、(3)
12、(4)
13、(5)
14、其中,,代表第i次迭代运算后的坐标值,代表第i次迭代运算后的剩余角度值,为权重因子,为比例因子,为旋转角度,系数根据模式m进行更新;m表示模式,,依次对应于圆坐标系、线性坐标系和双曲坐标系。
15、优选地,对变量进行缩放后得到最终的输出值,,:
16、(6)
17、(7)
18、(8)
19、其中,变量、、分别表示变量在迭代r次后收敛的值,表示比例因子迭代r次后的值。
20、优选地,公式(1)与公式(2)中和的迭代运算,执行完整的浮点乘加操作;
21、公式(3)与公式(4)中和的迭代运算,分别执行单一浮点加法和浮点乘法运算。
22、公式(6)与公式(7)中和的缩放运算,执行并行的浮点乘法运算。
23、优选地,所述扩展指令集为浮点类型的指令,归入到risc-v浮点指令集rvf的r-type指令;所述扩展指令集中的指令均为单操作数指令。
24、优选地,所述指令集中,rs1字段表示源操作数1的地址,rs2字段表示源操作数2的地址;rd字段表示目的寄存器地址;funct7、funct3字段表示不同的指令,opcode字段表示指令类型操作码;
25、在译码阶段,译码模块根据程序计数器发送的指令,将funct7、funct3和opcode字段拆出并进行逐个对比;当确认为是本发明提出的超越函数浮点运算指令后,形成控制逻辑指令,发送至cordic单元;所述控制逻辑指令对应具体的函数功能。
26、优选地,由于扩展指令集中的指令设置为单操作数指令,则源操作数2设置为0。
27、优选地,所述译码模块还包括控制信号单元,所述控制信号单元接收所述指令控制信号,并向所述cordic单元发起执行请求,同时将所述控制逻辑指令发送至多路选择器mux;
28、cordic单元基于指令控制信号执行对应的函数运算,并将运算结果发送至多路选择器mux;
29、多路选择器mux基于指令控制信号,将cordic单元的输出结果作为多路选择器mux的输出结果,发送至加载存储模块。
30、优选地,在写回阶段,cordic浮点运算的计算结果写回至寄存器堆中的浮点寄存器中。
31、优选地,译码模块基于rs1字段的值,从寄存器堆中的浮点寄存器取出对应的浮点数据,输入至cordic单元,以执行浮点函数运算。
32、优选地,根据权利要求1所述的装置,其特征在于,程序计数器与指令存储器之间进行数据交互,程序计数器将从指令存储器获取的数据发送至译码模块;加载存储模块将多路选择器mux输出的运算结果发送至数据存储器或寄存器堆中。
33、另一方面,本发明还提供了基于risc-v浮点超越函数指令集扩展方法,所述方法应用于如上所述的基于risc-v的浮点超越函数指令集扩展装置来实现,所述方法包括:
34、根据超越函数的算术类型,确定扩展指令为浮点的数据类型,设置opcode编码字段设置为1010011,在表1、表2中的opcode设置相同;根据超越函数包含的不同功能,设置funct7、funct3字段值;根据表1,将函数sin、cos、tan、artan等四种三角函数类型的funct7字段设置为1000000,funct3字段设置根据二进制编码格式,从000到011;将函数sinh、cosh、tanh、artanh、exp、ln等六种函数的funct7字段设置为1000100,funct3字段设置根据二进制编码格式,从000到101,均在表2中体现,这样设置的好处在于简化译码模块的逻辑;根据risc-v指令集的指令格式,对扩展指令进行编码,用于构建浮点超越函数求解的risc-v的扩展指令集。
35、优选地,所述源操作数地址由rs1字段表示,所述功能类型由funct3、funct7和opcode字段表示。
36、与现有技术相比,本方案至少具有以下有益效果:
37、1、指令数量少。本方案通过自定义基于risc-v架构的浮点超越函数指令集,相较于risc-v架构基础指令集而言,大大压缩了浮点超越函数计算的指令数量,原先一条sin函数,需要使用63条整型指令去实现,指令压缩后,只需要一条指令即可,提高了软件编译速度。
38、2、适配高级应用程序设计。本方案通过设计浮点超越函数指令以及浮点cordic单元,完全支持ieee-754标准的浮点数据类型,而该标准的浮点数据类型,是目前最广泛通用的标准,在很多高级程序语言,如c语言中可以直接定义此类浮点数。
39、3、计算精度高,计算范围大。本方案中采用cordic算法,内部数据的处理均使用ieee-754浮点标准,此浮点标准对比定点数据类型,能表示的数据范围更大,计算精度也更高,自定义扩展指令集,从而达到risc-v处理器高精度计算三角函数及双曲函数的目的。
1.基于risc-v浮点超越函数指令集扩展装置,其特征在于,所述装置包括:
2.根据权利要求1所述的装置,其特征在于,所述cordic单元的迭代运算方式为:
3.根据权利要求1所述的装置,其特征在于,所述迭代结构具体为:2个并行的浮点融合乘加器,1个浮点乘法器,1个浮点加法器。
4.根据权利要求1所述的装置,其特征在于,程序计数器与指令存储器之间进行数据交互,程序计数器将从指令存储器获取的指令数据发送至译码模块;加载存储模块将多路选择器mux输出的运算结果发送至数据存储器或寄存器堆。
5.根据权利要求1所述的装置,其特征在于,所述扩展指令集为浮点类型的指令,归入到risc-v浮点指令集rvf的r-type指令;所述扩展指令集中的指令均为单操作数指令。
6.根据权利要求1所述的装置,其特征在于,所述扩展指令集中,rs1字段表示源操作数1的地址,rs2字段表示源操作数2的地址,rd字段表示目的寄存器地址;funct7、funct3字段表示不同的指令,opcode字段表示指令类型操作码;
7.根据权利要求6所述的装置,其特征在于,所述译码模块输出指令控制信号,并向多个执行单元发起执行请求,同时将所述指令控制信号发送至多路选择器mux,其中超越函数对应的指令控制信号只能通过cordic单元识别;
8.根据权利要求7所述的装置,其特征在于,所述扩展指令集中的指令均为浮点指令,译码模块基于rs1字段的值,从寄存器堆中的浮点寄存器取出对应的数据,输入至cordic单元,以执行函数运算。
9.根据权利要求7所述的装置,其特征在于,在写回阶段,cordic浮点运算的计算结果写回至寄存器堆中的浮点寄存器中。
10.基于risc-v浮点超越函数指令集扩展方法,其特征在于,所述方法应用于如权利要求6-8任一所述的基于risc-v浮点超越函数指令集扩展装置来实现,所述方法包括: