一种基于SRAM的并行乘加装置的制作方法

文档序号:19827658发布日期:2020-02-04 12:02阅读:377来源:国知局
一种基于SRAM的并行乘加装置的制作方法

本发明属于集成电路技术领域,具体涉及一种基于sram的并行乘加装置。



背景技术:

冯诺依曼架构是计算机的经典架构,同时也是目前计算机以及处理器芯片的主流架构。在冯诺依曼架构中,计算/处理单元与内存是两个完全分离的单元:计算/处理单元根据指令从内存中读取数据,在计算/处理单元中完成计算/处理,并返回内存。由于计算机处理器的性能随着晶体管特征尺寸的缩小而得到显著提升,但是内存的性能(速度)的提升已经不能满足处理器的性能,造成了处理器与内存之间的性能不匹配,由此造成了传统冯诺依曼体系计算机的瓶颈。这个瓶颈在人工智能应用快速发展普及的今天尤为显著,这一代的人工智能基于的是神经网路模型,而神经网络模型的一个重要特点就是计算量大,而且计算过程涉及到的数据量也很大,使用传统冯诺依曼架构会需要频繁读写内存,限制了运算速度。使用存内计算,把计算嵌入到内存中,这样就实现了内存既是存储器也是计算器,实现了在存储/读取数据的同时完成了运算,因此大大减少了计算过程中的数据存取的耗费。dram(dynamicrandomaccessmemory,动态随机存储器)因集成度高、成本低而成为计算机的主要内存,但是其保存数据时间短,需要动态刷新,而且速度较低;而sram则具有速度快,不需要动态刷新电路。随着数据信号处理技术领域的不断发展和突破,对数据的运算能力的需求也在不断增长。采用冯诺依曼架构的计算机的串行计算限制了数据的运算能力,采用并行计算能极大的提高数据的运算能力,并且相比于串行计算模型,并行计算模型更有利于对现实世界建模,如交通、医疗等。

传统并行乘加结构的高精度都是通过增大版图面积来实现的,并且在版图面积消耗严重的情况下还存在失配问题。



技术实现要素:

为了解决现有技术的问题,本发明提供了一种基于sram的高精度并行乘加装置。

本发明采用的技术方案是:

一种基于sram的并行乘加装置,包括控制器、移位寄存器、sram存内计算模块和放大输出模块;所述控制器用于对移位寄存器和sram存内计算模块进行逻辑控制;所述移位寄存器具有移位功能,并用于接收第一操作数,移位寄存器输出第一操作数到sram存内计算模块;所述sram存内计算模块接收移位寄存器输入的第一操作数和外部输入的第二操作数,在控制器控制下对第一操作数和第二操作数进行并行乘法加运算,sram存内计算模块的输出接放大输出模块的输入;放大输出模块将sram存内计算模块的计算结果进行信号放大并做幅度调整后输出;

其特征在于,所述sram存内计算模块包括多个并列的计算单元,每个计算单元包括正矩阵存算模块、负矩阵存算模块和减法模块;所述正矩阵存算模块和负矩阵存算模块的输入包括第一操作数、第二操作数和控制器的控制指令,正矩阵存算模块和负矩阵存算模块的输出分别作为减法模块的两个输入,减法模块的输出为sram存内计算模块的输出;

所述正矩阵存算模块包括第一运算放大器和多个并列的计算子单元,每个计算子单元包括输入及反相输入模块、sram模块阵列和第二运算放大器,每一个输入及反相输入模块的输入为第一操作数中的一位数据,即第一操作数按位依次输入到多个计算子单元中,输入及反相输入模块用于输出输入数据的同相数据bl及输入数据的反相数据blb;所述sram模块阵列包括多个sram,每个sarm连接输入及反相输入模块的输出,sarm还连接控制器输出的写使能信号wl和运算使能信号rwl,将所有计算子单元中的sram按顺序从1到n编号,对应的将写使能信号wl按顺序从wl1到wln编号,运算使能信号rwl按顺序从rwl1到rwln编号,编号为wl1的写使能信号和编号为rwl1的运算使能信号控制所有编号为1的sram,其他编号依次类推;计算子单元中的所有sarm的输出接第二运算放大器的反相输入端,第二运算放大器的正向输入端通过一个电阻后接地,第二运算放大器的输出通过一个电阻后接第一运算放大器的反相输入端,第二运算放大器的输出还通过一个反馈电阻后接其反相输入端;第一运算放大器的正向输入端通过一个电阻后接地,第一运算放大器通过一个反馈电阻后接其反相输入端,第一运算放大器的输出端为正矩阵存算模块的输出端;

所述sram采用8个mosfet构建且能存储一位数据,将8个mosfet依次编号为m1-m8,第一pmos管m1和第一nmos管m2组成的cmos反相器与第二pmos管m3和第二nmos管m4组成的cmos反相器首尾相连,此结构用于存储一位数据q,即并行乘加运算的第一操作数中的一位数据;在两个反相器的输出端分别连接第三nmos管m5的漏端、第四nmos管m6的漏端,第三nmos管m5的源端连接bl,第四nmos管m6的源端连接blb,在存储数据时将第三nmos管m5、第四nmos管m6通过写使能信号wl开启,第五nmos管m7和第六nmos管m8构成运算部分,其中第五nmos管m7的栅极连接并行乘加运算的第一操作数q,其漏极连接并行乘加运算的第二操作数,其源极连接第六nmos管m8的漏极,第六nmos管m8的栅极由运算使能信号rwl控制,并行乘加运算的结果以电流的形式流出第六nmos管m8的源端,即第六nmos管m8的源端为sarm的输出;

第六nmos管m8的源端的输出为电流信号,第二运算放大器、第一运算放大器及外围电阻构建了电流转电压电路和电压相加电路,第六nmos管m8的源端流出的电流通过电流转电压电路后再经过电压加法电路相加,相加得到的电压传输给减法模块;

所述负矩阵存算模块的结构与正矩阵存算模块相同,区别在于其存储数据的功能不同,正矩阵存算模块的存储数据为并行乘加运算的第一操作数中的正值的绝对值,负矩阵存算模块的存储数据为并行乘加运算的第一操作数中的负值的绝对值;

所述减法模块是由第三运算放大器及外围电阻而成,其功能是将正矩阵存算模块的结果减去负矩阵存算模块的结果;减法模块的输出为乘加结果,并输入到放大输出模块。

上述方案中,控制器模块控制移位寄存器模块接收从外部i/o进入的并行乘加运算的第一操作数并将其“一维化”处理后传输给sram存内计算模块;控制sram存内计算模块中的sram模块行的使能与关断,从而存储移位寄存器模块输出的数据;控制sram存内计算模块存储的数据与并行乘加运算的第二操作数进行并行乘加运算;接收放大读出模块反馈的并行乘加运算结束信号;对应的移位寄存器模块用于将外部i/o进入的第一操作数矩阵“一维化”并暂时存储并行乘加运算的第一操作数,并且能移位输出相应数据给sram存内计算模块;放大读出模块将sram存内计算模块的得到的结果进行信号放大并做幅度调整,使其输出范围与要求相符,输出并行乘加运算结束信号给控制器模块。

本发明还提供了另一种方案,即将上述方案中正矩阵存算模块第h列计算子单元(h为正整数)乘加运算得到的电流通过电流转电压电路得到电压负矩阵存算模块第h列计算子单元乘加运算得到的电流和通过减法模块后得到电压vh,再将正存算矩阵和负存算矩阵所有对应列如此得到的电压vh再经过电压相加电路得到并行乘加运算的结果与上述方案的原理等效,区别为正、负矩阵存算模块所存数据相减操作实现顺序有所差异。

本发明的并行乘加装置的具体工作流程为:

步骤1,控制器模块发出控制指令,控制外部i/o进入的第一操作数(矩阵)传输给移位寄存器模块进行“一维化”;

步骤2,移位寄存器模块将“一维化”后的第一操作数(向量)传输给sram存内计算模块;

步骤3,sram存内计算模块的输入及反相输入模块接收对应的第一操作数的一位数;

步骤4,输入及反相输入模块输出其接收的原数据的同相数据bl及其反相数据blb;

步骤5,控制器模块使能一条写使能信号线wl,即选中wl1-wln中一条信号线使其处于高电势,从而使能该条信号线控制的sram模块行;

步骤6,步骤5使能的sram模块行存储所在列的bl数据,若并行乘加运算的第一操作数未全部存储于相应的sram模块中,则跳转至步骤1,否则执行步骤7;

步骤7,控制器模块使能一条或多条运算使能信号线rwl,即选中rwl1-rwln中一条或多条信号线使其处于高电势,即使能rwl信号线控制的sram模块行;

步骤8,步骤7使能的sram模块行的存储数据与对应行的第二操作数即sl信号线传输的数据进行乘运算,不同sram模块行之间共同完成了并行乘加运算,而sl信号线上的电压的数值大小、正负代表了并行乘加运算的第二操作数的数值大小、正负;

步骤9,将sram存内计算模块中每列sram模块行并行乘加运算得到的电流转换为电压,并将每列sram模块列的电压相加得到和电压;

步骤10,将正矩阵存算模块与负矩阵存算模块得到的结果传输给减法模块,减法模块的功能是正矩阵存算模块的结果减去负矩阵存算模块的结果,从而实现了并行乘加运算的第一操作数包含正值和负值;

步骤11,将减法模块得到的结果传输给放大读出模块,放大读出模块将该结果进行信号放大并做幅度调整,使其输出范围与要求相符,从而得到最终的并行乘加运算结果。若并行乘加运算还未结束,则跳转至步骤1,否则结束。

本发明的有益效果在于:

相比于传统的向量-矩阵点乘计算方案,本发明的存内计算方案保持高精度的同时,极大地提高了并行乘加运算速度、节约了运算操作数的存储空间、降低了数据传输耗时以及降低了运算功耗。

附图说明

图1是本发明实例提供的一种基于sram的高精度并行乘加结构及其实现方法示意图;

图2是图1中sram存内计算模块示意图;

图3是图2中正(负)存算模块示意图;

图4是图2中减法模块示意图;

图5是图3中sram模块示意图;

图6是图3中实现电流转电压功能的电路示意图;

图7是图3中实现电压相加功能的电路示意图;

图8是图4中减法模块实现减法运算的举例示意图;

图9是本发明提出的一种基于sram的高精度并行乘加结构及其实现方法的流程图;

图10是图2的另一种的实现方案;

图11是图9基于图10修改后的流程图。

具体实施方式

下面结合附图对本发明进行详细的描述:

如图1所示,第一操作数(矩阵)3从外部i/o进入移位寄存器模块5,控制器模块1控制移位寄存器模块5暂时存储并行乘加运算的第一操作数并将其进行“一维化”处理得到第一操作数(向量)6,再将第一操作数(向量)6传输给sram存内计算模块8,控制器模块1控制sram存内计算模块8存储移位寄存器模块5输出的数据6,控制器模块1控制sram存内计算模块8存储的数据6与从外部i/o进入的乘加运算的第二操作数7进行乘加运算;sram存内计算模块8得到的结果9传输给放大读出模块10;放大读出模块10将sram存内计算模块8得到的结果9进行信号放大并做幅度调整后得到并行乘加的结果11,放大读出模块10将乘加运算结束信号12反馈给控制器模块1。

如图2所示,sram存内计算模块8包括正矩阵存算模块12、负矩阵存算模块13、减法模块15,正矩阵存算模块12和负矩阵存算模块13的结构相同,只是其二者的存储数据所代表的意义不同,正矩阵存算模块12存储的是并行乘加运算的第一操作数的正值的绝对值,负矩阵存算模块13存储的是并行乘加运算的第一操作数的负值的绝对值。正矩阵存算模块12和负矩阵存算模块13的运算结果14传输给减法模块15。减法模块15实现正矩阵存算模块12的结果14减去负矩阵存算模块的结果14的功能,从而实现了并行乘加运算的第一操作数即包含正值,也包含负值。一组正矩阵存算模块12、负矩阵存算模块13、减法模块15实现向量-向量点乘运算,多组正矩阵存算模块12、负矩阵存算模块13、减法模块15则实现向量-矩阵点乘运算。

如图3所示,移位寄存器模块5输出的第一操作数(向量)6中的每一位数16传输给对应输入及反相输入模块19,输入及反相输入模块19将原数据16的同相数据20和其反相数据21传输给被控制器模块1使能的写使能信号线(wl信号线)17控制的sram模块行22,从而分别存储并行乘加运算的第一操作数中的一位。被控制器模块1使能的运算使能信号线(rwl信号线)18控制的sram模块行22存储的数据与sl信号线10传输的第二操作数进行并行乘加运算,得到的结果为电流23,电流23经过由第一电阻r1、第一运放25、第二电阻r2构成电流转电压电路(参阅图6)转化为电压26,其中每列sram模块列的第二电阻r2的阻值比例则是每列sram模块存储数据的权重比例,为了实现电阻匹配,每列sram模块列的第一电阻r1要和同一列的第二电阻r2的阻值相同。得到的电压26经过由第三电阻r3、第四电阻r4、第五电阻r5、第二运放29构成的电压相加电路(参阅图7)得到正(负)存算模块12(13)的运算结果14。

如图4所示,正矩阵存算模块得到的结果14(vp)经过第六电阻r6、第七电阻r7、第八电阻r8、第三运放32可得到电压33(vpp),这是因为运放具有“虚短”、“虚断”特性,可得运算表达式:

电压33(vpp)和负矩阵存算模块得到的结果14(vn)经过第九电阻r9、第十电阻r10、第十一电阻r11、第十二电阻r12、第四运放36得到电压9(v),可得运算表达式:

采用r6=r8,r9=r11=r12,可得运算表达式:

v=vp-vn

由此sram存内计算模块8的乘加结果9(v),实现了并行乘加运算的第一操作数即包含正值也包含负值(参阅图8)。为实现电阻匹配,r7=r6//r8,r10=r9//r11//r12。

如图5所示,第一pmos管m1和第一nmos管m2组成的cmos反相器与第二pmos管m3和第二nmos管m4组成的cmos反相器首尾相连,此结构可用于存储一位数据q,即并行乘加运算的第一操作数,在两个反相器的输出端分别连接第三nmos管m5的漏端、第四nmos管m6的漏端,第三nmos管m5的源端连接bl信号线20,第四nmos管m6的源端连接blb信号线21,在存储数据时将第三nmos管m5、第四nmos管m6通过写使能信号(wl信号线)17开启,第五nmos管m7和第六nmos管m8构成运算部分,其中第五nmos管m7的栅极连接并行乘加运算的第一操作数q,其漏极连接并行乘加运算的第二操作数(sl信号线)7,其源极连接第六nmos管m8的漏极,第六nmos管m8的栅极由运算使能信号(rwl信号线)18控制,当运算使能信号(rwl信号线)18有效时进行并行乘加运算,其结果以电流的形式流出第六nmos管m8的源端23。

如图6所示,第一电阻r1、第二电阻r2、第一运放25构成了电流转电压电路,由于第一运放25具有“虚短”、“虚断”的特性,使得第一运放25的负相输入端23的电势为“0”,若通过负相输入端23的电流为i,第一运放25的输出端电压26为vout,则可得到运算表达式:

第一电阻r1、第二电阻r2的比值大小由具体情况而定(参阅图3)。

如图7所示,第三电阻r3、第四电阻r4、第五电阻r5、第二运放29构成了电压相加的电路,由于第二运放29具有“虚短”、“虚断”的特性,使得第二运放29的负相输入端27的电势为“0”,假设第1列至第m列的电压26分别为vout1…vouth…voutm,第二运放29的输出电压14为vp(vn),则可得运算表达式:

第三电阻r3、第五电阻r5的比值大小由具体情况而定,为了实现电阻匹配,r4=(r3/m)//r5。

如图8所示,并行乘加运算的第一操作数既可以包含正值,也可以包含负值。图8即为举例示范,假设矩阵37中a11至a34均为无符号为的多比特的二进制值,即均为正值,则矩阵38将矩阵37中原来的所有正值的绝对值提取出来,存储于正矩阵存算模块,矩阵39将矩阵37中原来的所有负值的绝对值提取出来,存储于负矩阵存算模块,其中的减法运算40由减法模块15实现。

如图9所示,该图是本发明提出的一种所述基于sram的高精度并行乘加结构及其实现方法的实现过程,包括:

步骤1,控制器模块发出控制指令,控制外部i/o进入的第一操作数(矩阵)3传输给移位寄存器模块5进行“一维化”;

步骤2,移位寄存器模块5将“一维化”后的第一操作数(向量)6传输给sram存内计算模块8;

步骤3,sram存内计算模块8的输入及反相输入模块19接收对应的第一操作数的一位数16;

步骤4,输入及反相输入模块19输出其接收的原数据的同相数据bl20及其反相数据blb21;

步骤5,控制器模块1使能一条写使能信号线wl17,即选中wl1-wln中一条信号线使其处于高电势,从而使能该条信号线控制的sram模块行22;

步骤6,步骤5使能的sram模块行22存储所在列的bl数据20,若并行乘加运算的第一操作数3未全部存储于相应的sram模块22中,则跳转至步骤1,否则执行步骤7;

步骤7,控制器模块1使能一条或多条运算使能信号线rwl18,即选中rwl1-rwln中一条或多条信号线使其处于高电势,即使能rwl信号线18控制的sram模块行22;

步骤8,步骤7使能的sram模块行22的存储数据与对应行的第二操作数即sl信号线7传输的数据进行乘运算,不同sram模块行22之间共同完成了并行乘加运算,而sl信号线7上的电压的数值大小、正负代表了并行乘加运算的第二操作数的数值大小、正负;

步骤9,将sram存内计算模块8中每列sram模块行22并行乘加运算得到的电流23转换为电压26,并将每列sram模块列的电压26相加得到和电压14;

步骤10,将正矩阵存算模块12与负矩阵存算模块13得到的结果传输给减法模块15,减法模块15的功能是正矩阵存算模块12的结果14(vp)减去负矩阵存算模块13的结果14(vn),从而实现了并行乘加运算的第一操作数包含正值和负值;

步骤11,将减法模块15得到的结果9传输给放大读出模块10,放大读出模块10将该结果9进行信号放大并做幅度调整,使其输出范围与要求相符,从而得到最终的并行乘加运算结果11。若并行乘加运算还未结束,则跳转至步骤1,否则结束。

如图10所示,该图实现的是sram存内计算模块8的构建方案2,对应图2,正矩阵存算模块12(参阅图3)相应列乘加运算得到的电流23通过电流转电压电路(参阅图6)得到电压33,负矩阵存算模块13对应列乘加运算得到的电流23和电压33通过减法模块15(参阅图4)后得到电压26,再将正矩阵存算模块12和负矩阵存算模块13所有对应列如此得到的电压26再经过电压相加电路(参阅图7)得到并行乘加运算的结果9。

如图11所示,该图是图9基于图10修改后的流程图,包括:

步骤1-8与方案1的步骤1-8相同;

步骤9,将sram存内计算模块8中每列sram模块行22乘加得到电流23;

步骤10,将正存算矩阵与负存算矩阵对应sram模块列的电流23相减,得到电压26,从而实现了乘加运算的第一操作数包含正值和负值;

步骤11,将步骤10中所有对应列得到的电压26相加,得到电压9;

步骤12,将步骤11得到的电压9传输给放大读出模块10,放大读出模块10将该结果9进行信号放大并做幅度调整,使其输出范围与要求相符,从而得到最终的“乘加”结果11。若并行乘加运算还未结束,则跳转至步骤1,否则结束。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1