一种基于自旋磁存储器的数据运算方法
技术领域
本发明涉及自旋电子技术领域,更具体的说是涉及一种基于自旋磁存储器的数据运算方法。
背景技术
随着大数据、物联网与人工智能等应用的蓬勃发展,产生了海量非结构化数据,伴生了对这些数据高效能处理需求的急剧增长。在当前的基于传统的冯诺依曼计算体系架构中,计算器和存储器是分离的,通过数据总线进行数据传输,但是,随着大数据应用的兴起,海量数据的传输与处理使得传统冯诺依曼计算体系结构面临带宽与功耗的双重挑战,分别称为存储墙与功耗墙问题。
为了解决这两个难题,近年来,受到人脑中突触能同时进行记忆和计算的启发,计算机架构中的存算一体(Processing-In-Memory,PIM)技术开始得到人们的广泛研究。目前大部分研究工作仍然基于传统易失性存储技术,如DRAM和SRAM等。但是,一方面,易失性存储器由于其数据不能在断电情况下保存,仍然需要在内存与外部非易失性存储器(如磁盘、固态硬盘等)之间进行频繁的数据迁移,因此冯诺依曼瓶颈并没有完全消除。另一方面,传统内存技术本身不具备计算能力,需要额外集成逻辑计算单元,因此制造成本较高,处理能力较弱。此外,传统存储器的存储单元面积较大,计算单元要求的高性能与内存单元要求的高密度难以在同一个芯片中同时满足,芯片设计复杂度和制造成本都相当高。
因此,如何设计出一种能完全消除冯诺依曼瓶颈的数据运算方法是本领域技术人员亟需解决的问题。
发明内容
有鉴于此,本发明提供了一种基于自旋磁存储器的数据运算方法,目的在于通过实现基于自旋存算阵列模块的存算一体化,从而减少数据在存储器和运算器之间的数据迁移,降低系统功耗的同时,可以提高系统的运算速度,解决冯诺依曼瓶颈带来的问题。
为了实现上述目的,本发明采用如下技术方案:
一种自旋存算阵列模块,包括:N个自旋存算单元,单个所述自旋存算单元包括至少一个自旋磁存储器和至少一个晶体管;所述自旋磁存储器包括MRAM存储器;
所述自旋存算单元呈阵列分布,每列的所述自旋存算单元由至少一条位线、至少一条源极线和N条字线控制,其中晶体管的源极与所述自旋磁存储器相连,所述自旋存储器与源极线相连,所述晶体管的栅极与字线相连,所述晶体管的漏极与所述位线相连。
一种存算一体装置,包括辅助模块和自旋存算阵列模块,所述辅助模块包括计算辅助单元;
所述计算辅助单元位于所述自旋存算阵列模块每一列的末端,包括两条平行的电压控制线,并分别与所述自旋存算阵列模块一列的位线和源极线相连;
所述计算辅助单元还包括N+1条平行的计算控制线,所述计算控制线与所述电压控制线垂直交叉分布;每条所述计算控制线还连接一个储存电容,分别为C0-CN,,均与所述自旋存算单元的源极线相连并接地,用于保存临时数据;每条所述计算控制线还连接一个控制开关,所述控制开关分别为SM0-SMN,并分别设置于所述储存电容与电压源VDD之间,用于控制待处理数据的引入;每两条所述计算控制线之间设置控制开关,分别为SD1-SDN,用于控制相邻计算控制线之间的分压;
所述计算辅助单元还包括总开关S0,设置于所述自旋存算单元的位线与所述计算辅助单元之间,用于控制计算辅助单元的开启或关闭。
优选的,所述一种存算一体装置还包括控制模块;
所述自旋存算阵列模块与所述控制模块和所述辅助模块相连,所述控制模块与所述辅助模块相连;
所述自旋存算阵列模块用于数据的存储与计算;
所述控制模块用于提供完成数据存储与计算所需要的指令;
所述辅助模块用于提供相应的输入输出接口和计算所需要的外部电路,辅助所述自旋存算阵列模块进行数据的存储与计算。
优选的,所述控制模块包括信号控制单元、写入控制单元、计算控制单元和读出控制单元;
所述信号控制单元,用于接收外部控制器提供的使能信号、地址信号和时钟控制信号,判断使能信号的类型,若使能信号为高电平信号,则结束控制;若使能信号为低电平信号,则通过一串行时钟数据线接收外部控制器发送的时钟控制信号,通过地址总线接收外部控制器发送的地址信号;
所述计算控制单元与计算辅助单元相连,响应于控制命令中的计算指令,基于地址信号控制自旋存算阵列模块对待处理数据进行计算,产生计算结果;
所述写入控制单元,响应于控制命令中的写入指令,基于地址信号控制自旋存算阵列模块对待处理数据进行数据的写入或擦除;
所述读出控制单元,响应于控制命令中的读取指令,基于地址信号对自旋存算阵列模块中的数据进行读取,得到读取数据。
优选的,所述辅助模块还包括行列译码器单元、寄存器单元和接口单元,且均与所述自旋存算阵列模块相连;
所述行列译码器单元与所述信号控制单元连接,用于根据接收到的地址信号,选择相应的自旋存储阵列中的存储单元;
所述寄存器单元,与所述接口单元相连,用于寄存接收到的数据并通过接口进行输出;
所述接口单元,用于作为数据完成输入和输出的接口。
一种多行同时选通读取数据方法,具体内容如下:
通过电源将位线预充至电压VDD;
待读取的数据为N位二进制数,从最高位到最低位依次存储于自旋存算阵列模块一列的第N-1行至第0行的字线上;通过选通第N-1行所述字线至第0行所述字线来选通相应的自旋存算单元,依次读取所述最高位至所述最低位上的数据;
以T作为选通字线0的时间,其余各位的选通时间按照最低位至最高位的顺序,依次递增,下一位选通时间是上一位的两倍;
在选通时间内,每行所选通的所述自旋存算单元内流经一个恒定电流I,在所述位线上造成电压降ΔV,通过N行自旋磁存储器所造成的所述位线上总电压降的大小来确定所存储的数据;
其中,每行电压降的大小ΔV通过恒定电流I和每行自旋磁存储器的电阻大小的乘积计算。
一种数据运算方法,所述运算方法包括加法和减法;
所述加法的具体步骤为:
将需要进行加法的数据存储至同一列的自旋存算单元中,并在同一列的所述自旋存算单元中通过多行同时选通读取数据方法选通相应的所述自旋存储单元,读取需要进行加法的数据,位线上的电压降为最终加法值;
所述减法的具体步骤为:
将被减数和减数取反后得到的数据存储至同一列的所述自旋存算单元中,并在同一列的所述自旋存算单元中通过多行同时选通读取数据方法选通相应的自旋存储单元进行数据的读取,位线上的电压降为最终差值。
一种数据运算方法,所述运算方法包括乘法;
所述乘法的具体步骤为:
(1)将被乘数存储至自旋存算单元,并通过多行同时选通读取数据方法读取被乘数;
(2)将乘数转换为b位二进制数;
(3)闭合开关S0及b个字线之间的开关,打开b个与电源VDD相连的开关,完成电容器充电后,打开b个所述字线之间的开关;
(4)闭合首个与所述电源VDD相连的开关,通过闭合或打开b个与所述电源VDD相连的开关来向计算辅助单元输入所述乘数的反码;其中,闭合开关即输入“1”,打开开关即输入“0”;
(5)保持首个与所述电源VDD相连的开关闭合,并依次闭合相邻字线之间的b个开关,完成乘法操作;
(6)计算输入乘数最低位的字线上的电压与电源电压之间的差值,从而得到乘积。
一种向量-矩阵乘法运算电路,包括自旋存算阵列模块、行列译码器单元、输入寄存器单元、输出寄存器单元和控制模块;
所述自旋存算阵列模块与所述行列译码器单元、输入寄存器单元和所述输出寄存器单元相连,所述控制模块与所述输入寄存器单元和所述行列译码器单元相连。
一种向量-矩阵乘法运算方法,每个权重向量的维度为1行m列,输入数据为1行n列的向量;将权重(0)-权重(n-1)存储于n行m列的自旋存算阵列模块中,输入数据经过输入寄存器单元后进入所述自旋存算阵列模块,在行列译码器单元的控制下,与所述自旋存算阵列模块中存储的权重数据进行矩阵乘法运算,最后得到的数据经过输出寄存器单元后输出;整体的运算过程均于所述自旋存算阵列模块内部完成,并受到控制模块的控制。
经由上述的技术方案可知,与现有技术相比,本发明提供了一种基于自旋磁存储器的数据运算方法。
首先提出一种自旋存算一体装置,通过该存算一体装置可以在由自旋存储器组成的自旋存算阵列模块中直接进行数据的计算,减少了数据在存储器和运算器之间的传输降低系统功耗的同时,可以提高系统的运算速度,进而提高了计算体系的性能,另外,本发明中行列译码器单元对自旋存储器进行单个选通或多行选通的读取数据的方法,能进一步提高计算速度,进而提高装置整体的实用性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1附图为本发明提供的一种自旋存算阵列模块的结构示意图;
图2附图为本发明提供的一种带电容的自旋存算阵列模块的结构示意图;
图3附图为本发明提供的一种存算一体装置的结构示意图;
图4附图为本发明提供的一种数据运算方法中的加法计算示意图;
图5附图为本发明提供的一种数据运算方法中的减法计算示意图;
图6附图为本发明提供的一种数据运算方法中的乘法计算示意图;
图7附图为本发明提供的一种数据运算方法中读取数据方法示意图;
图8附图为本发明提供的一种向量-矩阵乘法运算电路的结构示意图;
图9附图为本发明提供的一种存算一体装置的工作流程图;
图10附图为本发明提供的一种存算一体装置的写入方法流程图;
图11附图为本发明提供的一种存算一体装置的读出方法流程图;
图12附图为本发明提供的一种存算一体装置的计算方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一:
一种自旋存算阵列模块,如图1所示,以其中两列为例,其中每一列都包含N个自旋存算单元,分别编号1-N,每一个自旋存算单元中有至少一个包含MTJ结构的自旋磁存储器和至少一个晶体管。每一列有一条位线、一条源极线和N条字线来控制。字线1-N分别控制自旋存算单元中晶体管的选通与否,而晶体管则作为开关器件实现自旋磁存储器的开启/关闭。当字线选通时,晶体管为打开状态,可以实现自旋磁存储器数据的读写或者计算,反之,则无法完成。
而当字线处于选通状态时,数据的写入方式是通过电流产生磁场,进而使自由层磁矩发生反转,改变MTJ的电阻,实现信息写入。
实施例二:
一种自旋存算阵列模块,如图2所示,与实施例一中的自旋存算阵列模块不同的是每一个自旋存算单元外部还加入了一个自旋存储电容,自旋存算单元用于完成存储和计算功能。存储电容属于计算辅助单元,可以起到提高计算的线性度,并且辅助完成乘除法操作的作用。
实施例三:
一种存算一体装置,如图3所示,包括辅助模块和自旋存算阵列模块,辅助模块包括计算辅助单元,用于提供完成计算所需要的外围电路,计算辅助单元与自旋存算阵列模块相连;
计算辅助单元包括一个以上的开关和一个以上的电容;
开关S0设置于自旋存算单元的位线与计算辅助单元的位线之间,电容与源极线相连并直接接地,位线与电压源VDD之间设有开关,相邻的字线之间设有开关。
更进一步地,包括:自旋存算阵列模块、控制模块和辅助模块;
自旋存算阵列模块与控制模块和辅助模块相连,控制模块与辅助模块相连;
自旋存算阵列模块用于数据的存储与计算;
控制模块用于提供完成数据存储与计算所需要的指令;
辅助模块用于提供相应的输入输出接口和计算所需要的外部电路,辅助自旋存算阵列模块进行数据的存储与计算。
更进一步地,控制模块包括信号控制单元、写入控制单元、计算控制单元和读出控制单元;
信号控制单元,用于接收外部控制器提供的使能信号、地址信号和时钟控制信号,判断使能信号的类型,若使能信号为高电平信号,则结束控制;若使能信号为低电平信号,则通过一串行时钟数据线接收外部控制器发送的时钟控制信号,通过地址总线接收外部控制器发送的地址信号;
计算控制单元与计算辅助单元相连,响应于控制命令中的计算指令,基于地址信号控制自旋存算阵列模块对待处理数据进行计算,产生计算结果;
写入控制单元,响应于控制命令中的写入指令,基于地址信号控制自旋存算阵列模块对待处理数据进行数据的写入或擦除;
读出控制单元,响应于控制命令中的读取指令,基于地址信号对自旋存算阵列模块中的数据进行读取,得到读取数据。
更进一步地,辅助模块还包括行列译码器单元、寄存器单元和接口单元,且均与自旋存算阵列模块相连;
行列译码器单元与信号控制单元连接,用于根据接收到的地址信号,选择相应的自旋存储阵列中的存储单元;
寄存器单元,与接口单元相连,用于寄存接收到的数据并通过接口进行输出;
接口单元,用于作为数据完成输入和输出的接口。
实施例四:
一种数据运算方法,该运算方法包括加法和减法;
图4为本发明中所提出的基于自旋磁存储器的运算方法中的加法示意图。如图4所示,加法的具体步骤为:
通过多行同时选通读取数据的方法,读取第一数据D,以位线上的第一电压降ΔV1代表其数值;
通过多行同时选通读取数据的方法,读取第二数据E,以位线上的第二电压降ΔV2代表其数值;
通过计算位线上总的电压降ΔV=ΔV1+ΔV2,完成D+E的计算。
图5为本发明中所提出的基于自旋磁存储器的运算方法中的减法示意图。如图5所示,由于因此所述减法运算可按照所述加法运算的操作进行,具体步骤为:
通过多行同时选通读取数据的方法,读取第一数据D,以位线上的第一电压降ΔV1代表其数值;
通过多行同时选通读取数据的方法,读取第二数据E各位分别取反得到的数据以位线上的第二电压降ΔV2代表其数值;
通过计算位线上总的电压降ΔV=ΔV1+ΔV2,完成的计算,进而得到D-E的结果,而由于多列同时+1可相互抵消,故可近似认为
实施例五:
一种数据运算方法,该运算方法中包括乘法;
图6为本发明中所提出的基于自旋磁存储器的运算方法中的乘法示意图。如图6所示,为了计算D*E的结果,需要在自旋存算阵列模块的下方接入计算辅助单元。
所述乘法的具体步骤为:
(1)通过多行同时选通读取数据的方法,读取第一数据D,以位线上的第一电压降ΔVD代表其数值;
(2)闭合S0和SD1-SDN,保持SM0-SMN打开,完成电容器充电;
(3)打开SD1-SDN,闭合SM0,完成数据初始化;
(4)保持SM0闭合,根据第二数据各数位的值选择性地打开或者闭合SM1-SMN,完成第二数据E的输入,具体来说如果输入为“1”,则开关打开,输入为“0”,开关闭合;
(5)保持SM0闭合,并依次闭合SD1-SDN,完成乘法操作;
(6)计算位线最终输出的电压与电源电压VDD之间的差值,从而得到乘积。
所述除法的具体步骤为:
由于有b=2N/K,所以D/K=D*b/2N,可以将除法转化为乘法和移位操作。
在按照所述的乘法操作过程完成D*b的计算之后,将计算结果右移N位,即可得到除法操作的结果。
本实施例以D和E为4位二进制数为例来说明。该计算辅助单元由开关S0,SD1-SD4和电容C0-C4组成,其中V0-V4表示各个连接位点的电压,S0与位线直接相连,C0-C4与源极线相连并接地,SM0-SM4和位线连接电压源VDD。
乘法的具体运算步骤如下:
1)读取数据D,经过读取之后,S0的输入电压变成VDD-ΔV;
2)电容器充电:首先闭合S0和SD1-SD4,保持SM0-SM4打开,此时会完成向电容器C0-C4充电的操作,此时由于整条导线都处于连通状态,因此V0-V4的电压都等于VDD-ΔV,充电完成后,打开SD1-SD4;
3)输入数据闭合SM0,同时数据以SM1-SM4的打开或者闭合来表示,具体来说当输入为“1”时,开关闭合,而当输入为“0”时,开关打开。这里输入的是E取反之后的数据比如E=(e3e2e1e0)=(0101),而此时输入的为此时SM1-SM4的状态依次为“闭合、打开、闭合、打开”;
4)完成乘法操作:保持SM0闭合,然后依次闭合SD1-SD4,完成乘法操作。在这里举例说明,仍以输入为例来说明。由于SM0闭合,此时V0=VDD,闭合SD1后,电容器C0,C1发生电荷交换,最终达到稳定状态,此时V1=VDD-0.5e0ΔV。其中,由于e0=1,此时开关SM1处于打开状态,则C0,C1经过电荷交换后最终达到的稳定电压为0.5(VDD+VDD-ΔV)=VDD-0.5ΔV。
5)闭合SD2,V2=VDD-0.5(e1ΔV+0.5e0ΔV),由于e0=1,e1=0,V2=VDD-0.25ΔV。其中,由于V1=VDD-0.5ΔV,开关SM2处于闭合状态,两个电容器最后达到的稳定电压为0.5(VDD+VDD-0.5ΔV)=VDD-0.25ΔV。
以此类推,当闭合开关SD3,V3=VDD-0.5(e2ΔV+0.5(e1ΔV+0.5e0ΔV));当闭合开关SD4,V4=VDD-0.5(e3ΔV+0.5(e2ΔV+0.5(e1ΔV+0.5e0ΔV)))。
6)综上,V4即最终输出的电压,将其进行简单变形后可以得到V4=VDD-0.0625ΔV(8e3+4e2+2e1+e0),而根据定义E=8e3+4e2+2e1+e0,所以V4=VDD-0.0625ΔV*E,通过比较V4和VDD的差距,就可以算出ΔV*E的值,也就是D*E的值。
更进一步地,如图7所示,图7一种多行同时选通读取数据的示意图。以自旋存算阵列模块中同一列的N行自旋磁存储器所存储的电阻状态,代表一个N位二进制数D(d0d1…dN-1),读取D的方法为多行同时选通。多行同时选通读取数据D(以N=4为例)的方法为:
(1)通过预充电过程将位线电压预充到VDD;
(2)施加脉冲时间为T的第一读取电流脉冲信号到存储d0的自旋磁存储器,读取d0;
(3)施加脉冲时间为2T的第二读取电流脉冲信号到存储d1的自旋磁存储器,读取d1;
(4)施加脉冲时间为4T的第二读取电流脉冲信号到存储d2的自旋磁存储器,读取d2;
(5)施加脉冲时间为8T的第二读取电流脉冲信号到存储d3的自旋磁存储器,读取d3;
(6)由于电流通过自旋磁存储器会降低位线上的电位,数据D的数值正比于位线上的电压降,因此通过计算步骤(2)-(4)所造成的位线电压降就可以读取所存储的D的数值。
以一个4位2进制数d3d2d1d0为例:
该二进制数转换为十进制的方法为8*d3+4*d2+2*d1+d0。由于每一位上面的数为1或者0,所以该数表示的范围为0~15。以T作为选通字线-0的时间,另外的三条字线的选通时间依次为下一条的2倍,如图7所示。
在选通的时间内,有一个恒定大小的电流I流经所选通的自旋存算单元。从而在位线上会造成电压下降,所造成的电压降ΔV=8*R3I+4*R2I+2*R1I+R0I=I*(8*R3+4*R2+2*R1+R0)。
由于MTJ有两种状态,存储“1”时为RAP,存储“0”时为RP(其中RAP>RP),因此ΔV的最小值ΔVmin=I*(8*RP+4*RP+2*RP+RP)=15*IRP,此时存储的数据为(0000);ΔV的最大值ΔVmax=I*(8*RAP+4*RAP+2*RAP+RAP)=15*IRAP,此时存储的数据为(1111)。(1111)-(0000)=15,而两者之间的差距刚好为ΔVmax-ΔVmin=15*I(RAP-RP)。由此可见,每一个存储的数据之间的差值可以用I(RAP-RP)来表示。而根据MTJ的TMR的定义,TMR=(RAP-RP)/RP,(RAP-RP)=TMR*RP,TMR对于MTJ来说是一个常数,当TMR足够大时,就可以通过比较电压降的大小与参考值的大小来确定该列中存储的数据,并且能进一步保证正确率。
实施例六:
一种向量-矩阵乘法运算电路,如图8所示,包括自旋存算阵列模块、行列译码器单元、输入寄存器单元、输出寄存器单元和控制模块;
自旋存算阵列模块与行列译码器单元、输入寄存器单元和输出寄存器单元相连,控制模块与输入寄存器单元和行列译码器单元相连。
实施例七:
一种向量-矩阵乘法运算方法,以4*4的自旋存算阵列模块为例,其中权重0-权重3存储于4*4的自旋存算阵列模块中,输入数据为1*4的向量,经过输入寄存器单元后进入自旋存算阵列模块,在行列译码器单元的控制下,与自旋存算阵列模块中存储的权重数据进行乘法运算,最后得到的数据经过输出寄存器单元后输出。整体的运算过程都在自旋存算阵列模块内部完成,并受到控制模块的控制。
本发明中一种存算一体装置的工作原理如图9所示:
1)接收控制命令、待处理数据及地址信号;
2)判断控制命令类型,并根据控制命令类型执行数据运算方法,并输出数据运算结果;
其中,控制命令类型包括写入指令、计算指令和读出指令,依次对应的数据运算方法分别为写入方法、计算方法和读出方法;
写入方法为基于地址信号控制自旋存算阵列模块对待处理数据进行数据的写入或擦除;
计算方法为基于地址信号控制自旋存算阵列模块对待处理数据进行计算,产生计算结果;
读出方法为基于地址信号对自旋存算阵列模块中的数据进行读取,得到读取数据。
写入方法具体流程如图10所示:
写入指令控制写入控制单元和行列译码器单元,行列译码器单元根据写入指令内的地址信号选通待写入的自旋磁存储器,写入控制单元基于待处理数据对选通的自旋磁存储器进行数据写入或擦除,实现数据存储或更新;
读出方法具体流程如图11所示:
读出指令控制行列译码器单元,行列译码器单元基于地址信号选通待读取的自旋磁存储器,读出控制单元读出选通的自旋磁存储器中的数据。
计算方法具体流程如图12所示:
计算指令控制计算辅助单元和行列译码器单元,行列译码器单元基于地址信号选通用于计算的自旋磁存储器,计算辅助单元将待处理数据输送至选通的自旋磁存储器,自旋存算阵列模块在计算辅助单元协助下通过计算函数完成计算,得到计算结果。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。