浮点运算单元
文献发布时间:2023-06-19 19:28:50
技术领域
本发明涉及集成电路技术领域,特别涉及一种浮点运算单元。
背景技术
现有CMOS电路存在如下缺陷:过去长期的一段时间中,由于算力需求不高,将存储部分和计算部分拆分开来设计的传统冯诺依曼架构占据主流;人工智能的发展让不同模块间的通信成本变得显著,如果沿用传统的冯诺依曼架构会带来“内存墙”,即高功耗的问题;也就是,传统架构无法限制功耗显著的升高。
存算一体化芯片是指一种在存储器内或存储器附近执行运算的芯片。由于更低功耗和更小芯片面积等优点,存算一体化芯片日益受到业界关注。但是目前的存内计算电路实现复杂,低精度。
发明内容
本发明的目的在于提供一种浮点运算单元,以解决现有的存内计算电路实现复杂的问题。
本发明的目的还在于提供一种浮点运算单元,以解决现有的存内计算电路低精度的问题。
为解决上述技术问题,本发明提供一种浮点运算单元,包括:
存内计算电路,被配置为对输入数据和/或存储数据进行逻辑运算,以形成第一计算结果,其中所述输入数据和存储数据表征浮点数;以及
浮点计算电路,被配置为对输入数据和/或第一计算结果进行浮点运算,以形成第二计算结果。
可选的,在所述的浮点运算单元中,还包括:
输入模块,被配置为向存内计算电路和/或浮点计算电路提供输入数据;
输出模块,被配置为输出存内计算电路的第一计算结果和/或浮点计算电路的第二计算结果。
可选的,在所述的浮点运算单元中,所述输入数据和所述存储数据经过存内计算电路的计算单元进行逻辑运算处理后,经过后续的浮点计算电路计算;
所述浮点计算电路计算包括并行的浮点数乘法操作;以及
所述逻辑运算包括与、或、非、与非、或非、与或非、异或和同或中的一种或多种。
可选的,在所述的浮点运算单元中,浮点数包括:1bit的符号位、n bit的指数位和m bit的尾数位,以存储±1.xx*2^x格式的数字;以及
并行的浮点数乘法操作包括,将符号位异或,将指数位相加,将尾数位相乘,以及根据符号位异或、指数位相加和尾数位相乘的结果进行归一化。
可选的,在所述的浮点运算单元中,存内计算电路对输入数据的每一位和存储数据的每一位进行一一对应的逻辑运算,在每个周期对两者的符号位进行异或,其他位进行与操作;
浮点运算电路对输入数据和/或存内计算电路每个周期的计算结果进行处理,将输入数据和/或计算结果的指数位进行移位寄存,输入数据和/或计算结果的尾数位进行移位相加,经过完整计算周期的运算后归一化,输出浮点数相乘的结果。
可选的,在所述的浮点运算单元中,存内计算电路的计算单元被配置为进行符号位异或,以替代浮点计算电路浮点数乘法操作中的符号位异或操作。
可选的,在所述的浮点运算单元中,
第一浮点数存储在存内计算电路中,并且第二浮点数的第一部分由输入模块输入至存内计算电路,并且第二浮点数的第二部分和第三部分由输入模块输入至浮点计算电路;
在每个周期输入第二浮点数的n位,第二浮点数的第一部分在存内计算电路的计算单元内与第一浮点数进行逻辑运算,得到第一计算结果;第二浮点数的第二部分和第三部分同步延迟;以及
存内计算电路的第一计算结果存储在浮点运算电路内,并在第二浮点数每一位运算完成后进行归一化,以得到第二计算结果。
可选的,在所述的浮点运算单元中,将bf16分为两个8位数据,便于在存内计算电路进行存储和运算;
将浮点数fp16以2x8格式进行存储运算;
将浮点数fp32以4x8格式进行存储运算;以及
第二浮点数的第一部分为符号位,第二浮点数的第二部分为指数位,第二浮点数的第三部分为尾数位。
可选的,在所述的浮点运算单元中,浮点计算电路包括:
移位寄存器,被配置为将第二浮点数的第二部分进行移位寄存,得到第一结果;
移位加法器,被配置为将第二浮点数的第三部分与计算结果进行移位相加,得到第二结果;以及
加法器,被配置为将第一结果、第二结果与第一计算结果进行与操作,得到第二计算结果,其进位信号确定对应归一化操作。
可选的,在所述的浮点运算单元中,
其中第二计算结果的低位由符号位和尾数位组成,第二计算结果的高位由指数位组成;
8个周期中,由于存内计算电路中bf16存储格式为2x8,每周期输入2位输入数据进行计算,经过三个计算周期的间隔输出到浮点运算电路进行处理;以及
由于尾数位的特殊性,输入数据的低位提前一个周期置为高电平作为浮点前的1;
尾数位的特殊性具体参见IEEE754标准中的定义,是指其指代的数字是在尾数位前加上1.所组成的数字,例如,尾数位为01001,对应的数字为1.01001。
可选的,在所述的浮点运算单元中,存内运算电路的计算单元包括:
第一MOSFET,其栅极与分配给存内运算电路的存储单元的输出信号连接,其漏极和源极中的第一个与固定电平连接,其漏极和源极中的第二个与第二MOSFET的漏极和源极中的第一个连接;
第二MOSFET,其栅极与分配给存内运算电路的第一输入信号连接,其漏极和源极中的第二个与输出端连接;
第三MOSFET,其栅极与分配给存内运算电路的存储单元的输出信号的反相连接,其漏极和源极中的第一个与固定电平连接,其漏极和源极中的第二个与第四MOSFET的漏极和源极中的第一个连接;以及
第四MOSFET,其栅极与分配给存内运算电路的第二输入信号连接,其漏极和源极中的第二个与输出端连接。
本发明还提供一种存算一体电路,包括如上任一项所述的浮点运算单元。
本发明的发明人经研究发现:目前主流的存内计算电路是借助ADC,DAC(模数/数模转换器)等电路,将存储在RAM中的数据与输入的数据进行乘加操作,本质上是一种累加的算法;而这种结构电路的缺点在于精度太低,n个RAM只能实现log2(n)位二进制数的精度。
在本发明提供的浮点运算单元中,通过存内计算电路对输入数据和/或存储数据进行逻辑运算,形成计算结果,浮点计算电路对输入数据和/或计算结果进行浮点运算,使用浮点数格式进行计算,在保留存算一体电路低功耗优势的同时,计算精度也得以增加。例如使用fp16/bf16/fp32/fp64等主流浮点格式进行存内计算,理论上能较好的满足目前AI芯片的精度和算力要求。
本发明在使用存算一体电路的基础上,改进了大部分电路对于ADC/DAC的依赖性,减少了所需的功耗;另外在存内计算处理器中作为一个替代方式,在电路中同时进行浮点数的存储,以及高并行度浮点数相乘的操作。
附图说明
图1是本发明一实施例浮点运算单元整体示意图;
图2是本发明一实施例浮点运算单元存内计算电路和浮点计算电路的具体结构示意图;
图3是本发明一实施例浮点运算单元BF16的格式示意图;
图4是本发明一实施例浮点运算单元两个bf16相乘实例示意图;
图5是本发明一实施例浮点运算单元电路整体时序示意图。
具体实施方式
下面结合具体实施方式参考附图进一步阐述本发明。
应当指出,各附图中的各组件可能为了图解说明而被夸大地示出,而不一定是比例正确的。在各附图中,给相同或功能相同的组件配备了相同的附图标记。
在本发明中,除非特别指出,“布置在…上”、“布置在…上方”以及“布置在…之上”并未排除二者之间存在中间物的情况。此外,“布置在…上或上方”仅仅表示两个部件之间的相对位置关系,而在一定情况下、如在颠倒产品方向后,也可以转换为“布置在…下或下方”,反之亦然。
在本发明中,各实施例仅仅旨在说明本发明的方案,而不应被理解为限制性的。
在本发明中,除非特别指出,量词“一个”、“一”并未排除多个元素的场景。
在此还应当指出,在本发明的实施例中,为清楚、简单起见,可能示出了仅仅一部分部件或组件,但是本领域的普通技术人员能够理解,在本发明的教导下,可根据具体场景需要添加所需的部件或组件。另外,除非另行说明,本发明的不同实施例中的特征可以相互组合。例如,可以用第二实施例中的某特征替换第一实施例中相对应或功能相同或相似的特征,所得到的实施例同样落入本申请的公开范围或记载范围。
在此还应当指出,在本发明的范围内,“相同”、“相等”、“等于”等措辞并不意味着二者数值绝对相等,而是允许一定的合理误差,也就是说,所述措辞也涵盖了“基本上相同”、“基本上相等”、“基本上等于”。以此类推,在本发明中,表方向的术语“垂直于”、“平行于”等等同样涵盖了“基本上垂直于”、“基本上平行于”的含义。
另外,本发明的各方法的步骤的编号并未限定所述方法步骤的执行顺序。除非特别指出,各方法步骤可以以不同顺序执行。
以下结合附图和具体实施例对本发明提出的浮点运算单元作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
本发明的目的在于提供一种浮点运算单元,以解决现有的存内计算电路实现复杂的问题。
本发明的目的还在于提供一种浮点运算单元,以解决现有的存内计算电路低精度的问题。
为实现上述目的,本发明提供了一种浮点运算单元,包括:存内计算电路,被配置为对输入数据和/或存储数据进行逻辑运算,以形成第一计算结果,其中所述输入数据和存储数据表征浮点数;以及浮点计算电路,被配置为对输入数据和/或第一计算结果进行浮点运算,以形成第二计算结果。
在本发明的一个实施例中,本发明在使用存算一体电路的基础上,改进了大部分电路对于ADC/DAC的依赖性,减少了所需的功耗;同时使用了浮点数格式进行计算,在保留存算一体电路低功耗优势的同时,计算精度也得以增加。
在本发明的一个实施例中,本发明可以使用fp16/bf16/fp32/fp64等主流浮点格式进行存内计算,理论上能较好的满足目前AI芯片的精度和算力要求。电路整体结构由存内计算电路20和浮点计算电路30组成,如图1所示。进一步的,还包括输入模块10和输出模块40。
在本发明的一个实施例中,图2为存内计算电路和浮点计算电路的具体结构,基本可分为两部分,输入数据由左端IN输入,右端输出第二计算结果。具体电路大致如图2所示,输入数据和存储数据经过存内计算电路的计算单元(LPU)进行与非或者异或逻辑运算处理后,再经过后续的浮点计算单元计算以实现高并行度的浮点数乘法操作。
在本发明的一个实施例中,浮点运算功能的实现包括:各种格式的浮点数主要由三部分组成,1bit符号位,n bit指数位和m bit尾数位,以存储±1.xx*2^x格式的数字。在具体乘法运算过程中,主要操作是符号位异或,指数位相加,尾数位相乘,以及根据结果进行归一化这四步。图3为BF16的格式的浮点数,其中有8bit指数位和7bit符号位。
在本发明的一个实施例中,存内运算电路主要对每一位的数据进行逻辑运算,具体而言在每个周期对符号位异或,其他位进行与操作。而浮点运算电路主要是对存内计算电路每个周期的第一计算结果进行处理,包括指数位移位寄存,尾数位移位相加,经过一定周期的运算后归一化,然后输出浮点数相乘的结果。以bf16为例,一次乘法计算如图4所示。
在本发明的一个实施例中,本电路对该计算的具体实现方式是,一个浮点数(第一浮点数)储存在存内计算电路中,另一个浮点数(第二浮点数)的不同部分从外部输入,每周期给入n位并在LPU处进行逻辑运算,得到存内计算电路的结果;存内计算电路的结果在浮点运算电路存储,并在外部浮点数每一位运算完成后进行最后的归一化,得到第二计算结果。
在本发明的一个实施例中,将bf16分为两个8位数据,便于在存内计算电路进行存储和运算;而对于fp16,fp32等浮点数,同样可以使用这种方法以2x8/4x8格式进行存储运算。图2中浮点运算电路中,符号位异或由存内计算电路的LPU直接实现,指数位相加由移位寄存器ShiftReg和后续的加法器Add实现,尾数位相乘由移位加法器Shift&Add实现,并由其进位信号确定对应归一化操作。BF16计算电路具体的时序图如图5所示。
在本发明的一个实施例中,如图5所示的电路整体的时序图可见,其中Out_L由最后第二计算结果的符号位和尾数位组成,Out_R由第二计算结果的指数位组成;8个周期中,由于存内计算电路中bf16存储格式为2x8,每周期给入2位数据并进行计算,同时由于经过三个计算周期的间隔输出到浮点运算电路进行处理;由于尾数的特殊性,In_L需提前一周期置为高电平作为浮点前的1。
目前的存算一体化芯片一般仅能执行固定的运算类型。具体而言,在进行计算的过程中,在存储器内只能执行一种最常见的运算,而其它所有计算都还是必须使用额外的运算电路来进行计算。这样的做法,降低了存内计算的利用率,使得芯片无论从设计面积,还是能耗,效率上的成本过高。此外,如果要改变其运算类型则需要在电路结构方面进行较大改变。这种改变是高成本的,由此限制了存内运算的应用场景。
在本发明的一个实施例中,存内运算电路的计算单元包括:第一MOSFET,其栅极与分配给存内运算电路的存储单元的输出信号连接,其漏极和源极中的第一个与固定电平连接,其漏极和源极中的第二个与第二MOSFET的漏极和源极中的第一个连接;第二MOSFET,其栅极与分配给存内运算电路的第一输入信号连接,其漏极和源极中的第二个与输出端连接;第三MOSFET,其栅极与分配给存内运算电路的存储单元的输出信号的反相连接,其漏极和源极中的第一个与固定电平连接,其漏极和源极中的第二个与第四MOSFET的漏极和源极中的第一个连接;以及第四MOSFET,其栅极与分配给存内运算电路的第二输入信号连接,其漏极和源极中的第二个与输出端连接。
在本发明中,术语“MOSFET”是指金属氧化物半导体场效应晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor,MOSFET)。术语“反相”是指数字信号做反相运算(如经过反相器)以后所得到的数字信号结果,例如信号“1”的反相是“0”,信号“0”的反相是“1”。
在本发明的一个扩展方案中规定,第一至第四MOSFET为n型MOSFET;或者第一至第四MOSFET为p型MOSFET。
在本发明的另一扩展方案中规定,所述固定电平为地(GND)或供电电压(Vdd)。在此应当指出,在其它场景中,所述固定电平也可以为其它电平,例如在串联有分压电阻的情况下,固定电平为供电电压的某个分数值。
在本发明的一个优选方案中规定,当所述固定电平为地(GND)时,所述第一输入信号(INL1)和/或所述第二输入信号(INR1)的电平按如下方式来设置:
第二输入信号(INR1)为低电平,其中存内运算单元被配置为执行输出信号(W1)与第一输入信号(INL1)的与非(NAND)运算;
第一输入信号(INL1)为低电平,其中存内运算单元被配置为执行输出信号(W1)与第二输入信号(INR1)的反相的或(OR)运算;以及第一输入信号(INL1)为第二输入信号(INR1)的反相,其中存内运算单元被配置为执行输出信号(W1)与第二输入信号(INR1)的同或(XNOR)运算。
在本发明的另一优选方案中规定,当所述固定电平为供电电压(Vdd)时,所述第一输入信号(INL1)和/或所述第二输入信号(INR1)的电平按如下方式来设置:
第二输入信号(INR1)为低电平,其中存内运算单元被配置为执行输出信号(W1)与第一输入信号(INL1)的与(AND)运算;
第一输入信号(INL1)为低电平,其中存内运算单元被配置为执行输出信号(W1)与第二输入信号(INR1)的反相的或非(NOR)运算;以及第一输入信号(INL1)为第二输入信号(INR1)的反相,其中存内运算单元被配置为执行输出信号(W1)与第二输入信号(INR1)的异或(XOR)运算。
应当指出,上述第一输入信号和第二输入信号的电平组合的列举并不是穷尽的,在其它电平组合的情况下,可以实现其它逻辑运算。所述逻辑运算也落入本发明的范围。
通过以上实施例,存储器输出的信号可以在无需进行数模转换的情况下直接参与存内运算电路和浮点运算电路中的运算,且第二计算结果无需进行模数转换,由此避免了两次模数和数模转换带来的量化误差,从而极大地提高了计算精度;本发明的存内运算电路的运算类型可以简单地通过控制第一和第二输入信号的电平来改变,由此可在不改变硬件的情况下根据场景需要变运算类型或者在同一存算一体电路中执行所有所需的运算类型,从而极大地扩展了存算一体电路的使用场景和使用灵活性并使得全部运算能够均在同一存算一体电路内执行。
本发明还提供一种存算一体电路,包括如上任一项所述的浮点运算单元。
本发明具有以下优势,首先在结构上:
·电路上较大优化,避免了传统架构中存储和计算单元分开的情况,降低通讯成本。
·与普通存内计算架构相比,避免了对于ADC/DAC结构的依赖,便于电路版图设计的同时降低了面积需求。
其次在功能上:
·能够同时实现存储和计算功能。
·使用BF16或者FP16等浮点数进行对应数字操作,能够使用较小的功耗成本实现高精度的向量运算。
·与普通整数格式的数据不同,使用BF16格式最高可达2^。
综上,上述实施例对浮点运算单元的不同构型进行了详细说明,当然,本发明包括但不局限于上述实施中所列举的构型,任何在上述实施例提供的构型基础上进行变换的内容,均属于本发明所保护的范围。本领域技术人员可以根据上述实施例的内容举一反三。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
- 基于对数运算系统的小型浮点运算单元及其在FPGA中的应用
- 浮点运算单元测试方法、装置、集控设备以及存储介质