一种除法运算方法及装置
技术领域
本发明涉及一种利用数制表示且应用在半导体器件的非线性组合数字除法计算方法以及实现这种运算方法的除法装置,更具体地,本发明涉及一种除法运算方法及采用该方法的运算装置。
背景技术
在工控领域内,微控制器近几年的应用越来越广泛和重要,特别是在电子、航空航天、家电、通信等领域已经达到无可取代的程度。传统的微控制器的设计,在执行除法运算指令时总是把相减和移位操作放在两个不同的时钟周期内,也就是移位操作必须在相减操作完成之后的下一个时钟周期内来执行。在对微控制器运算速度要求不高的条件下,该除法指令的实现方法也许能够应对。但是随着科学技术的发展以及对控制技术要求的提高,特别是在高端的嵌入式领域内,该种除法指令实现方法的速度慢性能低的缺点就严重的暴露出来了。
针对此问题,技术人员研究发展出各种能够提高除法运算效率的方法,其中公开号为CN1423189,名称为“一种除法器”的中国发明专利提出了一种采用移位运算和减法运算的除法器,包括减法器、移位器1.比较器、移位器2.移位加法器,计数器和复选器;除数经过所述移位器1移位后与被除数一起输入所述减法器,所述减法器的输出连接到所述比较器和所述计数器,所述比较器与所述移位加法器和所述移位器2相连,所述移位加法器与所述移位器的输出送至所述复选器,所述计数器控制所述复选器的输出是否返回所述减法器。
上述专利文件中提出的除法运算方法把一个除法运算用减法和移位操作来实现,移位根据减法操作的结果来进行相应的操作。但是该方法仍把相减和移位放在了两个时钟周期内来完成,从根本上说依然没有最大化的缩减一个除法运算的时钟周期数,这样就很难达到各种状况下对微控制器执行指令的快速高效的要求。
发明内容
本发明的发明目的在于提供一种效率高、速度快且指令状态进行周期优化的除法运算方法,同时还提供了采用这种运算方法的除法运算装置。
为了实现上述的发明目的,本发明采用如下的技术方案:
本发明所提供的除法的运算方法概括来说包括如下的几步运算步骤:
(1)在寄存单元内存入无符号整数的被除数、除数,以及中间值;
(2)对被除数以及中间值进行联合左移位操作,并计算中间值左移位操作后与除数之间的差值;
(3)在与步骤(2)同一时钟周期内,如果步骤(2)中所述差值大于等于0,则将所述的差值替代并作为所述的中间值,并将被除数最低位置1替代原有的被除数;如果步骤(2)中所述差值小于0,则将被除数最低位置0替代原有的被除数;
(4)判断移位次数是否等于所述被除数的存储位数,一般来说也是寄存单元的存储位数,如果不是则返回步骤2重新执行,如果是则结束运算。
优选地,在步骤(1)中所述的被除数存储在所述的累加器中,所述的除数存储在所述的寄存器中,所述的中间值存储在所述的第二暂存器中;在步骤(2)开始运算之后,所述的除数存储在第一暂存器中,所述的被除数存储在寄存器中并开始运算。这样,在整个运算方法运算结束之后所述的寄存器内存储除法运算的商,所述的第二暂存器内存储的是除法运算的余数,当然可以根据需要将上述的商或者余数转移到累加器或者寄存器中方便调用。另外,在整个除法运算方法开始运算之前,在步骤(1)中存入的中间值为整数0。
为了优化整个除法运算方法的计算周期,在所述步骤(2)中被除数以及中间值进行左移位操作,并且计算中间值左移位操作后与除数之间的差值,这两步操作是在同一时钟周期内完成的。同时需要说明的是,由于本除法运算方法是基于无符号的整数之间的运算关系,因此上述的移位操作采用的是逻辑左移操作,避免符号位对整个运算方法产生不必要的影响。
更具体地,通过在运算逻辑单元内设置的不同功能模块,上述除法运算方法中各个计算步骤通过运算逻辑单元内的不同功能模块完成。具体来说,所述步骤(2)中的左移位操作通过移位器完成,所述的差值运算通过加法器完成,所述的整个运算过程中的比较运算均通过比较器完成,所述的整个运算过程中的计数均通过计数器完成。
本发明还提供了采用上述无符号整数除法运算方法的一种除法运算装置,所述的除法运算装置包括用于进行逻辑运算的运算逻辑单元,以及用于存储数据以及中间运算数据的寄存单元,所述的寄存单元中的数据通过运算逻辑单元控制进行逻辑运算。
具体地,所述的寄存单元包括用于存储被除数的累加器,以及用于存储除数的寄存器,所述的寄存单元还至少包括用于存储逻辑运算过程的中间过渡数据的第一暂存器以及第二暂存器。当然,寄存器单元可以根据实际情况包括更多的暂存器用于存储逻辑运算中的产生的中间数据,而不限于上述说明的两个暂存器。
一般来说,所述累加器、寄存器以及所述的第一暂存器和第二暂存器的存储位数相同,优选为2指数倍,更优选的是采用8位或者16位存储单元。
更具体的说,所述的运算逻辑单元至少包括用于逻辑运算的加法器,用于控制所述的寄存单元中数据移位的移位器,用于比较运算的比较器,用于统计数据的计数器以及用于统一上述部件工作时序的晶振。
这样,通过采用上述的技术方案,本发明提供了一种运算速度快,运算效率高,并且计算周期得到优化的除法运算方法,并且还提供了一种采用上述除法运算方法的除法运算装置。
附图说明
图1中显示的是本发明所采用的除法运算装置实施例的示意图;
图2中显示的是本发明的除法运算方法实施例的流程示意图;
图3中显示的是本发明的除法运算方法实施例的时序图。
具体实施方式
本发明在于提供一种运算速度快,运算效率高的除法运算方法以及采用这种运算方法的除法运算装置。下面结合说明书附图对本发明的具体实施例进行详细的说明。
图1中显示的是本发明所采用的除法运算装置实施例的示意图。在本实施例中的除法运算装置包括用于进行逻辑运算的运算逻辑单元ALU,以及用于存储数据以及中间运算数据的寄存单元,所述的寄存单元中的数据通过运算逻辑单元ALU控制进行逻辑运算。本实施例中的寄存单元包括用于存储被除数的累加器Acc,以及用于存储除数的寄存器B,所述的寄存单元还至少包括用于存储逻辑运算过程的中间过渡数据第一暂存器Tmp1以及第二暂存器Tmp2。上述的运算逻辑单元ALU以及上述的累加器Acc,寄存器B,第一暂存器Tmp1和第二暂存器Tmp2均与除法运算装置的总线连接。在本实施例中的累加器Acc、寄存器B以及所述的第一暂存器Tmp1和第二暂存器Tmp2的存储位数相同,均为8位存储位宽。
更具体的说,在所述的运算逻辑单元包括用于逻辑运算的加法器,用于控制所述的寄存单元中数据移位的移位器,用于比较运算的比较器,用于统计数据的计数器以及用于统一上述部件工作时序的晶振。
另外该除法运算装置内还包括用于存储操作数以及其它数据的外部随机数据存储器Ram,该随机数据存储器Ram通过数据总线DB与数据寄存器DR、指令寄存器IR、指令译码器ID以及控制器Ctrl顺次连接对指令以及数据进行传输和执行,同时该随机数据存储器Ram通过地址总线AB与地址寄存器以及程序计数器PC顺次连通,用于对随机数据存储器Ram进行寻址。除此之外,算术逻辑单元ALU通过程序状态寄存器PSW与总线连通用于确定整个除法装置的程序状态。这样,整个除法运算装置具有完成本发明除法运算算法的所有功能模块,进一步地能够高效率,高速度的执行本发明除法运算方法。
图2中显示的是本发明的除法运算方法的具体实施例的流程示意图。其中所采用的除法运算方法是基于图1中显示的除法运算装置的基础之上进行运算的。
本发明所采用的除法运算方法的除法指令针对的是无符号整数,所采用的算法是”移位减”的方法。细化起来说,是在累加器Acc中存储被除数,寄存器B中存储除数。第二暂存器Tmp2清零;然后,寄存器B中的除数导入第一暂存器Tmp1中作为除数,随后将累加器Acc中的被除数导入寄存器B。而在运算逻辑单元ALU中的加法器的运算模式保持为第二暂存器Tmp2减去第一暂存器Tmp1。
在具体的操作过程中,首先,在同一时钟周期内将联合第二暂存器Tmp2以及寄存器B中的数据逻辑左移一位(其中B的最高位B[7]移入Tmp2的最低位Tmp2[0],此时B的最低位悬空),然后在运算逻辑单元ALU中执行第二暂存器Tmp2与第一暂存器Tmp1的相减操作,再使得上述两个暂存器的结果相减之后与0作比较。
如果判断的结果大于或等于0则执行如下操作:将寄存器B中数据的最低位置1,将第二暂存器Tmp2与第一暂存器Tmp1相减之后的结果导入第二暂存器Tmp2中;但是如果判断的结果小于0,则将寄存器B中的最低位置零。
然后再判断上述对寄存器B以及第二缓存器Tmp2中的数据是否进行移位操作已经移满8次(本实施例中的除数存储位数以及除法装置的数据存储位宽均为8)。倘若判断上述移位操作的次数小于8次则跳转到图1中所示的对寄存器B以及第二暂存器Tmp2中的数据进行移位操作的位置,依次循环进行相应的操作直到上述移位操作满8次为止,停止移位操作。最后一步将寄存器B中的数据导入累加器Acc中,将第二缓存器Tmp2中的数据导入到寄存器B中,即最终累加器Acc内存放的是除法运算的商,而寄存器B内存放的是余数。
为更进一步清晰地说明本设计方案是如何把除法指令的相减和移位操作在同一个时钟周期内完成的,举例说明把减法指令的每一个状态周期所执行的微操作及相应控制信号列入下表。这里执行一个除法运算一共用了十一个时钟周期,分别用S1-S11表示。特别是在下表中的在S2时钟周期状态所描述的微操作过程中,很巧妙的把除法操作S2中的步骤(2)和移位操作(3)通过组合逻辑电路在一个时钟周期内实现,这样的相减和移位操作要执行8次,所以S3至S9的操作步骤和S2基本相同,这里不再赘述了。显然,如果把相减和移位操作用两个时钟周期来完成的话,则执行一条减法指令至少要用19个时钟周期,而本发明设计的这种方法只要用11个时钟周期就足够了,这样一来提高除法运算装置执行除法运算的速度是显而易见的。
下面表格中显示的是在本发明的除法装置中完成一次除法运算所采用的典型的运算指令,具体如下:
如图3中显示的是在除法运算装置采用如图2的除法运算方法的时序示意图,其中以被除数为进制数值为00001100(十进制12),除数为二进制数值为00000100(十进制4)为例进行说明。
在整个除法运算开始阶段向累加器Acc中导入被除数00001100,向寄存器B中导入除数00000100。随后在第一个时钟周期S1内将寄存器B中的除数导入第一暂存器Tmp1=00000100,并将累加器Acc中的数据导入寄存器B=00001100,第二暂存器Tmp2=00000000。
在第二时钟周期S2内,对寄存器B和第二暂存器Tmp2进行逻辑左移位操作使得寄存器B=00011000,同时第二暂存器Tmp2=00000000,且在该时钟周期内完成第二暂存器Tmp2与第一暂存器Tmp1之差小于零的判断,寄存器B最低位置零,并返回对寄存器B和第二暂存器Tmp2进行逻辑左移位操作,反复执行直到第S8时钟周期时由于寄存器B和第二暂存器Tmp2进行逻辑左移位之后第二暂存器Tmp2的数值大于第一暂存器Tmp1内存储的除数,所以寄存器B最低位置1,同时第二暂存器Tmp2内存储第二暂存器Tmp2与第一暂存器Tmp1之间的差值,这时寄存器B=00000001,第二暂存器Tmp2=00000010,随后在S9时钟周期内完成最后一次循环操作,寄存器B的最后一位置1的同时,第二暂存器Tmp2存储第二暂存器Tmp2与第一暂存器Tmp1之间的差值,得到B=00000011,Tmp2=00000000。在随后的S10时钟周期内调用下一条命令,在S11时钟周期内将寄存器B内的数值传输到累加器Acc内,将第二暂存器Tmp2的数值传输到寄存器B内,使得随后得到的除法运算的计算的商存储在累加器Acc=00000011中,余数存储在寄存器B=00000000中。这样在11个时钟周期内就完成了通常需要19个时钟周期才能完成的除法运算。
通过采用上述的技术方案,本发明提供了一种运算速度快,运算效率高,并且计算周期得到优化的除法运算方法,并且还提供了一种采用上述除法运算方法的除法运算装置。
另外,本发明的保护范围并不局限于上述具体实施方式中所公开的具体实施例,而是只要满足本发明权利要求中技术特征的组合就落入了本发明的保护范围之内。