CN110647308B - 累加器及其运算方法 - Google Patents
累加器及其运算方法 Download PDFInfo
- Publication number
- CN110647308B CN110647308B CN201910936918.XA CN201910936918A CN110647308B CN 110647308 B CN110647308 B CN 110647308B CN 201910936918 A CN201910936918 A CN 201910936918A CN 110647308 B CN110647308 B CN 110647308B
- Authority
- CN
- China
- Prior art keywords
- carry
- data
- calculation result
- input
- accumulation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
- G06F7/505—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
- G06F7/509—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators
- G06F7/5095—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators word-serial, i.e. with an accumulator-register
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明的实施例提供一种累加器及其运算方法,涉及数字信号处理技术领域,可以提升累加运算的极限频率。一种累加器,包括:累加单元;累加单元包括级联的k个第一累加子单元和1个第二累加子单元;第一累加子单元用于在第一阶段,根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据;第二累加子单元用于在第一阶段,根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位输入端输入的进位数据,计算得到第三计算结果并存储。
Description
技术领域
本发明涉及数字信号处理技术领域,尤其涉及一种累加器及其运算方法。
背景技术
累加器是算术运算电路中最常用的电路之一,传统意义上的累加器基本上是采用加法运算实现。
在需要累加运算的相关领域,例如高清数字图像处理、数字信号处理、数字通信等,往往对运算的实时性有很高要求,尤其在数字图像处理领域,常常要求短时间内实现大规模的逻辑运算,即要求电路系统工作在比较高的工作频率,从而实现运算速度的提升。而数字电路中,操作数位宽增大将会直接影响电路的最高工作频率,从而限制电路的运算速率,实际上,很多图像处理的算法中,所涉及累加运算操作数的位宽比较大,因此电路极限工作频率往往成为整个系统运算速率提升的瓶颈。
发明内容
本发明的实施例提供一种累加器及其运算方法,可以提升累加运算的极限频率。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本发明实施例提供一种累加器,包括:累加单元;
所述累加单元包括级联的k个第一累加子单元和1个第二累加子单元;
所述第一累加子单元连接第一数据输入端、第一进位输入端、第二进位输入端、第一符号输入端、第一数据输出端、第一进位输出端和第二进位输出端;上一级所述第一累加子单元的第一进位输出端和第二进位输出端,分别与下一级所述第一累加子单元的第一进位输入端和第二进位输入端连接;
所述第二累加子单元连接第二数据输入端、第三进位输入端、第四进位输入端、第二符号输入端、第二数据输出端和结果符号输出端;最后一级所述第一累加子单元的第一进位输出端和第二进位输出端,分别与所述第二累加子单元的第三进位输入端和第四进位输入端连接;
所述第一累加子单元用于在第一阶段,根据所述第一数据输入端输入的数据、所述第一符号输入端输入的正或负的符号、所述第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过所述第一进位输出端输出进位数据;其中,若所述第一计算结果为正,则在第二阶段,将所述第一计算结果通过所述第一数据输出端输出;若所述第一计算结果为负,则在第二阶段,根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据;
所述第二累加子单元用于在第一阶段,根据所述第二数据输入端输入的数据、所述第二符号输入端输入的正或负的符号、以及所述第三进位输入端输入的进位数据,计算得到第三计算结果并存储;其中,若所述第三计算结果为正,则在第二阶段,将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,则在第二阶段,根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号;所述第二累加子单元的第二数据输入端接地电平。
可选地,所述累加器还包括输出单元;
所述输出单元分别与每级所述第一累加子单元的第一数据输出端、所述第二累加子单元的第二数据输出端连接,用于对每级所述第一累加子单元输出的所述第一计算结果或所述第二计算结果、以及所述第二累加子单元输出的第三计算结果或所述第四计算结果进行位拼接并输出。
可选地,所述第一累加子单元包括:第一取反模块、第二取反模块、第一加法计算模块、第一反码寄存器、第一累加结果寄存器和第一内置参数寄存器;
所述第一取反模块与所述第一数据输入端连接,用于在第一阶段将所述第一数据输入端输入的数据取反码,得到第一反码数据;
所述第一反码寄存器分别与所述第一数据输入端、所述第一取反模块连接,用于存储所述第一数据输入端输入的数据,或者,用于存储所述第一取反模块得到的所述第一反码数据;
所述第一加法计算模块分别与所述第一反码寄存器、所述第一进位输入端、所述第一累加结果寄存器、所述第一内置参数寄存器以及所述第一进位输出端连接;若所述第一符号输入端输入的符号为正,所述第一加法计算模块用于在第一阶段,计算所述第一数据输入端输入的数据、所述第一进位输入端输入的进位数据与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;若所述第一符号输入端输入的符号为负,所述第一加法计算模块用于在第一阶段,计算所述第一反码数据、所述第一进位输入端输入的进位数据、所述第一内置参数寄存器存储的第一参数与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
所述第一累加结果寄存器还与所述第一数据输出端连接,用于在所述第一计算结果为正时,在第二阶段,将所述第一计算结果从所述第一数据输出端输出;
所述第二取反模块与所述第一累加结果寄存器连接,用于在第二阶段,得到所述第一计算结果的反码;
所述第一加法计算模块还分别与所述第二取反模块、所述第二进位输入端、所述第二进位输出端和所述第一数据输出端连接;所述第一加法计算模块用于在所述第一计算结果为负时,在第二阶段计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据,从第二进位输出端输出;
其中,级联的第1个所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为1;其余每级所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为0。
可选地,所述第二累加子单元包括:第三取反模块、第四取反模块、第二加法计算模块、第二反码寄存器、第二累加结果寄存器、进位寄存器、异或计算模块和第二中间过程符号寄存器;
所述第三取反模块与所述第二数据输入端连接,用于在第一阶段将所述第二数据输入端输入的数据取反码,得到第二反码数据;
所述第二反码寄出器分别与所述第二数据输入端、所述第三取反模块连接,用于存储所述第二数据输入端输入的数据,或者,用于存储所述第三取反模块得到所述第二反码数据;
所述第二加法计算模块分别与所述第二反码寄存器、所述第三进位输入端、所述第二累加结果寄存器、以及进位寄存器连接;若所述第二符号输入端输入的符号为正,所述第二加法计算模块用于在第一阶段,计算所述第二数据输入端输入的数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;若所述第二符号输入端输入的符号为负,所述第二加法计算模块用于在第一阶段,计算所述第二反码数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;
所述异或计算模块分别与所述进位寄存器、所述第二符号输入端、所述第二中间过程符号寄存器、中间过程符号输出端连接;所述异或计算模块用于在第一阶段,计算所述进位寄存器存储的进位数据、所述第二符号输入端输入的正或负的符号、与所述第二中间过程符号寄存器存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从所述中间过程符号输出端输出,同时,存储至所述第二中间过程符号寄存器;
所述第二累加结果寄存器还与所述第二数据输出端连接,用于在所述第二符号输入端输入的符号为正时,在第二阶段,将所述第三计算结果从所述第二数据输出端输出;
所述第四取反模块与所述第二累加结果寄存器连接,用于在第二阶段,得到第三计算结果的反码;
所述第二加法计算模块还分别与所述第四取反模块、所述第四进位输入端、所述进位寄存器、所述第二数据输出端连接;所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据,存储至所述进位寄存器;
所述第二中间过程符号寄存器与所述结果符号输出端连接,用于在第二阶段,将所述第二中间过程符号寄存器存储的中间过程符号从所述结果符号输出端输出。
可选地,所述第一累加子单元还包括第一中间过程符号寄存器;所述第一中间过程符号寄存器连接中间过程符号输入端;
其中,每级所述第一累加子单元的所述中间过程符号输入端与所述第二累加子单元的所述中间过程符号输出端连接,用于接收所述第二累加子单元的所述中间过程符号输出端输出的中间过程符号,并存储于所述第一中间过程符号寄存器中;
所述第一加法计算模块用于在所述第一计算结果为负时,在第二阶段计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器输出的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据,从第二进位输出端输出,包括:
所述第一加法计算模块用于在所述中间过程符号输入端输入的符号为负时,在第二阶段,当所述第一计算结果等于所述第一内置参数寄存器存储的第二参数,所述第二进位输入端输入的进位数据为1或所述第一内置参数寄存器存储的所述第一参数为1时;或者,当所述第一计算结果等于所述第一内置参数寄存器存储的第三参数,所述第二进位输入端输入的进位数据与所述第一内置参数寄存器存储的所述第一参数均为1时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为1,从第二进位输出端输出;当为其他情况时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为0,从第二进位输出端输出;
其中,所述第二参数为0,所述第三参数为1。
可选地,所述第二累加子单元还包括第二内置参数寄存器;
所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据,存储至所述进位寄存器,包括:
所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段,当所述第三计算结果等于所述第二内置参数寄存器存储的第四参数,且所述第四进位输入端输入的进位数据为1时,计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为1,存储至所述进位寄存器;若为其他情况,则计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为0,存储至所述进位寄存器;
其中,所述第四参数为0。
可选地,所述第一累加子单元还连接第一使能输入端、第二使能输入端、第一使能输出端、第二使能输出端;上一级所述第一累加子单元的第一使能输出端和第二使能输出端,分别与下一级所述第一累加子单元的第一使能输入端和第二使能输入端连接;
所述第二累加子单元还连接第三使能输入端、第四使能输入端;最后一级所述第一累加子单元的第一使能输出端和第二使能输出端,分别与所述第二累加子单元的第三使能输入端和第四使能输入端连接;
所述第一累加子单元在所述第一使能输入端的信号的控制下,进行第一阶段工作;在第二使能输入端的信号的控制下,进行第二阶段工作;
所述第二累加子单元在所述第三使能输入端的信号的控制下,进入第一阶段工作;在第四使能输入端的信号的控制下,进行第二阶段工作。
可选地,所述第一累加子单元还包括第一完成模块;所述第一完成模块连接第一完成标志端和第二完成标志端;
所述第一完成模块用于在第一阶段,所述第一计算结果存储至所述第一累加结果寄存器后,向所述第一完成标志端输出高电平,指示所述第一累加子单元的第一阶段工作完成;所述第一完成模块还用于在第二阶段,所述第一计算结果或者所述第二计算结果从所述第一数据输出端输出后,向所述第二完成标志端输出高电平,指示所述第一累加子单元的第二阶段工作完成;
所述第二累加子单元还包括第二完成模块;所述第二完成模块连接第三完成标志端和第四完成标志端;
所述第二完成模块用于在第一阶段,所述第三计算结果存储至所述第二累加结果寄存器后,向所述第三完成标志端输出高电平,指示所述第二累加子单元的第一阶段工作完成;所述第二完成模块还用于在第二阶段,所述第三计算结果或者所述第四计算结果从所述第二数据输出端输出后,向所述第四完成标志端输出高电平,指示所述第二累加子单元的第二阶段工作完成。
可选地,所述第一累加子单元还包括第一清零模块;所述第一清零模块连接第一清零端;
所述第二累加子单元还包括第二清零模块;所述第二清零模块连接第二清零端;
每级所述第一累加子单元的所述第一清零端、所述第二累加子单元的所述第二清零端,均与所述第二累加子单元的所述第四完成标志端连接;
所述第一清零模块用于在所述第一清零端接收到所述第四完成标志端输出的高电平时,对所述第一反码寄存器、所述第一累加结果寄存器、所述第一中间过程符号寄存器进行清零;所述第二清零模块用于在所述第二清零端接收到所述第四完成标志端输出的高电平时,对所述第二反码寄存器、所述第二累加结果寄存器、所述进位寄存器、所述第二中间过程符号寄存器进行清零。
可选地,所述第一累加子单元还包括第一复位模块,所述第一复位模块连接第一复位端;
所述第二累加子单元还包括第二复位模块,所述第二复位模块连接第二复位端;
每级所述第一累加子单元的所述第一复位端、所述第二累加子单元的所述第二复位端,均与用于对所述累加单元进行复位的复位端连接;所述第一复位模块用于在所述复位端的控制下,对所述第一累加子单元进行复位;所述第二复位模块用于在所述复位端的控制下,对所述第二累加子单元进行复位。
可选地,第1级所述第一累加子单元的第一进位输入端与第二进位输入端均接地电位;
第1级所述第一累加子单元的第一使能输入端与第二使能输入端,分别与对应的一个使能端连接;
每级所述第一累加子单元的所述第一数据输入端和所述第二累加子单元的第二数据输入端分别与一一对应的一个数据端连接;
每级所述第一累加子单元的所述第一符号输入端与所述第二累加子单元的第二符号输入端,均与用于指示输入数据为正或负的符号端连接。
另一方面,本发明实施体还提供一种如上所述的累加器的运算方法,包括:
一数据帧的第一阶段:在来自第一使能输入端的电压的控制下,第一累加子单元根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据;
一数据帧的第二阶段:在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加子单元将所述第一计算结果通过第一数据输出端输出;若所述第一计算结果为负,所述第一累加子单元根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据;
一数据帧的第一阶段:在来自第三使能输入端的电压的控制下,第二累加子单元根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位数据端输入的进位数据,计算得到第三计算结果并存储;
一数据帧的第二阶段:在来自第四使能输入端的电压的控制下,若第三计算结果为正,所述第二累加子单元将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,所述第二累加子单元根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号;其中,所述第二累加子单元的第二数据输入端接地电平。
可选地,所述累加器的运算方法还包括:
输出阶段:输出单元将每级所述第一累加子单元输出的所述第一计算结果或所述第二计算结果、以及所述第二累加子单元输出的第三计算结果或第四计算结果进行位拼接并输出。
可选地,在来自第一使能输入端的电压的控制下,第一累加子单元根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据,包括:
在来自第一使能输入端的电压的控制下,若第一符号输入端输入的符号为正,第一加法计算模块计算所述第一数据输入端输入的数据、所述第一进位输入端输入的进位数据与第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
若所述第一符号输入端输入的符号为负,第一取反模块将所述第一数据输入端输入的数据取反码,得到第一反码数据;
所述第一加法计算模块计算所述第一反码数据、所述第一进位输入端输入的进位数据、所述第一内置参数寄存器存储的第一参数与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
其中,级联的第1个所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为1;其余每级所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为0。
可选地,在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加子单元将所述第一计算结果通过第一数据输出端输出;若所述第一计算结果为负,所述第一累加子单元根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据,包括:
在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加结果寄存器将所述第一计算结果从所述第一数据输出端输出;
若所述第一计算结果为负,当所述第一计算结果等于所述第一内置参数寄存器存储的第二参数,所述第二进位输入端输入的进位数据为1或所述第一内置参数寄存器存储的所述第一参数为1时;或者,当所述第一计算结果等于所述第一内置参数寄存器存储的第三参数,所述第二进位输入端输入的进位数据与所述第一内置参数寄存器存储的所述第一参数均为1时,所述第二取反模块得到所述第一计算结果的反码;所述第一加法计算模块计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据为1,从第二进位输出端输出;
当为其他情况时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为0,从第二进位输出端输出。
可选地,在来自第三使能输入端的电压的控制下,第二累加子单元根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位数据端输入的进位数据,计算得到第三计算结果并存储,包括:
在来自第三使能输入端的电压的控制下,若所述第二符号输入端输入的符号为正,所述第二加法计算模块计算所述第二数据输入端输入的数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;
若所述第二符号输入端输入的符号为负,所述第三取反模块将所述第二数据输入端输入的数据取反码,得到第二反码数据;
所述第二加法计算模块计算所述第二反码数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;
所述异或计算模块计算所述进位寄存器存储的进位数据、所述第二符号输入端输入的正或负的符号、与所述第二中间过程符号寄存器存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从所述中间过程符号输出端输出,同时,存储至所述第二中间过程符号寄存器。
可选地,在来自第四使能输入端的电压的控制下,若第三计算结果为正,所述第二累加子单元将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,所述第二累加子单元根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号,包括:
在来自第四使能输入端的电压的控制下,若所述第二符号输入端输入的符号为正,所述第二累加结果寄存器将所述第三计算结果从所述第二数据输出端输出;
若所述第二符号输入端输入的符号为负,所述第四取反模块得到第三计算结果的反码;
当所述第三计算结果等于所述第二内置参数寄存器存储的第四参数,且所述第四进位输入端输入的进位数据为1时,所述第二加法计算模块计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据为1,存储至所述进位寄存器;若为其他情况,则计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为0,存储至所述进位寄存器;
所述第二中间过程符号寄存器将所述中间过程符号从所述结果符号输出端输出。
可选地,在输出阶段之后,所述累加器的运算方法还包括:
清零阶段:在来自清零端的信号的控制下,对所述累加单元中的每个寄存器进行清零;
可选地,在一数据帧的第一阶段之前,所述累加器的运算方法还包括:
复位阶段:在来自复位端的信号的控制下,对每个所述第一累加子单元和所述第二累加子单元进行复位。
再一方面,本发明实施例还提供一种电子设备,包括如上所述的累加器。
本发明实施例提供一种累加器及其运算方法,通过采用级联的方式,使k个第一累加子单元和1个第二累加子单元构成一个更大位宽的累加单元以便于进行累加计算;并通过设置第一累加子单元连接第一数据输入端、第一进位输入端、第二进位输入端、第一符号输入端、第一数据输出端、第一进位输出端和第二进位输出端;第二累加子单元连接第二数据输入端、第三进位输入端、第四进位输入端、第二符号输入端、第二数据输出端和结果符号输出端;以使得第一累加子单元用于在第一阶段,根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据;并且,若第一计算结果为正,则在第二阶段,将第一计算结果通过第一数据输出端输出;若第一计算结果为负,则在第二阶段,根据第二进位输入端输入的进位数据以及第一计算结果,计算得到第二计算结果并通过第一数据输出端输出,以及通过第二进位输出端输出进位数据;使得第二累加子单元用于在第一阶段,根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位输入端输入的进位数据,计算得到第三计算结果并存储;其中,若第三计算结果为正,则在第二阶段,将第三计算结果通过第二数据输出端输出;若第三计算结果为负,则在第二阶段,根据第四进位输入端输入的进位数据以及第三计算结果,计算得到第四计算结果并通过第二数据输出端输出数据,以及通过结果符号输出端输出符号;从而可以根据需求,调整累加单元中第一累加子单元的个数和位宽,进而可以提升累加运算的极限频率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为本发明实施例提供的一种累加器的结构示意图;
图1b为本发明实施例提供的另一种累加器的结构示意图;
图2a为本发明实施例提供的一种第一累加子单元在第一阶段的结构示意图;
图2b为本发明实施例提供的一种第一累加子单元在第二阶段的结构示意图;
图3为本发明实施例提供的另一种第一累加子单元在第二阶段的结构示意图;
图4a为本发明实施例提供的一种第二累加子单元在第一阶段的结构示意图;
图4b为本发明实施例提供的一种第二累加子单元在第二阶段的结构示意图;
图5为本发明实施例提供的另一种第二累加子单元在第二阶段的结构示意图;
图6a为本发明实施例提供的再一种第一累加子单元在第一阶段的结构示意图;
图6b为本发明实施例提供的再一种第一累加子单元在第二阶段的结构示意图;
图7a为本发明实施例提供的再一种第二累加子单元在第一阶段的结构示意图;
图7b为本发明实施例提供的再一种第二累加子单元在第二阶段的结构示意图;
图8a为本发明实施例提供的又一种第一累加子单元在第一阶段的结构示意图;
图8b为本发明实施例提供的又一种第一累加子单元在第二阶段的结构示意图;
图9a为本发明实施例提供的又一种第二累加子单元在第一阶段的结构示意图;
图9b为本发明实施例提供的又一种第二累加子单元在第二阶段的结构示意图;
图10为本发明实施例提供的又一种第一累加子单元的结构示意图;
图11为本发明实施例提供的又一种第二累加子单元的结构示意图;
图12为本发明实施例提供的再一种累加器的结构示意图;
图13为本发明实施例提供的一种累加器的运算方法的流程示意图;
图14为本发明实施例提供的一种累加器的运算方法的流程示意图;
图15a为本发明实施例提供的一种第一累加子单元的流程示意图;
图15b为本发明实施例提供的一种第二累加子单元的流程示意图;
图16a为本发明实施例提供的一种第1级第一累加子单元的时序示意图;
图16b为本发明实施例提供的一种第二累加子单元的时序示意图。
附图标记:
1-累加器;10-累加单元;20-输出单元;100-第一累加子单元;101-第一取反模块;102-第二取反模块;103-第一加法计算模块;104-第一反码寄存器;105-第一累加结果寄存器;106-第一内置参数寄存器;107-第一中间过程符号寄存器;108-第一完成模块;109-第一清零模块;110-第一复位模块;200-第二累加子单元;201-第三取反模块;202-第四取反模块;203-第二加法计算模块;204-第二反码寄存器;205-第二累加结果寄存器;206-进位寄存器;207-异或计算模块;208-第二中间过程符号寄存器;209-第二内置参数寄存器;210-第二完成模块;211-第二清零模块;212-第二复位模块。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例提供一种累加器,如图1a、图2a、图2b、图4a和图4b所示,包括:累加单元10。
累加单元10包括级联的k个第一累加子单元100和1个第二累加子单元200。
第一累加子单元100连接第一数据输入端data_in_a、第一进位输入端carry_in_a、第二进位输入端carry_in_b、第一符号输入端sign_in_a、第一数据输出端data_out_a、第一进位输出端carry_out_a和第二进位输出端carry_out_b。上一级第一累加子单元100的第一进位输出端carry_out_a和第二进位输出端carry_out_b,分别与下一级第一累加子单元100的第一进位输入端carry_in_a和第二进位输入端连接carry_in_b。
第二累加子单元200连接第二数据输入端data_in_b、第三进位输入端carry_in_c、第四进位输入端carry_in_d、第二符号输入端sign_in_b、第二数据输出端data_out_b和结果符号输出端sign_out;最后一级第一累加子单元100的第一进位输出端carry_out_a和第二进位输出端carry_out_b,分别与第二累加子单元200的第三进位输入端carry_in_c和第四进位输入端连接carry_in_d。
第一累加子单元100用于在第一阶段,根据第一数据输入端data_in_a输入的数据、第一符号输入端sign_in_a输入的正或负的符号、第一进位输入端carry_in_a输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端carry_out_a输出进位数据。
其中,若第一计算结果为正,则在第二阶段,将第一计算结果通过第一数据输出端data_out_a输出;若第一计算结果为负,则在第二阶段,根据第二进位输入端carry_in_b输入的进位数据以及第一计算结果,计算得到第二计算结果并通过第一数据输出端data_out_a输出,以及通过第二进位输出端carry_out_b输出进位数据。
第一符号输入端sign_in_a输入的符号,用于指示的是第一数据输入端data_in_a输入的数据为正或为负。
第一累加子单元100的个数和位宽均可以根据需要进行设置,本发明对此不进行限定。并且,每个第一累加子单元100的位宽是独立的。
需要说明的是,若一个累加器的数据传输总位宽固定,则级联的第一累加子单元100越多,极限频率提升越快。
示例一,一个累加器的数据传输总位宽为32bit,可以采用4个8bit的第一累加子单元100进行级联,也可以采用2个16bit的第一累加子单元100进行级联。此处,相对于采用2个16bit的第一累加子单元100进行级联,采用4个8bit的第一累加子单元100进行级联的极限频率更高。
示例二,一个累加器的数据传输总位宽为31bit,可以采用3个8bit的第一累加子单元100和1个7bit的第一累加子单元100进行级联,也可以采用1个16bit的第一累加子单元100和1个15bit的第一累加子单元100进行级联。此处,相对于采用1个16bit的第一累加子单元100和1个15bit的第一累加子单元100进行级联,采用3个8bit的第一累加子单元100和1个7bit的第一累加子单元100进行级联的极限频率更高。
第二累加子单元200用于在第一阶段,根据第二数据输入端data_in_b输入的数据、第二符号输入端sign_in_b输入的正或负的符号、以及第三进位输入端carry_in_c输入的进位数据,计算得到第三计算结果并存储。
其中,若第三计算结果为正,则在第二阶段,将第三计算结果通过第二数据输出端data_out_b输出;若第三计算结果为负,则在第二阶段,根据第四进位输入端carry_in_d输入的进位数据以及第三计算结果,计算得到第四计算结果并通过第二数据输出端data_out_b输出数据,以及通过结果符号输出端sign_out输出符号。
第二累加子单元200的第二数据输入端data_in_b接地电平。
需要说明的是,设置第二累加子单元200的目的是为了防止数据溢出,即,当计算得到的累加结果产生进位,超出了预设的总位宽时,对其超出总位宽的部分进行计算,由此,第二累加子单元的数据输入端不需要输入数据,直接接地电平。
其中,第二累加子单元200的位宽可以根据需要进行设置,本发明对此不进行限定。
本发明实施例提供一种累加器,通过采用级联的方式,使k个第一累加子单元和1个第二累加子单元构成一个更大位宽的累加单元以便于进行累加计算;并通过设置第一累加子单元连接第一数据输入端、第一进位输入端、第二进位输入端、第一符号输入端、第一数据输出端、第一进位输出端和第二进位输出端;第二累加子单元连接第二数据输入端、第三进位输入端、第四进位输入端、第二符号输入端、第二数据输出端和结果符号输出端;以使得第一累加子单元用于在第一阶段,根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据;并且,若第一计算结果为正,则在第二阶段,将第一计算结果通过第一数据输出端输出;若第一计算结果为负,则在第二阶段,根据第二进位输入端输入的进位数据以及第一计算结果,计算得到第二计算结果并通过第一数据输出端输出,以及通过第二进位输出端输出进位数据;使得第二累加子单元用于在第一阶段,根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位输入端输入的进位数据,计算得到第三计算结果并存储;其中,若第三计算结果为正,则在第二阶段,将第三计算结果通过第二数据输出端输出;若第三计算结果为负,则在第二阶段,根据第四进位输入端输入的进位数据以及第三计算结果,计算得到第四计算结果并通过第二数据输出端输出数据,以及通过结果符号输出端输出符号;从而可以根据需求,调整累加单元10中第一累加子单元的个数和位宽,进而可以提升累加运算的极限频率。
可选地,如图1b所示,累加器还包括输出单元20。
输出单元20分别与每级第一累加子单元100的第一数据输出端data_out_a、第二累加子单元200的第二数据输出端data_out_b连接,用于对每级第一累加子单元100输出的第一计算结果或第二计算结果、以及第二累加子单元输出的第三计算结果或第四计算结果进行位拼接并输出。
示例的,第一累加子单元100的位宽为8bit,第二累加子单元20的位宽为4bit,若累加器中有级联的4个第一累加子单元100和1个第二累加子单元,则输出单元20输出的数据实际位宽为36bit。
可选地,如图2a和图2b所示,第一累加子单元100包括:第一取反模块101、第二取反模块102、第一加法计算模块103、第一反码寄存器104、第一累加结果寄存器105和第一内置参数寄存器106。
第一取反模块101与第一数据输入端data_in_a连接,用于在第一阶段将第一数据输入端data_in_a输入的数据取反码,得到第一反码数据。
第一反码寄存器104分别与第一数据输入端data_in_a、第一取反模块101连接,用于存储第一数据输入端data_in_a输入的数据,或者,用于存储第一取反模块101得到的第一反码数据。
第一加法计算模块103分别与第一反码寄存器104、第一进位输入端carry_in_a、第一累加结果寄存器105、第一内置参数寄存器106以及第一进位输出端carry_out_a连接。
若第一符号输入端sign_in_a输入的符号为正,第一加法计算模块103用于在第一阶段,计算第一数据输入端data_in_a输入的数据、第一进位输入端carry_in_a输入的进位数据与第一累加结果寄存器105存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至第一累加结果寄存器105中,同时,计算得到进位数据,并从第一进位输出端carry_out_a输出。
若第一符号输入端sign_in_a输入的符号为负,第一加法计算模块103用于在第一阶段,计算第一反码数据、第一进位输入端carry_in_a输入的进位数据、第一内置参数寄存器106存储的第一参数(即,carry_juge_a)与第一累加结果寄存器105存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至第一累加结果寄存器105中,同时,计算得到进位数据,并从第一进位输出端carry_out_a输出。
第一累加结果寄存器105还与第一数据输出端data_out_a连接,用于在第一计算结果为正时,在第二阶段,将第一计算结果从第一数据输出端data_out_a输出。
第二取反模块102与第一累加结果寄存器105连接,用于在第二阶段,得到第一计算结果的反码。
第一加法计算模块103还分别与第二取反模块102、第二进位输入端carry_in_b、第二进位输出端carry_in_b和第一数据输出端data_out_a连接。
第一加法计算模块103用于在第一计算结果为负时,在第二阶段计算第一计算结果的反码、第二进位输入端carry_in_b输入的进位数据、第一内置参数寄存器106存储的第一参数之和,作为第二计算结果从第一数据输出端data_out_a输出,同时,计算得到进位数据,从第二进位输出端carry_out_b输出。
其中,级联的第1个第一累加子单元100中,第一内置参数寄存器106存储的第一参数为1。其余每级第一累加子单元100中,第一内置参数寄存器106存储的第一参数为0。
需要说明的是,若第一符号输入端sign_in_a输入的符号为正,说明第一数据输入端data_in_a输入的数据为正数,根据原码转为补码的运算规则可知,正数的补码即为正数本身。因此,第一加法计算模块103用于直接对第一数据输入端data_in_a输入的数据、第一进位输入端carry_in_a输入的进位数据与第一累加结果寄存器105存储的上一次第一计算结果进行求和运算,求得的本次第一计算结果即为正数的补码累加结果。
若第一符号输入端sign_in_a输入的符号为负,说明第一数据输入端data_in_a输入的数据为负数,根据原码转补码的运算规则可知,负数的补码等于其数值取反后加1。因此,首先,第一取反模块101先对第一数据输入端data_in_a输入的数据进行取反,得到第一反码数据;然后,第一加法计算模块103对第一反码数据与第一内置参数寄存器106存储的第一参数(carry_juge_a=1)相加,再与第一进位输入端carry_in_a输入的进位数据、第一累加结果寄存器105存储的上一次第一计算结果进行求和,求得的本次第一计算结果即为负数的补码累加结果。
基于此,若第一计算结果为正数,即,补码累加结果为正数时,根据补码转为原码的运算规则可知,正数补码对应的原码即为正数补码本身。因此,在第二阶段,第一累加结果寄存器105直接将第一计算结果从第一数据输出端data_out_a输出,输出原码累加结果。
若第一计算结果为负数,即,补码累加结果为负数时,根据补码转为原码的运算规则可知,负数补码对应的原码等于其数值取反后加1。因此,首先,第二取反模块102先对第一累加结果寄存器105存储的第一计算结果取反,得到第一计算结果的反码;然后,第一加法计算模块103将第一计算结果的反码与第一内置参数寄存器106存储的第一参数(carry_juge_a=1)相加,再与第二进位输入端carry_in_b输入的进位数据进行求和,输出原码累加结果。
可以理解的是,无论是多少位总位宽的负数,从原码转换为补码时或者从补码转换为原码时,只需要在最低位加1即可。因此,级联的第1个第一累加子单元100的第一内置参数寄存器106存储的第一参数为1,即为计算过程中所加的1;其余每级的第一累加子单元100中的第一内置参数寄存器106存储的第一参数则为0。
可选地,如图3所示,第一累加子单元100还包括第一中间过程符号寄存器107;第一中间过程符号寄存器107连接中间过程符号输入端sign_in_comp。
其中,如图12所示,每级第一累加子单元100的中间过程符号输入端sign_in_comp与第二累加子单元200的中间过程符号输出端sign_out_comp连接,用于接收第二累加子单元200的中间过程符号输出端sign_out_comp输出的中间过程符号,并存储于第一中间过程符号寄存器107中。第一加法计算模块103用于在第一计算结果为负时,在第二阶段计算第一计算结果的反码、第二进位输入端carry_in_b输入的进位数据、第一内置参数寄存器106存储的第一参数之和,作为第二计算结果从第一数据输出端data_out_a输出,同时,计算得到进位数据,从第二进位输出端carry_out_b输出,包括:
第一加法计算模块103用于在中间过程符号输入端sign_in_comp输入的符号为负时,在第二阶段,当第一计算结果等于第一内置参数寄存器106存储的第二参数carry_juge_b,第二进位输入端carry_in_b输入的进位数据为1或第一内置参数寄存器106存储的第一参数为1时;或者,当第一计算结果等于第一内置参数寄存器106存储的第三参数carry_juge_c,第二进位输入端carry_in_b输入的进位数据与第一内置参数寄存器106存储的第一参数均为1时,计算第一计算结果的反码、第二进位输入端输入的进位数据、第一内置参数寄存器106存储的第一参数之和,作为第二计算结果从第一数据输出端data_out_a输出,同时,计算得到的进位数据为1,从第二进位输出端carry_out_b输出。
当为其他情况时,计算第一计算结果的反码、第二进位输入端carry_in_b输入的进位数据、第一内置参数寄存器106存储的第一参数carry_juge_a之和,作为第二计算结果从第一数据输出端data_out_a输出,同时,计算得到的进位数据为0,从第二进位输出端输出。即,说明并没有进位。
其中,第二参数carry_juge_b为0,第三参数carry_juge_c为1。
可以理解的是,中间过程符号输入端sign_in_comp输入的符号为负,表示的是第一计算结果为负。
需要说明的是,在第二阶段,当第一计算结果等于第一内置参数寄存器106存储的第二参数carry_juge_b时,即,第一计算结果的每一位数值均等于0时,由于第一计算结果为负数,第二取反模块102得到的第一计算结果的反码的各位数值均为1,此时,第一加法计算模块103将第一计算结果的反码与第二进位输入端carry_in_b输入的进位数据,第一内置参数寄存器106存储的第一参数求和时,第二进位输入端carry_in_b输入的进位数据为1或第一内置参数寄存器106存储的第一参数为1,均会使该第二计算结果产生向下一级的进位,因此,从第二进位输出端carry_out_b输出的进位数据为1。
或者,在第二阶段,当第一计算结果等于第一内置参数寄存器106存储的第三参数carry_juge_c时,即,第一计算结果的最低位数值等于1,其它位数值为0时,由于第一计算结果为负数,第二取反模块102得到第一计算结果的反码的最低位为0,其它位均为1,此时,第一加法计算模块103将第一计算结果的反码与第二进位输入端carry_in_b输入的进位数据,第一内置参数寄存器106存储的第一参数求和时,第二进位输入端carry_in_b输入的进位数据与第一内置参数寄存器106存储的第一参数均为1,会使该第二计算结果产生向下一级的进位,因此,从第二进位输出端carry_out_b输出的进位数据为1。
而在其他情况下时,第一加法计算模块103的计算并不会产生向下一级的进位,因此,相当于进位数据为0。
可选地,如图4a和图4b所示,第二累加子单元200包括:第三取反模块201、第四取反模块202、第二加法计算模块203、第二反码寄存器204、第二累加结果寄存器205、进位寄存器206、异或计算模块207和第二中间过程符号寄存器208。
第三取反模块201与第二数据输入端data_in_b连接,用于在第一阶段将第二数据输入端data_in_b输入的数据取反码,得到第二反码数据。
第二反码寄出器24分别与第二数据输入端data_in_b、第三取反模块201连接,用于存储第二数据输入端data_in_b输入的数据,或者,用于存储第三取反模块201得到第二反码数据。
第二加法计算模块203分别与第二反码寄存器204、第三进位输入端carry_in_c、第二累加结果寄存器205、以及进位寄存器206连接。
若第二符号输入端sign_in_b输入的符号为正,第二加法计算模块203用于在第一阶段,计算第二数据输入端data_in_b输入的数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至第二累加结果寄存器205中,同时,计算得到进位数据,并存储至进位寄存器206。
若第二符号输入端sign_in_b输入的符号为负,第二加法计算模块203用于在第一阶段,计算第二反码数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至第二累加结果寄存器205中,同时,计算得到进位数据,并存储至进位寄存器206。
异或计算模块207分别与进位寄存器206、第二符号输入端sign_in_b、第二中间过程符号寄存器208、中间过程符号输出端sign_out_comp连接。异或计算模块207用于在第一阶段,计算进位寄存器206存储的进位数据、第二符号输入端sign_in_b输入的正或负的符号、与第二中间过程符号寄存器208存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从中间过程符号输出端sign_out_comp输出,同时,存储至第二中间过程符号寄存器208。
第二累加结果寄存器205还与第二数据输出端data_out_b连接,用于在第二符号输入端sign_in_b输入的符号为正时,在第二阶段,将第三计算结果从第二数据输出端data_out_b输出。
第四取反模块202与第二累加结果寄存器205连接,用于在第二阶段,得到第三计算结果的反码。
第二加法计算模块203还分别与第四取反模块202、第四进位输入端carry_in_d、进位寄存器206、第二数据输出端data_out_b连接。
第二加法计算模块203用于在所述第二符号输入端sign_in_b输入的符号为负时,在第二阶段计算第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到进位数据,存储至进位寄存器206。
第二中间过程符号寄存器208与结果符号输出端sign_out连接,用于在第二阶段,将第二中间过程符号寄存器208存储的中间过程符号从结果符号输出端sign_out输出。
需要说明的是,若第二符号输入端sign_in_b输入的符号为正,说明第二数据输入端data_in_b输入的数据为正数,根据原码转为补码的运算规则可知,正数的补码即为正数本身。因此,第二加法计算模块203用于之间对第二数据输入端data_in_b输入的数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果进行求和运算,求得的本次第三计算结果即为正数的补码累加结果。
若第二符号输入端sign_in_b输入的符号为负,说明第二数据输入端data_in_b输入的数据为负数,根据原码转补码的换算规则可知,负数的补码等于其数值取反加1(低位已经加1,此处仅需要取反)。因此,首先第三取反模块201先对第二数据输入端data_in_b输入的数据进行取反,得到第二反码数据;然后,第二加法计算模块203对第二反码数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果进行求和,求得的本次第三计算结果即为负数的补码累加结果。
基于此,若第三计算结果为正数,即,补码累加结果为正数时,根据补码转为原码的换算规则可知,正数补码对应的原码即为整数补码本身。因此,在第二阶段,第二累加结果寄存器205直接将第三计算结果从第二数据输出端data_out_b输出,输出原码累加结果。
若第三计算结果为负数,即,补码累加结果为负数,根据补码转为原码的换算规则可知,负数补码对应的原码等于其数值取反后加1(低位已经加1,此处仅需要取反)。因此,首先,第四取反模块202先对第二累加结果寄存器205存储的第三计算结果取反,得到第三计算结果的反码;然后,第二加法计算模块203对第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据求和,输出原码累加结果。
可选地,如图5所示,第二累加子单元200还包括第二内置参数寄存器209。
第二加法计算模块203用于在第二符号输入端sign_in_b输入的符号为负时,在第二阶段计算第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到进位数据,存储至进位寄存器206,包括:
第二加法计算模块203用于在第二符号输入端sign_in_b输入的符号为负时,在第二阶段,当第三计算结果等于第二内置参数寄存器209存储的第四参数carry_juge_d,且第四进位输入端carry_in_d输入的进位数据为1时,计算第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到的进位数据为1,存储至进位寄存器206。
当为其他情况时,计算第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到的进位数据为0,存储至所述进位寄存器206。
其中,所述第四参数为0。
需要说明的是,在第二阶段,当第三计算结果等于第二内置参数寄存器209存储的第四参数carry_juge_d时,即,第三计算结果的每一位数值均等于0时,由于第三计算结果为负数,第四取反模块202得到第三计算结果的反码的各位数值均为1,此时,第二加法计算模块203将第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据求和时,第四进位输入端carry_in_d输入的进位数据为1,会使该第四计算结果产生进位,因此,存储至进位寄存器的进位数据为1。
可选地,如图6a和图6b所示,第一累加子单元100还连接第一使能输入端en_in_a、第二使能输入端en_in_b、第一使能输出端en_out_a、第二使能输出端en_out_b。
如图12所示,上一级第一累加子单元100的第一使能输出端en_out_a和第二使能输出端en_out_b,分别与下一级第一累加子单元100的第一使能输入端en_in_a和第二使能输入端连接en_in_b。
如图7a和图7b所示,第二累加子单元200还连接第三使能输入端en_in_c、第四使能输入端en_in_d。
如图12所示,最后一级第一累加子单元100的第一使能输出端en_out_a和第二使能输出端en_out_b,分别与第二累加子单元200的第三使能输入端en_in_c和第四使能输入端en_in_d连接。
第一累加子单元100在第一使能输入端en_in_a的信号的控制下,进行第一阶段工作;在第二使能输入端的en_in_b信号的控制下,进行第二阶段工作。
第二累加子单元200在第三使能输入端en_in_c的信号的控制下,进入第一阶段工作;在第四使能输入端en_in_d的信号的控制下,进行第二阶段工作。
可选地,如图8a和图8b所示,第一累加子单元100还包括第一完成模块108。第一完成模块108连接第一完成标志端acc_flag1和第二完成标志端acc_flag2。
第一完成模块108用于在第一阶段,第一计算结果存储至第一累加结果寄存器105后,向第一完成标志端acc_flag1输出高电平,指示第一累加子单元100的第一阶段工作完成。第一完成模块108还用于在第二阶段,第一计算结果或者第二计算结果从第一数据输出端data_out_a输出后,向第二完成标志端acc_flag2输出高电平,指示第一累加子单元100的第二阶段工作完成。
如图9a和图9b所示,第二累加子单元200还包括第二完成模块210。第二完成模块210连接第三完成标志端acc_flag3和第四完成标志端acc_flag4。
第二完成模块210在第一阶段,第三计算结果存储至第二累加结果寄存器205后,向第三完成标志端acc_flag3输出高电平,指示第二累加子单元200的第一阶段工作完成。第二完成模块210还用于在第二阶段,第三计算结果或者第四计算结果从第二数据输出端data_out_b输出后,向第四完成标志端acc_flag4输出高电平,指示第二累加子单元200的第二阶段工作完成。
可选地,如图10、图11和图12所示,第一累加子单元100还包括第一清零模块109,第一清零模块109连接第一清零端acc_clc_a。
第二累加子单元200还包括第二清零模块211,第二清零模块211连接第二清零端acc_clc_b。
每级第一累加子单元100的第一清零端acc_clc_a、第二累加子单元的第二清零端acc_clc_b,均与第二累加子单元200的第四完成标志端acc_flag4连接。
第一清零模块109用于在第一清零端acc_clc_a接收到第四完成标志端acc_flag4输出的高电平时,对第一反码寄存器104、第一累加结果寄存器105、第一中间过程符号寄存器107进行清零;第二清零模块211用于在第二清零端acc_clc_b接收到第四完成标志端acc_flag4输出的高电平时,控制第二清零模块211对第二反码寄存器204、第二累加结果寄存器205、进位寄存器206、第二中间过程符号寄存器208进行清零。
可选地,如图10、图11和图12所示,第一累加子单元100还包括第一复位模块110,第一复位模块110连接第一复位端rst_n_a。
第二累加子单元200还包括第二复位模块212,第二复位模块212连接第二复位端rst_n_b。
每级第一累加子单元100的第一复位端rst_n_a、第二累加子单元200的第二复位端rst_n_b,均与用于对累加单元10进行复位的复位端rst_n连接。
第一复位模块110用于在复位端rst_n的控制下,对第一累加子单元100进行复位;第二复位模块212用于在复位端rst_n的控制下,对第二累加子单元200进行复位。
可选地,如图12所示,第1级第一累加子单元100的第一进位输入端carry_in_a与第二进位输入端carry_in_b均接地电位。
第1级第一累加子单元100的第一使能输入端en_in_a与第二使能输入端en_in_b,分别与对应的一个使能端连接。
每级第一累加子单元100的第一数据输入端data_in_a和第二累加子单元200的第二数据输入端data_in_b分别与一一对应的一个数据端连接。
每级第一累加子单元100的第一符号输入端sign_in_a与第二累加子单元200的第二符号输入端sign_in_b,均与用于指示输入数据为正或负的符号端sign_in连接。
可以理解的是,第1级第一累加子单元100在计算时,不存在前一级,以及前一级向本级的进位,因此,第一进位输入端carry_in_a与第二进位输入端carry_in_b均接地电位。
本发明的实施例还提供一种累加器的运算方法,如图13所示,包括:
S10、一数据帧的第一阶段:在来自第一使能输入端en_in_a的电压的控制下,第一累加子单元100根据第一数据输入端data_in_a输入的数据、第一符号输入端sign_in_a输入的正或负的符号、第一进位输入端carry_in_a输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端carry_out_a输出进位数据。
S20、一数据帧的第二阶段:在来自第二使能输入端en_in_b的电压的控制下,若第一计算结果为正,第一累加子单元100将第一计算结果通过第一数据输出端data_out_a输出;若第一计算结果为负,第一累加子单元100根据第二进位输入端carry_in_b输入的进位数据以及第一计算结果,计算得到第二计算结果并通过第一数据输出端data_out_a输出,以及通过第二进位输出端carry_out_b输出进位数据。
S30、一数据帧的第一阶段:在来自第三使能输入端en_in_c的电压的控制下,第二累加子单元200根据第二数据输入端data_in_b输入的数据、第二符号输入端sign_in_b输入的正或负的符号、以及第三进位数据端carry_in_c输入的进位数据,计算得到第三计算结果并存储。
S40、一数据帧的第二阶段:在来自第四使能输入端en_in_d的电压的控制下,若第三计算结果为正,第二累加子单元200将第三计算结果通过第二数据输出端data_out_b输出;若第三计算结果为负,第二累加子单元200根据第四进位输入端输入的进位数据以及第三计算结果,计算得到第四计算结果并通过第二数据输出端data_out_b输出数据,以及通过结果符号输出端sign_out输出符号。
其中,所述第二累加子单元200的第二数据输入端接地电平。
可选地,如图14所示,上述S40之后,累加器的运算方法还包括:
S50、输出阶段:输出单元20将每级第一累加子单元100输出的第一计算结果或第二计算结果、以及第二累加子单元200输出的第三计算结果或第四计算结果进行位拼接并输出。
可选地,如图15a所示,上述S10包括:
S11、判断第一使能输入端en_in_a的电压是否为高电平?
S12、若第一使能输入端en_in_a的电压为高电平,判断第一符号输入端sign_in_a输入的符号为正或负?
S13、若第一符号输入端sign_in_a输入的符号为正,第一加法计算模块103计算第一数据输入端data_in_a输入的数据、第一进位输入端carry_in_a输入的进位数据与第一累加结果寄存器105存储的上一次第一计算结果temp_comp_a之和,作为本次第一计算结果,并存储至第一累加结果寄存器105中,同时,计算得到进位数据,并从第一进位输出端carry_out_a输出。
可选地,上述S13包括:
S131、若第一符号输入端sign_in_a输入的符号为正,第一数据输入端data_in_a输入的数据存储至第一反码寄存器104,同时,第一使能输出端en_out_a输出高电平。
需要说明的是,第一使能输出端输出高电平,使得与本级相连的下一级第一累加子单元100或第二累加子单元200进入第一阶段工作。
S132、第一加法计算模块103计算第一数据输入端data_in_a输入的数据、第一进位输入端carry_in_a输入的进位数据与第一累加结果寄存器105存储的上一次第一计算结果temp_comp_a之和,作为本次第一计算结果temp_comp_a,并存储至第一累加结果寄存器105中,同时,计算得到进位数据,并从第一进位输出端carry_out_a输出,且第一使能输出端en_out_a输出低电平,第一完成标志端acc_flag1输出高电平。
需要说明的是,第一使能输出端输出低电平,第一完成标志端输出高电平,表明本级第一累加子单元100的第一阶段工作结束。
S14、若第一符号输入端sign_in_a输入的符号为负,第一取反模块101将第一数据输入端data_in_a输入的数据取反码,得到第一反码数据,存储至第一反码寄存器104,同时,第一使能输出端en_out_a输出高电平。
S15、第一加法计算模块103计算第一反码数据、第一进位输入端carry_in_a输入的进位数据、第一内置参数寄存器106存储的第一参数carry_juge_a与第一累加结果寄存器105存储的上一次第一计算结果temp_comp_a之和,作为本次第一计算结果temp_comp_a,并存储至第一累加结果寄存器105中,同时,计算得到进位数据,并从第一进位输出端carry_out_a输出,且第一使能输出端en_out_a输出低电平,第一完成标志端acc_flag1输出高电平。
其中,级联的第1个第一累加子单元100中,第一内置参数寄存器106存储的第一参数为1;其余每级第一累加子单元100中,第一内置参数寄存器106存储的第一参数为0。
需要说明的是,若第一使能输入端持续为高电平,则可循环多次循环上述S11~S15,对第一数据输入端data_in_a输入的数据进行多次累加。
可选地,如图15a所示,上述S20包括:
S21、若第一使能输入端en_in_a的电压为低电平,则判断第二使能输入端en_in_b的电压是否为高电平?
S22、若第二使能输入端en_in_b的电压为低电平,则说明第一累加子单元100并没未工作。
S23、若第二使能输入端en_in_b的电压为高电平,则判断第一计算结果为正或负?
需要说明的是,第一累加子单元100的中间结果输入端输入的正或负,即指示的是第一计算结果的符号,因此,判断第一计算结果为正或负,只需判断中间结果输入端的输入为正或负。
S24、若第一计算结果为正(即,sign_in_comp=0),第一累加子单元100将第一计算结果temp_comp_a通过第一数据输出端data_out_a输出,同时,第一使能输出端en_out_a输出高电平。
S25、若第一计算结果为负(即,sign_in_comp=1),第一累加子单元100根据第二进位输入端carry_in_b输入的进位数据以及第一计算结果temp_comp_a,计算得到第二计算结果并通过第一数据输出端data_out_a输出,以及通过第二进位输出端carry_in_b输出进位数据。
可选地,如图15b所示,上述S24包括:
S251、若第一计算结果temp_comp_a为负,当第一计算结果等于第一内置参数寄存器106存储的第二参数carry_juge_b,第二进位输入端carry_in_b输入的进位数据为1或第一内置参数寄存器106存储的第一参数carry_juge_a为1时;或者,当第一计算结果等于第一内置参数寄存器106存储的第三参数carry_juge_c,第二进位输入端carry_in_b输入的进位数据与第一内置参数寄存器106存储的第一参数carry_juge_a均为1时,第二取反模块102得到第一计算结果的反码;
第一加法计算模块103计算第一计算结果的反码、第二进位输入端carry_in_b输入的进位数据、第一内置参数寄存器106存储的第一参数carry_juge_a之和,作为第二计算结果从第一数据输出端carry_out_b输出,同时,计算得到进位数据为1,从第二进位输出端carry_out_b输出,且第二使能输出端en_out_b输出高电平。
需要说明的是,第二使能输出端en_out_b输出高电平,使得与本级第一累加子单元100相连的后一级第一累加子单元100或第二累加子单元200进入第二阶段工作。
S252、当为其他情况时,计算第一计算结果的反码、第二进位输入端carry_in_b输入的进位数据、第一内置参数寄存器106存储的第一参数carry_juge_a之和,作为第二计算结果从第一数据输出端data_out_a输出,同时,计算得到的进位数据为0,从第二进位输出端carry_out_b输出,且第二使能输出端en_out_b输出高电平。
S26、第二完成标志端acc_flag2输出高电平,拉高时钟信号clk。
第二完成标志端acc_flag2输出高电平,表明本级第一累加子单元100的第二阶段工作结束。拉高时钟信号clk后开始进行下一个数据的累加操作。
可选地,如图15b所示,上述S30包括:
S31、判断第三使能输入端en_in_c的电压是否为高电平?
S32、若第三使能输入端en_in_c的电压为高电平,判断第二符号输入端sign_in_b输入的符号为正或负?
S33、若第二符号输入端sign_in_b输入的符号为正,第二加法计算模块203计算第二数据输入端data_in_b输入的数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果temp_comp_c之和,作为本次第三计算结果temp_comp_c,并存储至第二累加结果寄存器205中,同时,计算得到进位数据,并存储至进位寄存器206。
可选地,上述S33包括:
S331、若第二符号输入端sign_in_b输入的符号为正,第二数据输入端data_in_b输入的数据存储至第二反码寄存器204。
S332、第二加法计算模块203计算第二数据输入端data_in_b输入的数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果temp_comp_c之和,作为本次第三计算结果temp_comp_c,并存储至第二累加结果寄存器205中,同时,计算得到进位数据,并存储至进位寄存器206。
S34、若第二符号输入端sign_in_b输入的符号为负,第三取反模块201将第二数据输入端data_in_b输入的数据取反码,得到第二反码数据。存储至第二反码寄存器204。
S35、第二加法计算模块203计算第二反码数据、第三进位输入端carry_in_c输入的进位数据与第二累加结果寄存器205存储的上一次第三计算结果temp_comp_c之和,作为本次第三计算结果temp_comp_c,并存储至第二累加结果寄存器205中,同时,计算得到进位数据carry_in_comp,并存储至进位寄存器206。
S36、异或计算模块207计算进位寄存器206存储的进位数据carry_in_comp、第二符号输入端sign_in_b输入的正或负的符号、与第二中间过程符号寄存器存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从中间过程符号输出端sign_out_comp输出,同时,存储至第二中间过程符号寄存器,且第三完成标志端acc_flag3输出高电平。
需要说明的是,若第三使能输入端en_in_c持续为高电平,则可循环多次循环上述S31~S36,对第二数据输入端data_in_b输入的数据进行多次累加。
可选地,如图15b所示,上述S40包括:
S41、若第三使能输入端en_in_c的电压为低电平,则判断第四使能输入端en_in_d的电压是否为高电平?
S42、若第四使能输入端en_in_d的电压为低电平,则说明第二累加子单元200并未工作。
S43、若第四使能输入端en_in_d的电压为高电平,则判断第二符号输入端sign_in_b输入的符号为正或负?
S44、若第二符号输入端sign_in_b输入的符号为正,第二累加子单元将第三计算结果temp_comp_c通过第二数据输出端data_out_b输出,同时,第四使能输出端en_out_d输出高电平。
S45、若第二符号输入端sign_in_b输入的符号为负,第四取反模块得到第三计算结果的反码;第二加法计算模块203计算所述第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到进位数据carry_in_comp为1,存储至进位寄存器206。
S46、若为其他情况,则计算第三计算结果的反码、第四进位输入端carry_in_d输入的进位数据之和,作为第四计算结果从第二数据输出端data_out_b输出,同时,计算得到的进位数据carry_in_comp为0,存储至所述进位寄存器206。
S47、第二中间过程符号寄存器将中间过程符号从结果符号输sign_out出端输出。
可选地,如图15b所示,上述S47包括:
S471、若中间过程符号为负,则结果符号输出端sign_out输出高电平且第四完成标志端acc_flag4输出高电平。
S472、若中间过程符号为正,则结果符号输出端sign_out输出低电平且第四完成标志端acc_flag4输出高电平。
可选地,累加器的运算方法还包括:
S60、清零阶段:在来自清零端的信号的控制下,对所述累加单元10中的每个寄存器进行清零。
可选地,在上述S10之前,累加器的运算方法还包括:
S1、复位阶段:在来自复位端的信号的控制下,对第一累加子单元100和第二累加子单元200进行复位。
示例的,如图16a和图16b所示,利用包括4个8bit位宽的第一累加子单元100和1个4bit位宽的第二累加子单元200的累加单元10对+8、-200、-150、+25、-189、+208该6个数据进行累加计算,第1级第一累加子单元100的各端口的时序图如图16a所示,第二累加子单元200的各端口的时序图如图16b所示,当第四完成标志输出端acc_flag4拉高时,输出单元20对第一累加子单元100和第二累加子单元200输出的数据位拼接后得到298,此时,结果符号输出端sign_out为负,说明该6个数据的累加结果为-298。
本发明的实施例还提供一种电子设备,包括如上所述的累加器。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (18)
1.一种累加器,其特征在于,包括:累加单元;
所述累加单元包括级联的k个第一累加子单元和1个第二累加子单元;
所述第一累加子单元连接第一数据输入端、第一进位输入端、第二进位输入端、第一符号输入端、第一数据输出端、第一进位输出端和第二进位输出端;上一级所述第一累加子单元的第一进位输出端和第二进位输出端,分别与下一级所述第一累加子单元的第一进位输入端和第二进位输入端连接;
所述第二累加子单元连接第二数据输入端、第三进位输入端、第四进位输入端、第二符号输入端、第二数据输出端和结果符号输出端;最后一级所述第一累加子单元的第一进位输出端和第二进位输出端,分别与所述第二累加子单元的第三进位输入端和第四进位输入端连接;
所述第一累加子单元用于在第一阶段,根据所述第一数据输入端输入的数据、所述第一符号输入端输入的正或负的符号、所述第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过所述第一进位输出端输出进位数据;其中,若所述第一计算结果为正,则在第二阶段,将所述第一计算结果通过所述第一数据输出端输出;若所述第一计算结果为负,则在第二阶段,根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据;
所述第二累加子单元用于在第一阶段,根据所述第二数据输入端输入的数据、所述第二符号输入端输入的正或负的符号、以及所述第三进位输入端输入的进位数据,计算得到第三计算结果并存储;其中,若所述第三计算结果为正,则在第二阶段,将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,则在第二阶段,根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号;所述第二累加子单元的第二数据输入端接地电平;
所述累加器还包括输出单元;
所述输出单元分别与每级所述第一累加子单元的第一数据输出端、所述第二累加子单元的第二数据输出端连接,用于对每级所述第一累加子单元输出的所述第一计算结果或所述第二计算结果、以及所述第二累加子单元输出的第三计算结果或所述第四计算结果进行位拼接并输出。
2.根据权利要求1所述的累加器,其特征在于,所述第一累加子单元包括:第一取反模块、第二取反模块、第一加法计算模块、第一反码寄存器、第一累加结果寄存器和第一内置参数寄存器;
所述第一取反模块与所述第一数据输入端连接,用于在第一阶段将所述第一数据输入端输入的数据取反码,得到第一反码数据;
所述第一反码寄存器分别与所述第一数据输入端、所述第一取反模块连接,用于存储所述第一数据输入端输入的数据,或者,用于存储所述第一取反模块得到的所述第一反码数据;
所述第一加法计算模块分别与所述第一反码寄存器、所述第一进位输入端、所述第一累加结果寄存器、所述第一内置参数寄存器以及所述第一进位输出端连接;若所述第一符号输入端输入的符号为正,所述第一加法计算模块用于在第一阶段,计算所述第一数据输入端输入的数据、所述第一进位输入端输入的进位数据与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;若所述第一符号输入端输入的符号为负,所述第一加法计算模块用于在第一阶段,计算所述第一反码数据、所述第一进位输入端输入的进位数据、所述第一内置参数寄存器存储的第一参数与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
所述第一累加结果寄存器还与所述第一数据输出端连接,用于在所述第一计算结果为正时,在第二阶段,将所述第一计算结果从所述第一数据输出端输出;
所述第二取反模块与所述第一累加结果寄存器连接,用于在第二阶段,得到所述第一计算结果的反码;
所述第一加法计算模块还分别与所述第二取反模块、所述第二进位输入端、所述第二进位输出端和所述第一数据输出端连接;所述第一加法计算模块用于在所述第一计算结果为负时,在第二阶段计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据,从第二进位输出端输出;
其中,级联的第1个所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为1;其余每级所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为0。
3.根据权利要求1所述的累加器,其特征在于,所述第二累加子单元包括:第三取反模块、第四取反模块、第二加法计算模块、第二反码寄存器、第二累加结果寄存器、进位寄存器、异或计算模块和第二中间过程符号寄存器;
所述第三取反模块与所述第二数据输入端连接,用于在第一阶段将所述第二数据输入端输入的数据取反码,得到第二反码数据;
所述第二反码寄出器分别与所述第二数据输入端、所述第三取反模块连接,用于存储所述第二数据输入端输入的数据,或者,用于存储所述第三取反模块得到所述第二反码数据;
所述第二加法计算模块分别与所述第二反码寄存器、所述第三进位输入端、所述第二累加结果寄存器、以及所述进位寄存器连接;若所述第二符号输入端输入的符号为正,所述第二加法计算模块用于在第一阶段,计算所述第二数据输入端输入的数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;若所述第二符号输入端输入的符号为负,所述第二加法计算模块用于在第一阶段,计算所述第二反码数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;
所述异或计算模块分别与所述进位寄存器、所述第二符号输入端、所述第二中间过程符号寄存器、中间过程符号输出端连接;所述异或计算模块用于在第一阶段,计算所述进位寄存器存储的进位数据、所述第二符号输入端输入的正或负的符号、与所述第二中间过程符号寄存器存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从所述中间过程符号输出端输出,同时,存储至所述第二中间过程符号寄存器;
所述第二累加结果寄存器还与所述第二数据输出端连接,用于在所述第二符号输入端输入的符号为正时,在第二阶段,将所述第三计算结果从所述第二数据输出端输出;
所述第四取反模块与所述第二累加结果寄存器连接,用于在第二阶段,得到第三计算结果的反码;
所述第二加法计算模块还分别与所述第四取反模块、所述第四进位输入端、所述进位寄存器、所述第二数据输出端连接;所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据,存储至所述进位寄存器;
所述第二中间过程符号寄存器与所述结果符号输出端连接,用于在第二阶段,将所述第二中间过程符号寄存器存储的中间过程符号从所述结果符号输出端输出。
4.根据权利要求2所述的累加器,其特征在于,所述第一累加子单元还包括第一中间过程符号寄存器;所述第一中间过程符号寄存器连接中间过程符号输入端;
其中,每级所述第一累加子单元的所述中间过程符号输入端与所述第二累加子单元的所述中间过程符号输出端连接,用于接收所述第二累加子单元的所述中间过程符号输出端输出的中间过程符号,并存储于所述第一中间过程符号寄存器中;
所述第一加法计算模块用于在所述第一计算结果为负时,在第二阶段计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器输出的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据,从第二进位输出端输出,包括:
所述第一加法计算模块用于在所述中间过程符号输入端输入的符号为负时,在第二阶段,当所述第一计算结果等于所述第一内置参数寄存器存储的第二参数,所述第二进位输入端输入的进位数据为1或所述第一内置参数寄存器存储的所述第一参数为1时;或者,当所述第一计算结果等于所述第一内置参数寄存器存储的第三参数,所述第二进位输入端输入的进位数据与所述第一内置参数寄存器存储的所述第一参数均为1时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为1,从第二进位输出端输出;当为其他情况时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为0,从第二进位输出端输出;
其中,所述第二参数为0,所述第三参数为1。
5.根据权利要求3所述的累加器,其特征在于,所述第二累加子单元还包括第二内置参数寄存器;
所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据,存储至所述进位寄存器,包括:
所述第二加法计算模块用于在所述第二符号输入端输入的符号为负时,在第二阶段,当所述第三计算结果等于所述第二内置参数寄存器存储的第四参数,且所述第四进位输入端输入的进位数据为1时,计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为1,存储至所述进位寄存器;若为其他情况,则计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为0,存储至所述进位寄存器;
其中,所述第四参数为0。
6.根据权利要求4或5所述的累加器,其特征在于,所述第一累加子单元还连接第一使能输入端、第二使能输入端、第一使能输出端、第二使能输出端;上一级所述第一累加子单元的第一使能输出端和第二使能输出端,分别与下一级所述第一累加子单元的第一使能输入端和第二使能输入端连接;
所述第二累加子单元还连接第三使能输入端、第四使能输入端;最后一级所述第一累加子单元的第一使能输出端和第二使能输出端,分别与所述第二累加子单元的第三使能输入端和第四使能输入端连接;
所述第一累加子单元在所述第一使能输入端的信号的控制下,进行第一阶段工作;在第二使能输入端的信号的控制下,进行第二阶段工作;
所述第二累加子单元在所述第三使能输入端的信号的控制下,进入第一阶段工作;在第四使能输入端的信号的控制下,进行第二阶段工作。
7.根据权利要求6所述的累加器,其特征在于,所述第一累加子单元还包括第一完成模块;所述第一完成模块连接第一完成标志端和第二完成标志端;
所述第一完成模块用于在第一阶段,所述第一计算结果存储至第一累加结果寄存器后,向所述第一完成标志端输出高电平,指示所述第一累加子单元的第一阶段工作完成;所述第一完成模块还用于在第二阶段,所述第一计算结果或者所述第二计算结果从所述第一数据输出端输出后,向所述第二完成标志端输出高电平,指示所述第一累加子单元的第二阶段工作完成;
所述第二累加子单元还包括第二完成模块;所述第二完成模块连接第三完成标志端和第四完成标志端;
所述第二完成模块用于在第一阶段,所述第三计算结果存储至第二累加结果寄存器后,向所述第三完成标志端输出高电平,指示所述第二累加子单元的第一阶段工作完成;所述第二完成模块还用于在第二阶段,所述第三计算结果或者所述第四计算结果从所述第二数据输出端输出后,向所述第四完成标志端输出高电平,指示所述第二累加子单元的第二阶段工作完成。
8.根据权利要求7所述的累加器,其特征在于,所述第一累加子单元还包括第一清零模块;所述第一清零模块连接第一清零端;
所述第二累加子单元还包括第二清零模块;所述第二清零模块连接第二清零端;
每级所述第一累加子单元的所述第一清零端、所述第二累加子单元的所述第二清零端,均与所述第二累加子单元的所述第四完成标志端连接;
所述第一清零模块用于在所述第一清零端接收到所述第四完成标志端输出的高电平时,对第一反码寄存器、所述第一累加结果寄存器、第一中间过程符号寄存器进行清零;所述第二清零模块用于在所述第二清零端接收到所述第四完成标志端输出的高电平时,对第二反码寄存器、所述第二累加结果寄存器、进位寄存器、第二中间过程符号寄存器进行清零。
9.根据权利要求8所述的累加器,其特征在于,所述第一累加子单元还包括第一复位模块,所述第一复位模块连接第一复位端;
所述第二累加子单元还包括第二复位模块,所述第二复位模块连接第二复位端;
每级所述第一累加子单元的所述第一复位端、所述第二累加子单元的所述第二复位端,均与用于对所述累加单元进行复位的复位端连接;所述第一复位模块用于在所述复位端的控制下,对所述第一累加子单元进行复位;所述第二复位模块用于在所述复位端的控制下,对所述第二累加子单元进行复位。
10.根据权利要求9所述的累加器,其特征在于,第1级所述第一累加子单元的第一进位输入端与第二进位输入端均接地电位;
第1级所述第一累加子单元的第一使能输入端与第二使能输入端,分别与对应的一个使能端连接;
每级所述第一累加子单元的所述第一数据输入端和所述第二累加子单元的第二数据输入端分别与一一对应的一个数据端连接;
每级所述第一累加子单元的所述第一符号输入端与所述第二累加子单元的第二符号输入端,均与用于指示输入数据为正或负的符号端连接。
11.一种如权利要求1-10任一项所述的累加器的运算方法,其特征在于,包括:
一数据帧的第一阶段:在来自第一使能输入端的电压的控制下,第一累加子单元根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据;
一数据帧的第二阶段:在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加子单元将所述第一计算结果通过第一数据输出端输出;若所述第一计算结果为负,所述第一累加子单元根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据;
一数据帧的第一阶段:在来自第三使能输入端的电压的控制下,第二累加子单元根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位输入端输入的进位数据,计算得到第三计算结果并存储;
一数据帧的第二阶段:在来自第四使能输入端的电压的控制下,若第三计算结果为正,所述第二累加子单元将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,所述第二累加子单元根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号;其中,所述第二累加子单元的第二数据输入端接地电平;
所述累加器的运算方法还包括:
输出阶段:输出单元将每级所述第一累加子单元输出的所述第一计算结果或所述第二计算结果、以及所述第二累加子单元输出的第三计算结果或第四计算结果进行位拼接并输出。
12.根据如权利要求11所述的累加器的运算方法,其特征在于,在来自第一使能输入端的电压的控制下,第一累加子单元根据第一数据输入端输入的数据、第一符号输入端输入的正或负的符号、第一进位输入端输入的进位数据,计算得到第一计算结果并存储,以及通过第一进位输出端输出进位数据,包括:
在来自第一使能输入端的电压的控制下,若第一符号输入端输入的符号为正,第一加法计算模块计算所述第一数据输入端输入的数据、所述第一进位输入端输入的进位数据与第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
若所述第一符号输入端输入的符号为负,第一取反模块将所述第一数据输入端输入的数据取反码,得到第一反码数据;
所述第一加法计算模块计算所述第一反码数据、所述第一进位输入端输入的进位数据、第一内置参数寄存器存储的第一参数与所述第一累加结果寄存器存储的上一次第一计算结果之和,作为本次第一计算结果,并存储至所述第一累加结果寄存器中,同时,计算得到进位数据,并从所述第一进位输出端输出;
其中,级联的第1个所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为1;其余每级所述第一累加子单元中,所述第一内置参数寄存器存储的第一参数为0。
13.根据如权利要求11所述的累加器的运算方法,其特征在于,在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加子单元将所述第一计算结果通过第一数据输出端输出;若所述第一计算结果为负,所述第一累加子单元根据所述第二进位输入端输入的进位数据以及所述第一计算结果,计算得到第二计算结果并通过所述第一数据输出端输出,以及通过所述第二进位输出端输出进位数据,包括:
在来自第二使能输入端的电压的控制下,若所述第一计算结果为正,所述第一累加结果寄存器将所述第一计算结果从所述第一数据输出端输出;
若所述第一计算结果为负,当所述第一计算结果等于第一内置参数寄存器存储的第二参数,所述第二进位输入端输入的进位数据为1或所述第一内置参数寄存器存储的第一参数为1时;或者,当所述第一计算结果等于所述第一内置参数寄存器存储的第三参数,所述第二进位输入端输入的进位数据与所述第一内置参数寄存器存储的所述第一参数均为1时,第二取反模块得到所述第一计算结果的反码;第一加法计算模块计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到进位数据为1,从第二进位输出端输出;
当为其他情况时,计算所述第一计算结果的反码、所述第二进位输入端输入的进位数据、所述第一内置参数寄存器存储的所述第一参数之和,作为第二计算结果从所述第一数据输出端输出,同时,计算得到的进位数据为0,从第二进位输出端输出。
14.根据如权利要求11所述的累加器的运算方法,其特征在于,在来自第三使能输入端的电压的控制下,第二累加子单元根据第二数据输入端输入的数据、第二符号输入端输入的正或负的符号、以及第三进位输入端输入的进位数据,计算得到第三计算结果并存储,包括:
在来自第三使能输入端的电压的控制下,若所述第二符号输入端输入的符号为正,第二加法计算模块计算所述第二数据输入端输入的数据、所述第三进位输入端输入的进位数据与第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至进位寄存器;
若所述第二符号输入端输入的符号为负,第三取反模块将所述第二数据输入端输入的数据取反码,得到第二反码数据;
所述第二加法计算模块计算所述第二反码数据、所述第三进位输入端输入的进位数据与所述第二累加结果寄存器存储的上一次第三计算结果之和,作为本次第三计算结果,并存储至所述第二累加结果寄存器中,同时,计算得到进位数据,并存储至所述进位寄存器;
异或计算模块计算所述进位寄存器存储的进位数据、所述第二符号输入端输入的正或负的符号、与第二中间过程符号寄存器存储的上一次中间过程符号的异或结果,作为本次中间过程符号,从所述中间过程符号输出端输出,同时,存储至所述第二中间过程符号寄存器。
15.根据如权利要求11所述的累加器的运算方法,其特征在于,在来自第四使能输入端的电压的控制下,若第三计算结果为正,所述第二累加子单元将所述第三计算结果通过所述第二数据输出端输出;若所述第三计算结果为负,所述第二累加子单元根据所述第四进位输入端输入的进位数据以及所述第三计算结果,计算得到第四计算结果并通过所述第二数据输出端输出数据,以及通过所述结果符号输出端输出符号,包括:
在来自第四使能输入端的电压的控制下,若所述第二符号输入端输入的符号为正,所述第二累加结果寄存器将所述第三计算结果从所述第二数据输出端输出;
若所述第二符号输入端输入的符号为负,第四取反模块得到第三计算结果的反码;
当所述第三计算结果等于第二内置参数寄存器存储的第四参数,且所述第四进位输入端输入的进位数据为1时,第二加法计算模块计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到进位数据为1,存储至进位寄存器;若为其他情况,则计算所述第三计算结果的反码、所述第四进位输入端输入的进位数据之和,作为第四计算结果从所述第二数据输出端输出,同时,计算得到的进位数据为0,存储至所述进位寄存器;
第二中间过程符号寄存器将所述中间过程符号从所述结果符号输出端输出。
16.根据如权利要求11所述的累加器的运算方法,其特征在于,所述累加器的运算方法还包括:
清零阶段:在来自清零端的信号的控制下,对所述累加单元中的每个寄存器进行清零。
17.根据如权利要求11所述的累加器的运算方法,其特征在于,在一数据帧的第一阶段之前,所述累加器的运算方法还包括:
复位阶段:在来自复位端的信号的控制下,对每个所述第一累加子单元和所述第二累加子单元进行复位。
18.一种电子设备,其特征在于,包括权利要求1-10任一项所述的累加器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910936918.XA CN110647308B (zh) | 2019-09-29 | 2019-09-29 | 累加器及其运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910936918.XA CN110647308B (zh) | 2019-09-29 | 2019-09-29 | 累加器及其运算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647308A CN110647308A (zh) | 2020-01-03 |
CN110647308B true CN110647308B (zh) | 2021-12-28 |
Family
ID=69012171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910936918.XA Active CN110647308B (zh) | 2019-09-29 | 2019-09-29 | 累加器及其运算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647308B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113805840B (zh) * | 2021-11-18 | 2022-05-03 | 南京风兴科技有限公司 | 快速累加器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB796323A (en) * | 1954-12-13 | 1958-06-11 | Gen Electric | Improvements relating to electronic digital calculating apparatus |
CN101986572A (zh) * | 2009-07-29 | 2011-03-16 | 中兴通讯股份有限公司 | 正交频分复用系统中随机接入信号的检测方法与装置 |
CN103427850A (zh) * | 2012-05-24 | 2013-12-04 | 中兴通讯股份有限公司 | 多模维特比解码装置及其解码方法 |
CN104102470A (zh) * | 2014-07-23 | 2014-10-15 | 中国电子科技集团公司第五十八研究所 | 可配置可扩展的流水线乘累加器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB1383661A (en) * | 1971-04-30 | 1974-02-12 | Shinomura N | Temperature measuring equipment |
US10643297B2 (en) * | 2017-05-05 | 2020-05-05 | Intel Corporation | Dynamic precision management for integer deep learning primitives |
-
2019
- 2019-09-29 CN CN201910936918.XA patent/CN110647308B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB796323A (en) * | 1954-12-13 | 1958-06-11 | Gen Electric | Improvements relating to electronic digital calculating apparatus |
CN101986572A (zh) * | 2009-07-29 | 2011-03-16 | 中兴通讯股份有限公司 | 正交频分复用系统中随机接入信号的检测方法与装置 |
CN103427850A (zh) * | 2012-05-24 | 2013-12-04 | 中兴通讯股份有限公司 | 多模维特比解码装置及其解码方法 |
CN104102470A (zh) * | 2014-07-23 | 2014-10-15 | 中国电子科技集团公司第五十八研究所 | 可配置可扩展的流水线乘累加器 |
Non-Patent Citations (2)
Title |
---|
Accumulate-Turbo Codes for Redundant Data;Gil I. Shamir;《2008 5th International Symposium on Turbo Codes and Related Topics》;20081024;390-395 * |
基于FPGA的复杂函数发生器研究;曹郑蛟;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120715(第 07 期);I137-193 * |
Also Published As
Publication number | Publication date |
---|---|
CN110647308A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0741354B1 (en) | Multi-operand adder using parallel counters | |
CN113703840B (zh) | 数据处理装置、方法、芯片、计算机设备及存储介质 | |
CN110647308B (zh) | 累加器及其运算方法 | |
US5764557A (en) | Product-sum calculation apparatus, product-sum calculating unit integrated circuit apparatus, and cumulative adder suitable for processing image data | |
US20080098057A1 (en) | Multiplication Apparatus | |
EP2280340B1 (en) | Processor, control method of processor, and computer readable storage medium storing processing program | |
JPH02281811A (ja) | ディジタルフィルタ処理装置 | |
JP6567213B2 (ja) | デジタル演算処理回路 | |
US20150012574A1 (en) | Model calculation unit and control unit for calculating a data-based function model having data in various number formats | |
KR100913467B1 (ko) | 병렬 순환 중복 검사 코드 발생 시스템 및 방법 | |
CN103428502A (zh) | 一种解码方法及解码系统 | |
US7472147B2 (en) | Random number string output apparatus, random number string output method, program, and information recording medium | |
JP2002111447A (ja) | ディジタルフィルタ | |
JP2010165173A (ja) | Naf変換装置 | |
US9342270B2 (en) | Conversion of a normalized n-bit value into a normalized m-bit value | |
JP3595449B2 (ja) | 累積加算回路 | |
CN116540977B (zh) | 模乘法器电路、fpga电路和asic模块 | |
JP4408727B2 (ja) | ディジタル回路 | |
JP5606516B2 (ja) | Naf変換装置 | |
KR100335252B1 (ko) | 비트 분리 구조의 고속 디지털 필터 | |
JP2000137701A (ja) | 積和演算誤差補正方法及び積和演算装置 | |
CN114895868A (zh) | 基于两位商计算的除法运算单元及除法器 | |
CN117813610A (zh) | 电子设备及神经网络量化方法 | |
KR940007925B1 (ko) | 부호처리 기능을 가진 누산기 | |
JP3803653B2 (ja) | 乗算処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |