CN103399725A - 一种不恢复余数的除法器 - Google Patents

一种不恢复余数的除法器 Download PDF

Info

Publication number
CN103399725A
CN103399725A CN2013103439995A CN201310343999A CN103399725A CN 103399725 A CN103399725 A CN 103399725A CN 2013103439995 A CN2013103439995 A CN 2013103439995A CN 201310343999 A CN201310343999 A CN 201310343999A CN 103399725 A CN103399725 A CN 103399725A
Authority
CN
China
Prior art keywords
data
result
remainder
module
business
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.)
Granted
Application number
CN2013103439995A
Other languages
English (en)
Other versions
CN103399725B (zh
Inventor
林玻
肖偌舟
王东琳
王惠娟
张志伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Automation of Chinese Academy of Science
Original Assignee
Institute of Automation of Chinese Academy of Science
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Automation of Chinese Academy of Science filed Critical Institute of Automation of Chinese Academy of Science
Priority to CN201310343999.5A priority Critical patent/CN103399725B/zh
Publication of CN103399725A publication Critical patent/CN103399725A/zh
Application granted granted Critical
Publication of CN103399725B publication Critical patent/CN103399725B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种不恢复余数的除法器,其包括:数据预处理模块,其用于对外部输入数据做预处理,并输出值数据运算模块;数据运算模块,其用于根据外部输入数据做不恢复余数除法中的加减迭代运算,得到部分余数结果和部分商结果,并在余数修正阶段与商修正阶段对所述部分余数结果和部分商结果进行修正,然后输出余数结果、修正后的余数结果、商结果和修整后的商结果;数据输出模块,其用于根据控制模块输出的控制信号选择余数结果与修正后的余数结果之一和商结果与修正后的商结果之一输出;控制模块,其用于输出控制信号,以控制其他模块进行相应的数据处理和数据输出。

Description

一种不恢复余数的除法器
技术领域
本发明属于集成电路设计中的运算部件设计领域,尤其涉及一种基于不恢复余数的多功能定点除法器。
背景技术
基本的运算包括加、减、乘与除四种,以硬件分别为加/减法器、乘法器、除法器来实现其运算。一般来说,加/减法器运行运算步骤为1~4运算步骤,乘法器运行的运算步骤为2~8个,而除法操作则为8个运算步骤到60个运算步骤不等,甚至更多。除法一般用得较少,优先级常常被设置成较低,但是研究表明,如果忽视除法操作的实现,在某些应用中会造成显著的性能降低。实现除法的复杂度高于加减乘法,其中一种原因是可以供选择的除法算法以及硬件实现方式上较多,而具体设计一个除法器,则应该根据处理器的定位及其需要来定。
RNS(Redundant Number System)是指数的冗余表示形式,冗余是指用于表示每一位的数值的个数大于数值的基数。对一般非冗余数值表示方式来说,数值个数是等于基数的。就比如表示一个十进制数,用的数值为0~9十个数,即数值个数是与基数十同样多的。而用三个数值表示一个二进制数,即是一种冗余表示法。例如,用三数值1、0、1(表示-1)来表示二进制,那么011也可以表示为101,即表示数值为100-001=011。冗余表示法对同一个数可以有不同的表示形式,但是值是一样的。
如图1,以二进制B=2即基2为例子的除法过程示意,每次上的新商位为log2B=1位,对于恢复余数算法,过程基本与手算相类似。每次都预备新商位为1,以除数为减数,若计算得的部分余数为负数,丢弃计算所得的部分余数,恢复减法前的被加数为部分余数,即部分余数不允许为负数,新商位改为上0。
不恢复余数与恢复余数算法的主要区别便在于,部分余数允许为负数,即不需要恢复加减运算前的数据,但多了一个做加法运算的可能性。
这种算法是针对恢复余数算法的不足而改进的一种算法,恢复余数算法类似于普通的余数算法,以二进制基2除法为例,若上商为1时,减去除数后结果为负数,则恢复原数,并改上商为0。而不恢复余数法避免了这个问题,并不需要把减法过后的结果恢复成减法前的结果。而若减法结果为负,则商为1(表示-1)。只是需要一个转换表示形式的过程,但是设计的转换过程是很简便并是实时的,即并没有给电路带来较多的复杂性。
不恢复余数算法的结果需要调整,原因在于:1、按照整数除法的数学定义,得到的余数需要与被除数同号。算法的商选取不能保证这一点,若余数结果有不同,则需加上或减去除数,相应的商也需要加上或减1。2、被除数需要先变为正数再进行除法运算,所以最后需要对商及余数的符号进行调整。3、由以上原因,商格式转换造成的末位补1和由于余数调整造成的减1,商还需要另外的调整。也就是说,一般还需要进行三个处理步骤,余数调整,余数符号调整和商调整。
发明内容
为解决上述问题,本发明提出了一种不恢复余数的除法器,使得能够进行无符号或有符号定点除法运算,以支持余数修正和商修正,并能够在固定的周期数目、固定的指令排列运算步骤后得出正确结果,还能够在运算过程中随时读取中间计算结果,并且保证运算正确性。
本发明公开的一种不恢复余数的除法器,其包括:
数据预处理模块,其用于对外部输入数据做预处理,并输出值数据运算模块;
数据运算模块,其用于根据外部输入数据做不恢复余数除法中的加减迭代运算,得到部分余数结果和部分商结果,并在余数修正阶段与商修正阶段对所述部分余数结果和部分商结果进行修正,然后输出余数结果、修正后的余数结果、商结果和修整后的商结果;
数据输出模块,其用于根据控制模块输出的控制信号选择余数结果与修正后的余数结果之一和商结果与修正后的商结果之一输出;
控制模块,其用于输出控制信号,以控制其他模块进行相应的数据处理和数据输出。
本发明提出的上述除法器在固定运算步骤可完成一个Nbit的除法运算,在数个运算步骤内按照一定的操作序列与一定的循环次数重复使用该模块运算,最后得出Nbit的定点数据商与余数运算结果。
本发明公开的上述除法器是一种基于传统的RNS算法的改进型除法器装置,RNS算法在基本的除法算法上引入了中间数据(部分余数)的冗余表示形式,硬件逻辑对冗余形式数据的处理速度远远高于对一般非冗余形式数据的处理速度,RNS算法的速度较传统基本算法有较大的提升,在RNS算法此基础上,本发明更进一步的改进可直接计算有符号或无符号补码形式的数据除法,节省了数据预先转换和数据结果符号纠正过程,这样也大大节省了计算时间。在功能上,本发明可以较小的代价自行对数据计算结果进行纠正,即把纠正逻辑融入除法模块中。所以,该除法器具有能够计算有无符号定点数的除法功能,并且能够进行修正余数与修正商处理,且都能在一次运算步骤内完成,能够在固定周期后得出无误差正确结果,还能够在运算过程中随时读取中间计算结果。
从上述技术方案可以看出,本发明具有以下有益效果:
在较少步骤内完成N位定点除法计算。
对输入的除数与被除数的符号无限制。
对输入的除数与被除数是否为有无符号类型无限制。
可进行余数与商的修正。
可在任意运算步骤读取除法器的中间结果值。
不需要对被除数的符号修正做预处理,传统都需要把被除数先处理成正数再进行计算,使得修正阶段也减少了一个符号修正运算步骤。
附图说明
图1是现有技术中二进制B=2即基2为例的除法过程示意图。
图2是根据本发明第一优选实施例的不恢复余数除法器的结构示意图。
图3是根据本发明另一优选实施例的不恢复余数除法器的结构示意图。
图4是本发明中不恢复余数除法器结果寄存器主要部分的数据组成与数据流示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
本发明公开了一种不恢复余数的除法器。图2所示为本发明一优选实施例中不恢复余数的除法器结构示意图。如图2所示,该除法器包括四大部分,即数据预处理逻辑101、数据运算器102、数据输出逻辑103以及控制逻辑104。
本发明公开的上述不恢复余数的除法器在功能上可进行有无符号除法运算,并且融合了不恢复的加减运算,余数修正运算与商修正运算。该除法器首先需要对指令进行译码,通过译码得到操作类型再对输入数据进行选取和预处理,然后对选取或处理后的数据进行对应运算,该除法器采取了内部并行运算机制,即可同时对多个数据进行内部处理,这也使得输出需要经过结果选择。
对于一个除法运算指令,该除法器按照一定的操作序列与一定的循环次数重复使用该除法器的内部模块进行运算,最后得出N位的定点数据商与余数运算结果。其中,一系列的操作序列包括:
DIVS运算操作,即针对输入的数据进行有符号与无符号数据类型以及正负性辨别等而进行的预处理操作,此阶段除法器主要工作是从外部输入除数与被除数数据,并计算出带符号位的新商位,以及计算出从2至B-1倍除数的数据结果;
DIVQ运算操作,其为除法运算中的基本迭代运算操作,即以不恢复余数方法为主体的操作,此阶段除法器的主要工作是从内部输入中间结果数据进行计算,并计算出不带符号位的新商位;
MDIVR运算操作,其对DIVQ迭代运算后的结果进行余数正误性的辨别及其修正;
MDIVQ运算操作,其对DIVQ迭代运算后的结果进行商正误性的辨别及其修正;
RDIV操作,其对运算结果进行读取操作。
当除法器做DIVS运算操作时,除法器对外部数据进行采样,同时判断计算的数据类型并开始处理,对于无符号和有符号数据的除法运算在此操作的内部处理有所不同。
当除法器做DIVQ运算时,除法器进行内部循环计算,对于有符号和无符号数据的除法运算的处理一样。
当除法器做MDIVR运算时,则根据是否需要做余数调整的控制信号做调整。
当除法器做MDIVQ运算时,则根据是否需要做商结果调整的控制信号做调整。
下面根据除法器的各个模块详细介绍除法器的内部结构及其操作。
(一)数据预处理逻辑101
如图2所述,所述数据预处理逻辑101包括输入数处理模块和多路选通器,所述输入数处理模块用于接收输入数据,所述输入数据包括外部输入数据和内部循环输出数据,所述多路选通器用于从控制逻辑104接收控制指令,所述控制指令包括选通DIVS、DIVQ、MDIVR和MDIVQ通道的控制指令。
在DIVS运算操作阶段,外部指令通过控制逻辑的译码后产生输入使能信号,以控制输入数处理模块接收到的输入数据为外部输入数据,所述外部输入数据包括除数与被除数,其将被除数符号扩展为2N+log2B或更多位的数据以便内部计算需要,如图4,其中N+log2B作为被加数提供给数据运算模块102,低N-1位即被除数的低N-1位将输入至数据输出模块103的结果寄存器中。并将除数扩展为N+log2B位,其中N为输入数据的位宽,其符号扩展与所述被除数的数据类型及其符号性质相关,若为有符号运算,则为符号扩展,否则为0扩展(视为正数);之后,所述多路选通器将扩展后的被除数的之前所述的N+log2B位和N+log2B位的除数输出到数据运算模块102。
同时将把数据运算模块102其他各个运算模块中计算所得的各个倍除数的数据也通过数据输出模块103放入相应的寄存器中,以便以后的操作使用。
在DIVQ运算操作阶段,所述输入数处理模块接收的输入数据为内部循环输出数据,数据结构如图4中的结果寄存器,主要为log2B+N位部分余数,被除数剩余位以及部分商位,输入还包括寄存的各个倍数的除数数据,AQ位等等,所述AQ位用来表示所选取的部分余数结果是否与除数同号。即为DIVS运算操作阶段数据输出模块103的输出结果;该内部循环输出数据包括2N+log2B位的预处理输出数据以及N+log2B位的各个倍数的除数数据。所述多路选通器根据控制逻辑104的控制信号将所述预处理输出数据中的高N+log2B位,即如图4中前一次操作作为被加数的N+log2B位数据和N+log2B位除数选通输出至数据运算模块102,其中2倍至B-1倍除数数据不需要通过选通便可直接送入数据运算模块102的第2至第B-1个运算器中。因为在修正余数MDIVR或修正商MDIVQ阶段时候,运用到的第一个运算模块被加数可能是不同的;该阶段多路选通器还将接收到的所述内部循环输出数据直接输出至数据输出模块103,用于在数据输出模块103做选通输出使用。
在MDIVR运算操作阶段,所述输入数处理模块接收的输入数据也为内部循环输出数据,即DIVQ运算操作阶段数据输出模块103的输出结果,如图4,DIVQ阶段最后一次循环,该输出结果为包含待修正余数计算结果和待修正商计算结果的2N+log2B位的中间计算结果,其中高N+log2B位为待修正余数计算结果,低N位为待修正商计算结果。所述输入数据处理模块提取所述2N+log2B位的中间计算结果的高N+log2B位进行逻辑右移位操作,得到带符号扩展的N+log2B位数据,此N+log2B位数据即为需要修正的部分余数;所述多路选通器将所述进行了移位操作的N+log2B位部分余数数据和N+log2B位的除数选通输出到数据运算模块102中;该阶段多路选通器还将接收到的所述内部循环输出数据直接输出至数据输出模块103。
在MDIVQ运算操作阶段,所述输入数处理模块接收的输入数据依旧为内部循环输出数据,即在MDIVR运算操作阶段直接输出至数据输出模块103的所述内部循环输出数据,如图4,即在DIVQ阶段的最后一次循环中的低N位部分商,此N位部分商即为待修正商,在上一阶段MDIVR阶段不需要使用,即直接送至输出端保持给此阶段MDIVQ使用。此阶段所接受到的内部循环数据为MDIVR操作阶段所得到的结果,其中包含N+log2B位已经修正完成的余数数据,以及在MDIVR阶段保持的低N位待修正的部分商。所述输入数处理模块对所接收的输入数据的低N位即部分商结果进行符号位扩展成为N+log2B位,该低N位即待修正的商计算结果,然后通过多路选通器选通后,将该经过符号位扩展的N+log2B位数据和N+log2B位除数输出至所述数据运算模块102中。
(二)数据运算模块102
所述数据运算模块102用于对经过数据预处理逻辑101处理后的数据进行相应运算,该模块包括数个运算器以便并行计算,运算器的数量可根据需要在设计中进行配置,根据计算并行性要求可增减运算模块,若设计是基B(B为2的次幂整数)的除法器,则运算模块需要B-1个,那么计算步骤中DIVQ运算则需要N/log2B(N为被除数位宽,每次计算出log2B位新商,结果向上取整数)次运算。其主要运算功能为加减运算与移位,由控制逻辑104产生的控制信号进行控制。
每个运算器中主要包括加法器、移位器和数据校验器。所述加法器模块是运算器的主要部件,用于从数据预处理逻辑模块101接收两个N+log2B位的数据,以及从控制模块104接收加减控制信号,用于加或减运算,其中从数据预处理模块101接收的N+log2B位除数作为加数或减数,而另外一个N+log2B位作为被加数或被减数,其输出一个N+log2B+1位的结果,将其B-1个输出结果送入数据输出模块103;所述数据校验器模块主要功能是为了验证输入数据的相加减是否等于预期的特定值的逻辑,比加法器延时大大减小;其在MDIVR运算操作阶段,用于快速校验输入的两个N+log2B位数据,即所述进行了移位操作的N+log2B位部分余数数据和N+log2B位的除数相加或相减的结果是否为0,并将判断结果提供给控制模块104以判断余数修正使能信号是否开启,若两个N+log2B位的输入数据相加或相减结果为0,则说明余数结果为1倍或者-1倍除数,需要对余数进行修正,因此控制模块104输出的修正使能信号为1,即需要修正,也就是选通修正后的结果输出,若不为0,则需要进一步的逻辑运算,即控制逻辑104根据其它的信号做进一步判断。所述移位器则通过对除数的移位达到快速翻倍,即在DIVS阶段需要利用各个运算部件进行计算从1至B-1倍除数的值,移位可达到快速生成结果的效果。
在DIVS阶段,此阶段的目的主要有两个,一是做第一次加减迭代运算,即在做有符号除法时,计算得到商的符号位,在做无符号除法时,得到商结果的最高位,二是计算出2倍至B-1倍除数结果。
如图1中,传统的除法计算,每次加减迭代便得出部分余数,而部分余数的需要有收敛要求,即其结果需要大于等于0,并小于除数。而本设计所用的是不恢复余数算法,便可以容忍其部分余数可以为负数,即要求其绝对值需要小于除数。第一次迭代加减运算,即把被除数的最高1位符号扩展为N+log2B位与从N位扩展至N+log2B位的除数做加减迭代运算,其结果也必符合收敛条件(除数不能为0)。而还需要计算出2倍至B-1倍除数结果的原因是,因为是基B的除法器,如图1,每次在部分余数后添的位数为log2B位(被除数的后续log2B位,之后的描述可能为左移log2B位),根据之前的收敛条件,所得到的部分余数绝对值小于一倍除数,那么在增添了log2B位尾数后,其值的范围在-(B-1)倍至B-1倍除数之间,依旧以为了得到符合收敛性质的部分余数,那么需要将已添加log2B位尾数的部分余数与1倍至B-1倍除数相加减(此操作在DIVQ阶段完成),若上次得到的部分余数为负数,即其值的范围为-(B-1)倍至0之间,则做加法,否则做减法。在B-1个运算结果中,必然会存在一个符合收敛条件的部分余数结果。有一个特性,符合收敛条件的部分余数计算结果虽然是N+log2B位宽,但实际有效位还是低N位(因为其绝对值小于N位的除数),这就在下次加减迭代运算时候在后边新添log2B位尾数给予了信息保留的保障,即新添尾数并丢弃高log2B位重新组成N+log2B位的迭代被加数的数据信息没有丢失。2倍至B-1倍除数结果的计算使用第2至第B-1个运算模块计算而得,若B=2,则不需要计算更多倍的除数。
数据运算模块102中B-1个运算模块其中的第一个运算模块需要对数据预处理模块101所提供的加数与被加数做第一次迭代加减运算,同时数据运算模块102中其他B-2个运算模块中的加法器还需要与移位器一同计算出2倍至B-1倍除数的结果,送至循环寄存器保存,以后便可重复利用,即在DIVQ阶段的加减迭代过程中,各个倍数除数的结果便作为在DIVQ阶段各个运算模块的加减运算的加数。
在DIVQ阶段,在此阶段主要是做一种操作,即做加减迭代运算,如图1传统的除法计算中,部分余数在新添低位数据后与除数做迭代运算,如此反复多次,直到最后一位被除数被添入计算。本设计为每次新添log2B位数据,并可能做加或减运算。每次做加减迭代,新添尾数后的部分余数都需要与1倍至B-1倍各个倍数的除数数据相加减,得出这一阶段的部分余数,以提供下一次DIVQ的加减迭代运算。与不同倍数除数相加减,目的是为了得出一个符合收敛性的加减结果,在众多运算器的加减运算中,一般会存在两个结果符合收敛条件,一个大于0,一个小于0。并且相差一倍除数,即若是做减法所得,如果是与X倍除数相减得出的中间结果为正,并符合收敛条件,那么与X+1倍除数相减得出的中间结果则为负,可能也符合收敛条件。那么此时与小于X倍除数相减的结果必都为正数,与大于X倍除数相减的必都为负数。所以可以仅仅从B-1个计算结果的符号判断出结果符合收敛性的加减结果必在符号不同的相邻两加减运算中。通过符号判断,可以锁定出两个符合收敛性的结果。而因为判断符号是根据最高位判断,那么数据0可判断为正数,符合收敛条件,那么此时便只有一个结果数据符合收敛性。所以我们选取那两个符合收敛性结果符号为正的数据作为部分余数。而此时是与X倍除数做的加减迭代结果,那么同时也可得到新商位便是X,用log2B位宽数据表示。若B=2,即基2的除法器,那么其运算器只有B-1=1个,那么就只有一个结果,而此结果必收敛,因为,假定上一周期的部分余数符合收敛性质,即有绝对值小于一倍除数,在新添一位数据后,即左移一位后,其值的绝对值小于2倍除数。若为正数,则加减迭代的时候与除数做减法,若为负数,则与除数做加法,这样便可以保证结果的收敛性质。
数据运算模块102计算由预处理模块101所提供的加数与被加数做加减运算所用,各个运算模块中被加数应该为预处理模块101提供的N+log2B位宽的被加数,即都为上次循环所得的部分余数在低位新添log2B位数据而得,如图4的DIVQ阶段第一次循环部分所示。原高log2B位已摒弃,新添位如图1中部分余数新添的位,此设计新添的位宽为log2B位,是被除数的后续log2B位数据。而加数应该为在DIVS计算所得并保存的1倍至B-1倍除数的数据,其位宽也都符号扩展为N+log2B位,总之该数据运算模块102做的计算便是,其B-1个运算模块分别将部分余数与1倍至B-1倍除数做加减运算,并将此所得的B-1个位宽为N+log2B+1加减结果发送给数据输出模块103,输出多出的一位是加法器的进位,数据输出模块103会如上述,将通过判断各个结果的符号来选取相应的收敛结果作为部分余数,同时得出此部分余数结果所对应的除数倍数X,作为新商位。
DIVQ循环多次,直到被除数的各个位都添完毕。可能会出现在最后一次迭代的时候部分余数新添的位不够log2B位,但设计的被除数位宽一旦确定,最后一次所需要添加的位宽便可确定,最后一次部分余数添加数据在后边补0至log2B位即可。
在MDIVR阶段,与MDIVQ阶段,便是做修正运算,运算器对预处理模块101提供的待修正的余数与商及其修正量进行加减运算。
在MDIVR阶段,调整余数,当B=2时候,其部分余数结果可能为负数与正数,除法的要求便是除数的余数结果需要与被除数相同,所以可能需要有所调整,而仅需要做一次加减一倍除数的运算便可,做加或减通过控制逻辑104控制。即部分余数是符合收敛条件的,若部分余数为正数,则需要将其变更为负数,除数为正时做减法,除数为负时做加法;若部分余数为负数则反之。若有调整,因为加/减了一倍除数,那么商需要做相应的调整加1或减1。
当B>2时候(B为2的指数倍),每次做加减迭代运算时的部分余数新添的位为log2B位,那么便会出现最后一次DIVQ操作时候可能不足log2B位情况,采用的是在后面填补0的做法。那么便会使得余数结果存在误差。现来计算误差及其修补方式,假设需要填补G位0(G<log2B,为固定的常数),那么最后一次的部分余数其实应该为log2B+N-G位,设此数为S,S便为应当的加减迭代部分余数,真实余数为R,此次新商位为Q,除数为D,Q的位宽应为log2B-G位,即与最后剩的被除数位一致。那么有S=Q·D+R。而实际是在最后多填补了G位0,设实际的部分余数为S′,新商为Q′。其中S′={S,G′b0}(花括号为位拼接运算,表示在S后边添G位二进制0),
那么便是有S′={S,G′b0}={Q,G′b0}·D+{R,G′b0}
假若{R,G′b0}=x·D+R′,R′是符合收敛条件的一个数。
那么就有S′={Q,G′b0}·D+x·D+R′={Q,x}·D+R′
令Q′={Q,x},那么就有S′=Q′·D+R′。也就是说实际得出的新商位为Q′,实际得出的余数为R′。而可通过关系式{R,G′b0}=x·D+R′还原真实余数的值,x为实际新商Q′的低G位。而x·D(x∈[1,B-1))已经计算出,还原真实R只需要直接做加减后移位即可,在考虑余数结果与被除数的符号需要相同问题,由于部分余数选择的都为正数,那么做符号调整便是减去1倍除数,
那么修正运算便是x·D+R`-{1,G′b0}·D=-({1,G′b0-x})·D+R`
其中{1,G′b0}-x的值也属于[1,B-1),由于G不大,计算{1,G′b0}-x的值可用简单的逻辑即可完成,最后只需要在1倍至B-1倍除数的运算部件中选择相应倍数的结果输出即可。
而MDIVQ运算则调整商运算,在B=2时候,修正余数只做加减一倍除数运算,调整商值只需要调整加减1便可。而在B>2时候(B为2的指数倍),虽然最后调整是用x倍的余数做加减调整,但此x位是超出原有位数的x位,犹如小数点后的数,本设计做的是整数除法,故对商的影响并没有达到x的数值差。所以在考虑到余数符号修正的情况,商的调整仍然是只需要调整加减1便可。
因为在余数修正阶段是加或减去除数,那么多加的或多减的则必须把它反映在商上,例如8/3=3余下-1,这个结果貌似也对,修正必须对此余数加一倍除数3,那么余数应该为-1+3=2,同时,因为加了一倍的余数,商也需要减掉1,即商为3-1=2,那么修正后结果便是8/3=2余2。
设计到x,这可用例子8/3=2.5余0.5表示。余数调整会精确到此小数点后。即会做如此调整0.5+0.5*3=2,而在商调整阶段只会把2.5看作是2(无视小数点后数字),而通过判断是否对2做调整,而此例子会判断不做调整。即结果会是2。
(三)数据输出模块103
数据输出模块103用于对数据运算模块所得的各个通路的数据进行选择输出,其包括商位计算模块、运算结果后处理模块以及多路输出选通器。所述商位计算模块用于计算该循环所上的商位,同时也计算AQ标识位,AQ标识位作为内部输出提供给控制逻辑104,以用于后续循环的控制信号的生成,包括下一次循环运算器中的加减控制信号等。
所述商位计算模块仅在DIVS和DIVQ阶段执行商位计算,在DIVS操作阶段,从整个除法器模块的功能看,如果是做有符号除法,那么此阶段便是需要得出一个商结果的符号位,如果做无符号除法,那便是做第一次加减迭代运算,2至B-1倍除数数据在此阶段计算得出,需要等到下一循环即DIVQ阶段才使用,即此处加减迭代运算只能用一倍的除数做加减运算,也就是与最高一位的被除数位进行加减迭代运算。那么此阶段的商位计算模块的功能便是,在做有符号运算时,计算出商的符号位及其AQ,在做无符号运算时,计算出商的最高一位及其AQ。
在计算除法时,商的符号是由除数与被除数决定的,即除数与被除数的符号相同则商符号为正,否则为负。故计算此一位宽的符号位只需要除数符号位、被除数符号位以及数据类型标识位(判断是否做有符号运算)一同计算可得。若为计算无符号运算时候,因为数据运算模块102是根据收敛性原则(即要求加减迭代后的部分余数绝对值需要小于除数)对被加数做加减运算,此时为第一次做加减迭代运算,被加数为被除数的最高位,如图4的DIVQ阶段所示,之后的DIVQ运算的被加数都由为前一次循环的部分余数结果而得。在此DIVS阶段,如图4的DIVS阶段所示,仅利用被除数的最高位计算,那么此阶段的新商位也为一位宽。由于是做无符号运算,那么除数与被除数都为正数,此时根据收敛要求需要在数据运算模块102中做减法迭代,如果是所得是负数,那么说明不够减,新商位上1′b0,如果所得的是正数,那么说明够减,新商位上1′b1。所以在DIVS阶段,做无符号运算时,商位计算模块上的新商位需要根据数据运算模块102中加减迭代结果的符号位以及数据类型标识位(判断是否做有符号运算)逻辑计算而得。
在DIVQ阶段,设计的是基B的除法器,每一次上的新商位是log2B位宽。在经过DIVS阶段计算后,保存了1倍至B-1倍除数的数据结果,在经过数据运算部件102中的B-1个运算模块计算后,便会得到B-1个结果,如前所述,此商位计算模块将会根据各个计算结果的符号来判别所上的新商位。例如,如果运算模块减法过后,与X倍除数数据加减迭代的结果为正,而与X+1倍除数数据加减迭代的结果为负数,那么,我们便选取X值为新商值,其加减迭代结果便选取为此循环的部分余数结果,这正好与传统手算除法的计算方式相类似。故商位计算通过数据运算部件102输入的B-1个计算结果的符号位来判断所需要上的新商位。如果B=2,那么只有一个计算结果,同样的道理,如果结果为正,说明够减/加,那么新商位为1′b1,否则上1′b0。
所述运算结果后处理模块则是对数据运算模块102输出的结果进行再处理,其接受来自控制逻辑104的控制指令,包括DIVS,DIVQ,MDIVR,MDIVQ运算操作控制指令,以及商运算模块的新商位。如图4所示,每一阶段的输出寄存器的数据结构的是不同的,运算后处理主要是调整输出的数据结构,提供给选通器直接选通至输出寄存器。
在DIVS运算操作阶段,所述运算结果后处理模块接收到数据运算模块102输出的N+log2B+1位加/减运算结果和数据预处理模块101扩展后的2N+log2B位被除数以及商位计算模块1位新商位后,从高位至低位将N+log2B+1位的运算结果的低N+log2B位、剩余的N-1位被除数(最高一位已被用于符号计算或加减迭代)与1位新商位拼接而成新的2N+log2B位数据,提供给多路选通器。
在DIVQ运算操作阶段,所述运算后处理模块的操作过程与DIVS阶段相似,但是新的商位中不包含符号位。所述运算结果后处理模块接收到数据运算模块102输出的N+log2B+1位加/减运算结果和内部循环的2N+log2B位数据(即部分余数,部分商以及待运算的被除数位)以及商位计算模块得到的log2B位新商位后,从高位至低位将N+log2B+1位的运算结果的低N+log2B位、剩余的被除数的低N-x·log2B-1位与1+(x-1)·log2B位部分商及其log2B位新商位拼接而成新的2N+log2B位数据,提供给数据输出模块103的多路选通器,选择相应的结果给输出寄存器,以提供给下一循环时使用。其中x表示的是循环中第几次做DIVQ运算,每次DIVQ运算过后,剩余的被除数位都将减少log2B位,部分商位都将增加log2B位。
在MDIVR阶段,由于需要根据控制逻辑104输出的余数修正使能控制信号进行余数修正或者不进行余数修正两种可能,因此所述运算后处理模块需要准备两种数据,即DIVQ阶段的运算结果中部分余数和对其进行了余数修正的结果数据;其中,由于N位的部分商结果或部分商结果不需要修改,因此数据输出模块102输出的低N位不变,依然是DIVQ运算操作阶段输出的初步运算结果中的低N位,而其高N+log2B位的输出需要根据余数修正控制信号选择DIVQ运算操作阶段得到的运算结果的N+log2B位部分余数或者该MDIVR运算操作阶段数据运算模块102中运算器的加法器得到的加/减运算结果。总的说来就是提供给选通器两个数据,即修正的余数与未修正的余数,如若不需要修正,则选通经过数据预处理模块101输入的部分余数,即如图4的DIVQ最后一次循环所得的部分余数,如若需要修正,则选择此MDIVR阶段经过数据运算模块102修正后的数据结果。因此,所述数据后处理模块向多路选通器提供DIVQ运算操作阶段得到的高N+log2B位部分余数进行算术移位后的N+log2B位数据和从数据运算模块102得到的N+log2B位的加/减运算结果两种结果数据。
在MDIVQ操作阶段,由于需要根据控制逻辑104输出的商修正使能信号进行商数据修正或不进行商数据修正两种可能,因此也需要准备两种数据。N+log2B位的部分余数已经在MDIVR阶段进行了修正,而低N位的部分商需要准备MDIVQ运算操作阶段中数据运算模块102进行了修正后的数据以及MDIVQ运算操作阶段前未进行修正的数据,即DIVQ运算操作阶段得到的商结果。
也就是说,此模块为多路选通器模块分别在各个操作阶段准备了多个的输出数据以供选通。
所述多路选通输出模块则是对运算数据进行选通输出,其接受的是运算结果后处理模块的输出数据,并根据操作指令码的控制,协同数据类型标识位、余数调整使能信号、商调整使能信号对结果进行选通输出。因为不同的操作步骤需要选通不同的输出路径,所以需要操作指令码的参与控制;而数据类型标识位主要是用来判断特殊数据的输出选通,比如遇到除数为0的时候,可能根据数据类型的不同会输出不同的数据标志;余数与商调整使能信号便是在MDIVR,MDIVQ阶段选择输出使用。其输出至一个中间结果寄存器,此寄存器容纳一个2N+log2B位的中间结果数据(如图4所示寄存器),一个AQ标志位,在DIVS阶段外部输入的除数及数据类型标志信号位等。
在DIVS操作阶段,多路选通输出模块便根据此操作阶段对应的外部指令经过控制逻辑模块104译码后的控制选通信号进行选通此DIVS阶段的通路输出,此输出结果是由数据后处理模块提供一个2N+log2B位的预数据处理结果及其由商位计算模块提供的一个AQ控制位,AQ标志的选通还需要结合数据类型标志信号,2N+log2B位的输出结果如图4所示,数据构成为,高N+log2B位为第一次加减迭代的结果N+log2B+1位的低N+log2B位,其次为N-1位的剩余被除数位,最后一位为新商位。多路选通输出模块的输出结果为内部循环输出,提供给下一操作阶段即DIVQ操作阶段使用。
在DIVQ操作阶段,在此阶段便根据此操作阶段对应的外部指令经过控制逻辑模块104译码后的控制选通信号进行选通此DIVQ阶段的通路输出,在此阶段输出的结果如图4的DIVQ阶段所示,在此阶段的最后一次循环输出结果是由数据后处理模块提供一个2N+log2B位的待修正数据结果及其由商位计算模块提供的一个AQ控制位,AQ标志的选通还需要结合数据类型标志信号,其中所述待修正数据结果包含待修正部分余数结果和待修正部分商结果。所述多路选通器的输出结果为内部循环输出,提供给下一DIVQ操作阶段使用,MDIVR不需要此AQ标志位。
在MDIVR操作阶段,多路选通器不仅仅需要根据外部操作指令译码后的选通控制逻辑来选通MDIVR操作阶段时的数据通路,还需要在余数修正控制信号的控制下,进一步对数据进行是否需要输出修改后数据的选通。如果不需要余数修正,则选通输出DIVQ运算操作阶段得到的部分商结果和经过数据后处理模块算术移位后的余数结果,否则选通输出DIVQ运算操作阶段得到的N位部分商结果和来自数据运算模块102的N+1位加/减运算结果,修改前后的结果都由数据后处理模块提供,且不需要再计算AQ标志位。
在MDIVQ操作阶段,多路选通器不仅仅需要选通的是MDIVQ操作阶段时的数据通路,还需要在商修正控制信号的控制下进一步对输出数据进行选通,如果不需要商修正,则选通输出MDIVR运算操作阶段得到的部分商结果和余数结果,否则选通输出MDIVQ运算操作阶段通过运算器修正后得到的N+log2B位商结果和来自数据运算模块102的N位加/减运算结果,两个结果都由数据后处理模块直接提供。
在RDIV操作阶段,外部直接可读取结果寄存器,输出的是2N位的数据结果,此2N位结果便是MDIVQ阶段后2N+log2B位数据结果的低2N位,其中高N位为余数,低N位为商结果。
总之,数据输出模块103选择多条通路的数据进行输出,或供给下一次迭代循环使用,同时输出一定的控制信号给控制逻辑104,用于下一次循环的控制信号生成,或向外部输出除法计算结果。外部端口在每一次迭代都可以从该模块读取中间结果,在除法计算结束后读取的数据便是除法最终的商与余数结果。
(四)控制逻辑模块104
控制逻辑模块104用于生成各个模块在数据循环中的控制信号。该控制逻辑模块104包括指令译码逻辑模块、数据选通逻辑模块、加减操作逻辑模块、余数修正逻辑模块和商修正逻辑模块。所述指令译码逻辑是指对外部输入的指令进行译码,即对外部输入的DIVS,DIVQ,MDIVR,MDIVQ和RDIV五种操作指令译码成相对应的控制选通信号,以便对内部操作进行控制,比如对数据预处理模块101控制为仅在DIVS操作时接受外部数据,对数据输出模块103仅在RDIV读指令时候对外输出数据等。所述数据选通逻辑模块用于根据外部指令以及内部循环提供中间结果的符号、除数符号、数据类型标志信号等计算得到相应的选通信号,用于各个模块中需要数据输入数据输出的选通控制。所述加减操作逻辑模块是在外部指令操作码的控制下,结合数据类型、以及上一阶段所得的AQ标志位、中间结果符号及其除数符号等计算得到加/减运算控制信号,以用于控制数据运算模块102中的加法器的加减操作。所述余数修正逻辑模块用于在MDIVR操作阶段,结合数据类型标志位、除数符号、某些数据是否全0标志、部分余数部分商符号等计算得到余数修正使能信号,用于在MDIVR余数修正阶段控制数据输出模块103是否输出对余数进行修正后的结果。所述商修正逻辑模块用于在MDIVQ阶段,结合除数符号、部分商符号、某些数据是否全0标志等计算得到商修正控制信号,用于在MDIVQ商修正阶段控制是否输出对商进行修正后的结果。
所述指令译码逻辑,是通过对外部五条DIVS,DIVQ,MDIVR,MDIVQ及RDIV操作指令进行的译码以便对除法器内部各个模块能够识别出相应的操作阶段并接受控制的一个控制逻辑。以及对此五条指令的识别并对整个模块的运行使能,即只有在此五条指令输入时候,除法器才运作。
在DIVS阶段,此阶段除法器主要工作是从外部输入除数与被除数数据,并计算出带符号位的新商位。那么对外部指令译码的结果包含对外部数据读使能信号,即译码后信号将控制数据预处理模块101接收的数据为外部的除数、被除数、数据类型标志位等数据。同时译码结果也将传递给数据选通逻辑,以指示其当前循环为DIVS操作阶段,提供在DIVS阶段数据选通判断信号。
在DIVQ阶段,此阶段除法器的主要工作是从内部输入中间结果数据进行计算,并计算出不带符号位的新商位。那么指令译码结果包含对内部循环数据读使能,即译码信号将控制数据预处理模块101接收的数据为内部的部分余数、部分商、寄存的除数和寄存的数据类型标志位等数据。同时译码结果也将传递给数据选通逻辑,以指示其当前循环的操作阶段,提供选通数据判断信号。
在MDIVR,MDIVQ操作阶段,对外部指令进行译码,与前两操作一样包括选通内部循环数据使能,还提供给数据选通逻辑判断信号,指示在MDIVR,MDIVQ选择的数据通路。
在RDIV阶段,此阶段的主要工作便是向外部输出结果数据,即该指令译码模块通过对RDIV指令的译码把结果的对外输出使能信号置高。
总之,此指令译码逻辑包括三个功能,1)根据外部指令控制整个除法器模块的工作与否;2)控制每个操作指令阶段的输入数据源及其输出数据去向的选取;3)提供译码信号给控制逻辑模块104中数据选通逻辑以便除法器内部各个多路选通模块对数据通路做数据选通。
所述数据选通逻辑,便是通过指令译码逻辑对外部指令译码后的信号,结合数据类型标志位,及其余数修正逻辑、商修正逻辑的修正使能信号而得出的在数据预处理模块101及其数据输出模块103中的多路选通控制信号。由于本除法器结合了DIVS,DIVQ,MDIVR,MDIVQ四种对数据进行操作的步骤,即在数据通路上便会存在四种路径,数据选通逻辑接收到了译码逻辑后的信号便是用来选通各个指令所对应的数据通路。而接收到的余数修正使能信号与商修正使能信号,用于在余数修正阶段(即MDIVR操作)与商修正阶段(即MDIVQ)选通相应的数据以提供相应的指令路径(MDIVS或MDIVQ数据路径)输出。
在DIVS操作阶段,控制数据预处理模块101的多路选通器选通从外部输入的数据经过输入数处理模块处理后的数据,数据处理模块提供给多路选通模块中主要有4条数据路径,分别对应4种指令操作的数据通路,数据选通逻辑从指令译码逻辑接受到译码后的信号,通过译码信号翻译成相应的数据通路选通信号提供给此多路选通,以选通相应指令对应的数据通路。如果除法器所处理的数据类型不同,那么在同一操作阶段下,输入数据通路的数据也是不尽相同的。所以在选择相应的指令通路之前(选择4条通路之一前)根据数据类型信号来选择相应的数据进入指令通路中。计算结果通路也有着4条指令通路,则通过对数据输出模块103中的多路选通模块进行控制选通DIVS数据通路输出。
在DIVQ阶段,控制数据预处理模块101的多路选通器选通从内部输入的数据经过输入数处理模块处理后的数据,大体与DIVS操作阶段的处理选通方式相同,选择控制选通DIVQ阶段相应的数据选通至DIVQ通路,再送至数据运算模块。计算结果则通过对数据输出模块103中的多路选通模块进行控制选通DIVQ数据通路输出。
在MDIVR指令操作阶段,对于控制数据预处理模块101的多路选通器选通的选通方式基本与DIVS,DIVQ阶段的相同,都是通过处理外部指令译码后的信号在数据类型标志信号下选择相应的数据给MDIVR通路并选通使能MDIVR指令通路,将数据传送给数据运算模块102。对于控制数据输出模块103中多路选通模块的选通,也是通过指令译码逻辑后的信号产生相应的控制信号使得多路选通器选择MDIVR通路输出。但是还需要通过余数修正使能信号来判定是否需要将修改后的数据选通至MDIVR通路输出。
在MDIVQ操作阶段,对于控制数据预处理模块101的多路选通器选通的选通方式是通过处理外部指令译码后的信号下选择相应的数据给MDIVQ通路并选通使能MDIVQ指令通路,将数据传送给数据运算模块102。对于控制数据输出模块103中多路选通模块的选通,也是通过指令译码逻辑后的信号产生相应的控制信号使得多路选通器选择MDIVQ通路输出。但是还需要通过商修正使能信号来判定是否需要将修改后的数据选通至MDIVQ通路输出。
所述加减操作逻辑,接受的信号为指令译码逻辑输出的译码信号、数据类型标识信号,上一次循环得出的AQ标识位、部分余数符号以及除数符号。经过处理后输出一位宽的加法器运算加/减的控制信号至数据运算模块102中。
在DIVS操作阶段,加减操作逻辑根据译码逻辑的结果判断为DIVS操作阶段,便输出减法操作信号至数据运算模块102中,此阶段加法器必须是做减法操作。
在DIVQ操作阶段,加减操作逻辑根据译码逻辑的结果判断为DIVQ操作阶段,但是做加法/减法还需要由上一次操作阶段产生的AQ标志位决定,因为需要达到部分余数结果收敛的效果,即相减之后的部分余数结果需要在-x*|除数|~x*|除数|之间(x为正整数,在基B的除法器中,x不大于B)。
在MDIVR阶段,此阶段是修正余数阶段,加法器做的运算为修正余数的运算。此阶段的控制信号在该加减操作逻辑根据译码逻辑的结果判断为MDIVS操作阶段,并且根据数据类型标志位所显示的数据类型来判断加/减。如果是做有符号除法,那么计算所得的加减运算控制位为部分余数的符号与除数符号的同或所得的结果,因为除法器要求余数的结果需要与被除数的符号相同,若需要修正,即需要使得余数易号,若余数与除数同号则余数结果需要选择与x*除数相减的结果,其中x≤B-1通过数据运算器中与各个倍数的除数相加减结果的符号来判断,目的是为得到|余数|<|除数|,并且余数符号等于被除数符号,否则相加。如果是做无符号除法,那么只做加法修正运算。
在MDIVQ阶段,此阶段为修正商运算阶段,加法器做的运算为修正商的运算。此阶段加法器做的为减法运算。因为在调整余数阶段可能余数结果多加了一个或多减了一个除数,所以需要在商调整阶段需要加上或减去log2B。根据逻辑推导,无论何种情况最后调整只需要做减法,因为在MDIVR调整阶段减法的减数是带符号的原除数,而不是绝对值后的除数。
所述余数修正逻辑,此逻辑只在MDIVR阶段有效,是用来输出一个余数调整使能信号以控制除法器模块在MDIVR阶段是否需要对余数做调整。
对于除法器,余数需要满足其符号与被除数相同,有不恢复余数算法的性质,并且容忍了除数与被除数都带符号运算(即不需要都装换为正数),所得余数结果会可能会相差一个或多个除数倍数之差(视设计的除法器基数而定),故需要修正。
关于从余数结果符号位方面考虑的修正,需要分两种情况考虑,即处理的数据为有符号数据和无符号数据,其判断方式有所不同。表1示出了除法器做有符号除法时候的真值表,判断初步的余数结果的符号是否与被除数符号位相同。表2示出了除法器做的是无符号除法时的真值表,需要根据被除数符号,余数符号与除数符号判断。但是由于无符号运算除数与被除数都为正数,那么便仅仅根据余数符号判断是否需要修正即可。
表1
Figure BDA00003637497900201
表2
Figure BDA00003637497900211
以上两个情况是从余数符号角度出发考虑修正与否,最后做出正确的余数结果还需要考虑一些特殊情况数据的修正。首先,即整除情况,整除情况余数必为0,若仅仅根据符号判断修正与否,则将会把0结果视为正数,可能会导致误判。即无论是做有符号或是无符号运算,初步余数结果为0时,便不需要调整余数结果。其次,若初步商结果为0(未经过调整的商结果),出现此情况应该为被除数比除数小,导致每一次上的商位为全0,且最后一次DIVQ运算依旧为减法。初步余数结果则为负。这种情况在做有符号除法是没有问题的,但是在做无符号除法时候,就必须要把余数修正为正数。即若在此阶段商结果为0,则在做无符号除法时候便需要做修正。最后,由于不恢复余数法对部分余数的收敛要求,在MDIVR前的DIVQ阶段,即求得初步余数的时候,可能会判断余数为0时为正数(最高位符号位为0,代表正数),便做相应的收敛加/减使其为负数。即余数结果可能为-log2B*|除数|,而除法性质是规定余数绝对值必须小于除数绝对值。那么便还需要一个控制判断,即在MDIVR阶段,若计算修正后的余数为0,那么,无论其他条件如何,便仍需要修正。
总的来说,余数修正逻辑不仅仅是通过部分商符号、部分余数符号、除数符号、及其数据类型标志信号来判断而得,还利用了部分余数是否为0及其未经过修正的部分商是否为0来判断。
所述商修正逻辑,此逻辑只在MDIVQ阶段有效,是用来输出一个商调整使能信号以控制除法器模块在MDIVQ阶段是否需要对商做调整。
表3示出了修正商的真值表,其通过判断商的符号、除数符号、余数是否为0标志(修正后的)来计算是否需要修正商。不恢复余数算法会导致商的结果相差一个x(x≤log2B整数),即需要相加或相减x修正,x的判断通过余数修正时候修正的是多少倍除数来判定。同时,在余数修正阶段,如果有对余数有修正,那么便需要相减一个x(无论是有无符号运算)。综合分析,最后的商调整只需要减x或者不变。
表3
被除数符号 除数符号 余数是否全0 是否需要修正
0 0 0(否) 0
0 0 1(是) 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0
首先,当商与除数符号不同时需要调整,其次,当除数为负数,修正后的余数为0时候需要调整商,最后,商为负数,修正后的余数不为0时需要调整商。
对该除法运算整体模块的运行控制,不仅需要外部指令控制逻辑,还需要内部迭代的数据控制,每一次迭代计算都需要根据上一次的计算结果进行控制,而且也由于输入的数据一般只保留至上一操作步骤,即仅利用上一次的计算结果用于判断本次的运算。在逻辑结构的设计上是一个难点,如对计算加法器中加减信号,不仅仅可能需要数据类型信号位与除数的符号位,还需要前次操作的中间结果商的符号位,以及所新计算的商位。同样还需要计算余数与商调整阶段的调整使能,这都需要外部输入与上一阶段的数据输出作为逻辑判断。
图2示出了本发明另一优选实施例中不恢复余数除法器的结构图。图2中的除法器实现的是16bit定点基2的除法器,此时log2B=1。
如图2所示,该除法器包括:数据预处理逻辑模块201,数据运算器模块202,数据输出选择逻辑203及控制器模块204。分别对应图1中数据预处理模块101,数据运算模块102,数据输出模块103及控制逻辑模块104。
计算一个完整的16bit除16bit定点数据基2的除法,需要20个操作步骤。首先是1个DIVS操作步骤,然后16(N=16,B=2,N/log2B=16)个DIVQ操作步骤。然后是修正阶段,需要1个MDIVR操作步骤和一个MDIVQ操作步骤。最后在读取除法结果阶段,需要一个RDIV操作步骤。
如表4所示,以有符号定点数据-37除以6为例子。十进制-37的十六进制补码表示为16h′ffdb,二进制补码表示为16b′1111111111011011;十进制6的十六进制补码表示为16h′0006,二进制补码表示为16b′0000000000001010。外部端口除数与被除数是16位宽,计算的是有符号除法,输入控制信号设置为有符号数据除法。
表4
Option High 17bits Low 16 bits AQ
input x ffdb 0
DIVS 1ffff ffb7 0
DIVQ-F 0000b ff6f 0
E 0000b fedf 0
D 0000b fdbf 0
C 0000b fb7f 0
B 0000b f6ff 0
A 0000b edff 0
9 0000b dbff 0
8 0000b b7ff 0
7 0000b 6fff 0
6 0000a dfff 0
5 00009 bfff 0
4 00007 7fff 0
3 00002 ffff 1
2 1fff9 fffe 1
1 1ffff fffc 0
0 0000b fff9 1
MDIVR 1ffff fff9 0
MDIVQ 1ffff fffa 0
首先进行DIVS运算步骤,数据预处理模块201在接收到控制器对指令译码后信号,于是从外部读取数据,为两个16位的除数与被除数,16位被除数扩展为33位数据,被除数符号位是1,故扩展高17位为全1,即把被除数从16′hffb7扩展为33′h1ffffffb7。如果是无符号除法,则符号扩展全为0。除数符号扩展为17位数据17′h00006。并与接收到的外部的数据标志位保存至循环寄存器中。
高17位数据17′h1ffff在控制逻辑的选通控制下,输出至数据运算模块202的加法器中作为被加数,低16位直接发送至数据输出逻辑203。由于是有符号运算,高17位与0做相减运算(此例子设置为做有符号数据时应该为0,故此处为0,若为无符号运算则为1*除数),结果输出至数据输出逻辑203模块。
数据输出选择逻辑203模块将从数据运算模块202接收到的运算结果作为高17位,从数据预处理模块201接收到的数据为低16位,同时计算出新的商位,那么输出则需要向左移1位,最高位摈弃,最低位置入新商位,此新商位为符号位,-37/6正确的商结果应该为-6,故此位应该上的是符号位1,如表4所示,DIVS操作对应的数据最低位为1。同时计算出AQ,以提供下一操作控制所用。
然后进行DIVQ运算,数据预处理模块201在运算器204的译码控制下选择从内部读取数据,即上次内部循环的输出结果,进行第一次DIVQ运算操作时,内部循环的输出结果为DIVS运算操作的输出结果,而之后均是前一次DIVQ运算操作的输出结果。其在控制器204选通控制多路选通器的选通下,将所述上次内部循环的输出结果的高17位部分余数输出给数据运算器202作为被加数,另外将扩展后的除数作为加数传送给数据运算器202,同时,将上次内部循环的33位数据通过控制器204的指令译码逻辑控制输入提供给选择逻辑模块203,其中包括高17位的部分余数与低16位的部分商。
运算模块202在接收到相应的数据后,在运算器的加法器中,根据控制逻辑模块204输出的加减控制信号进行相应的加减操作,其中所述加减控制信号是根据上一次循环所得的控制信号AQ等计算得到的,其加减操作得到的17位加减操作结果输出给数据输出选择逻辑203。
数据输出选择逻辑203将从运算模块202接收到的17位加减运算结果的低16位作为输出的高16位,将数据预处理模块提供的上次循环得到的部分商作为输出的次低16位,将数据输出选择逻辑203中商计算模块计算得到的新的商作为输出的最低1位。本次循环的运算输出,其中高17位为本次循环得到的部分余数结果,低16位为本次循环得到的部分商结果。此DIVQ操作需要循环进行16次,便可得初步运算结果。结果还可能仍需要修正。
然后是MDIVR操作,即修正余数操作,在数据预处理逻辑模块201中,接收的是内部循环数据,即DIVQ运算操作得到的初步运算结果,数据预处理逻辑模块201根据控制器204选通内部循环数据的高17位部分余数位作为数据运算器模块202中加法器的被加数,并选通经过符号扩展后的除数作为加数输出至数据运算模块202中。所述33位内部循环数据输出至数据输出选择逻辑模块203。
数据运算模块202在运算器中对接收到的数据进行修正运算,即在控制器204输出的加减控制信号的控制下,将内部循环数据的高17位和经过符号扩展后的除数相加减得到修正后的余数,并将修正后的余数结果发送给数据输出选择逻辑模块203,同时也发送加减结果是否为全0的信号给控制器204的余数修正逻辑模块用来判别是否需要输出修正后的结果。
数据输出选择逻辑模块203中在控制器204选通控制逻辑信号控制下选择MDIVR数据通路输出数据,即输出DIVQ运算操作得到的初步运算结果中的部分商和部分余数结果,或者输出DIVQ运算操作得到的初步运算结果中的部分商和该MDIVR运算操作过程中运算模块202得到的修正后的部分余数结果,具体输出两者中的哪一个,还需要结合控制器204的余数修正逻辑的修正使能信号判断;再次是MDIVQ操作,即修正商操作,数据预处理逻辑模块201接收内部循环数据,即MDIVR运算操作得到的33位运算结果,其选通低16位部分商位经过符号扩展为17位后输出至运算模块202中加法器作为被加数,而加数为log2B=1,而运算器中加减法控制信号为常数0,即做减法。运算模块202进行相减运算后,将所得的结果作为修正后的部分商提供给数据输出选择逻辑模块203。
数据输出选择逻辑模块203的多路选通器在控制器204的选通控制逻辑信号的控制下选通适合的结果数据进行输出,即输出MDIVR运算操作得到的初步运算结果中的部分商和修正后余数结果,或者输出MDIVR运算操作得到的初步运算结果中的修正后余数和该MDIVQ运算操作过程中运算模块202得到的修正后的商结果,具体输出两者中的哪一个,还需要结合控制器204的商修正逻辑的修正使能信号判断。该实施例中,在MDIVR操作后,商为负数,修正后的余数不为0,故需要调整商,即减1操作。商便为正确的修正结果,即在MDIVQ操作后便得到了最后的除法正确结果。
最后是RDIV操作,此操作是读取最后的除法结果操作,此时,在控制逻辑对RDIIV指令译码后除法器输出使能为高,即结果数据可进行对外部的输出32位数据结果,高16位为余数,低16位为商,当然也可在之前步骤中做此操作,那便是读出的是中间计算结果。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种不恢复余数的除法器,其包括:
数据预处理模块,其用于对外部输入数据做预处理,并输出值数据运算模块;
数据运算模块,其用于根据外部输入数据做不恢复余数除法中的加减迭代运算,得到部分余数结果和部分商结果,并在余数修正阶段与商修正阶段对所述部分余数结果和部分商结果进行修正,然后输出余数结果、修正后的余数结果、商结果和修整后的商结果;
数据输出模块,其用于根据控制模块输出的控制信号选择余数结果与修正后的余数结果之一和商结果与修正后的商结果之一输出;
控制模块,其用于输出控制信号,以控制其他模块进行相应的数据处理和数据输出。
2.如权利要求1所述的除法器,其特征在于,所述数据预处理模块包括输入数处理模块和多路选通器,所述输入数处理模块用于接收外部输入数据和内部循环输出数据,所述多路选通器用于根据从控制模块接收到的控制指令,选通输出相应的数据。
3.如权利要求1所述的除法器,其特征在于,数据运算模块包括多个运算器,每个运算器包括加法器、移位器和数据校验器;其中,所述移位器用于得到相应倍数的除数;所述加法器用于对相应地部分被除数和相应倍数的除数做加减运算得到部分余数数据;所述数据校验器用于根据所得到的部分余数数据和除数的相加减结果输出相应信号给控制模块,控制模块根据该信号输出余数修正使能控制信号。
4.如权利要求1所述的除法器,其特征在于,所述数据输出模块包括商位计算模块、运算结果后处理模块以及多路输出选通器;其中,所述商位计算模块用于计算每次循环所上的商位以及AQ标志位,所述AQ标志位输出至控制模块,控制模块根据所述AQ标志位生成控制所述数据运算模块进行相应计算的控制信号;所述运算结果后处理模块用于根据所述数据运算模块、数据预处理模块和商位计算模块的输出处理得到下次内部循环数据、商结果、修正后的商结果、余数结果和修正后的余数结果;所述多路输出选通器根据控制模块的控制指令选择输出经运算结果后处理模块处理后的数据。
5.如权利要求1所述的除法器,其特征在于,所述控制模块用于对外部除法指令进行译码而生成内部译码后的信号以用于控制其他模块的操作。
6.如权利要求5所述的除法器,其特征在于,所述控制模块根据外部除法指令的译码信号、数据类型标识信号、不恢复余数除法的上次迭代循环得出的AQ标识位、部分余数符号以及除数符号生成所述数据运算模块中加法器的加减控制信号;根据部分商符号、部分余数符号、除数符号、数据类型标志信号、用部分余数是否为0及其未经过修正的部分商是否为0来判断生成余数修正使能信号;根据部分商的符号、除数符号、修正后的余数是否为0标志生成商修正使能信号。
7.如权利要求6所述的除法器,其特征在于,所述数据输出模块用于根据所述余数修正使能信号选择输出余数结果或修正后的余数结果,并根据所述商修正使能信号选择输出商结果或修正后的商结果。
8.如权利要求1所述的除法器,其特征在于,所述除法器实现不恢复余数除法的过程包括四个阶段,具体为:
DIVS运算阶段,该阶段用于对外部输入数据进行预处理操作,并计算出带符号位的新商位,以及相应倍的除数结果;
DIVQ运算阶段,该阶段进行不恢复余数除法运算中的基本迭代运算操作,以从内部循环数据计算出商结果和余数结果;
MDIVR运算阶段,该阶段用于对余数结果进行修正,并输出正确的余数结果;
MDIVQ运算阶段,该阶段用于对商结果进行修正,并输出正确的商结果。
9.如权利要求8所述的除法器,其特征在于,所述数据预处理模块在DIVS阶段将被除数和除数选通输出至数据运算模块,其它阶段将上一阶段得到的结果数据和除数的各个倍数输出至数据运算模块;所述数据运算模块在DIVS阶段用于计算商的符号位或者商的最高位和除数的各个倍数,在DIVQ阶段对在末尾添加了部分被除数的部分余数和除数的相应倍数做加减迭代运算得到不同的加减结果提供给数据输出模块,在MDIVR阶段和MDIVQ阶段分别对商结果和余数结果进行修正得到修正后的商结果和余数结果;所述数据输出模块在DIVS阶段用于得到商结果的符号位,并输出DIVS阶段得到的结果输出,在DIVQ阶段根据所述数据运算模块计算得到加减迭代运算结果的符号得到部分商结果以及部分余数结果并输出DIVQ阶段的结果,在MDIVR阶段将选择输出上一阶段的余数结果或修正后的余数结果,并输出上一阶段的商结果,在MDIVQ操作阶段选择输出上一阶段的商结果或修正后的商结果,以及MDIVR阶段得到余数结果或修正后的余数结果。
10.如权利要求1所述的除法器,其特征在于,所述控制模块包括:指令译码逻辑模块、数据选通逻辑模块、加减操作逻辑模块、余数修正逻辑模块和商修正逻辑模块。
11.如权利要求10所述的除法器,其特征在于,所述指令译码逻辑模块用于对外部输入的指令进行译码,产生指示相应运算阶段的译码信号;所述数据选通逻辑模块用于产生数据预处理模块和数据输出模块的多路选通控制信号;所述加减操作逻辑根据指令译码逻辑产生的译码信号和数据类型标识信号、上次循环得到的AQ标志位、部分余数符号以及除数符号得到加减控制信号,所述加减控制信号用于控制所述数据运算模块做加或减运算;所述余数修正逻辑模块和商修正逻辑模块用于在MDIVR及MDIVQ运算阶段输出余数修正使能信号和商修正使能信号。
CN201310343999.5A 2013-08-08 2013-08-08 一种不恢复余数的除法器 Active CN103399725B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310343999.5A CN103399725B (zh) 2013-08-08 2013-08-08 一种不恢复余数的除法器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310343999.5A CN103399725B (zh) 2013-08-08 2013-08-08 一种不恢复余数的除法器

Publications (2)

Publication Number Publication Date
CN103399725A true CN103399725A (zh) 2013-11-20
CN103399725B CN103399725B (zh) 2017-04-12

Family

ID=49563360

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310343999.5A Active CN103399725B (zh) 2013-08-08 2013-08-08 一种不恢复余数的除法器

Country Status (1)

Country Link
CN (1) CN103399725B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103984522A (zh) * 2014-05-27 2014-08-13 中国人民解放军国防科学技术大学 Gpdsp中定点和浮点混合除法的实现方法
CN106406811A (zh) * 2016-08-30 2017-02-15 武汉虹信通信技术有限责任公司 一种基于fpga的数据流除法运行装置及方法
CN112653686A (zh) * 2020-12-17 2021-04-13 中国科学院电工研究所 一种基于mac加密的can总线消息认证方法
CN115033205A (zh) * 2022-08-11 2022-09-09 深圳市爱普特微电子有限公司 一种低延迟高精度定值除法器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1379323A (zh) * 2001-04-11 2002-11-13 北京国芯安集成电路设计有限公司 一种超长度的阵列式组合逻辑除法器
JP2008021189A (ja) * 2006-07-13 2008-01-31 Victor Co Of Japan Ltd 除算装置および除算方法
CN101692201A (zh) * 2009-10-14 2010-04-07 北京龙芯中科技术服务中心有限公司 一种定点除法器及其运算处理方法
CN102314331A (zh) * 2011-08-02 2012-01-11 深圳市国微电子股份有限公司 除法器及其实现方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1379323A (zh) * 2001-04-11 2002-11-13 北京国芯安集成电路设计有限公司 一种超长度的阵列式组合逻辑除法器
JP2008021189A (ja) * 2006-07-13 2008-01-31 Victor Co Of Japan Ltd 除算装置および除算方法
CN101692201A (zh) * 2009-10-14 2010-04-07 北京龙芯中科技术服务中心有限公司 一种定点除法器及其运算处理方法
CN102314331A (zh) * 2011-08-02 2012-01-11 深圳市国微电子股份有限公司 除法器及其实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吉雪芸等: "不恢复余数阵列除法器的FPGA实现", 《保定学院学报》 *
张欢欢等: "不恢复余数阵列除法器的形式化描述和验证方法", 《计算机科学》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103984522A (zh) * 2014-05-27 2014-08-13 中国人民解放军国防科学技术大学 Gpdsp中定点和浮点混合除法的实现方法
CN106406811A (zh) * 2016-08-30 2017-02-15 武汉虹信通信技术有限责任公司 一种基于fpga的数据流除法运行装置及方法
CN106406811B (zh) * 2016-08-30 2019-01-04 武汉虹信通信技术有限责任公司 一种基于fpga的数据流除法运行装置及方法
CN112653686A (zh) * 2020-12-17 2021-04-13 中国科学院电工研究所 一种基于mac加密的can总线消息认证方法
CN112653686B (zh) * 2020-12-17 2022-08-09 中国科学院电工研究所 一种基于mac加密的can总线消息认证方法
CN115033205A (zh) * 2022-08-11 2022-09-09 深圳市爱普特微电子有限公司 一种低延迟高精度定值除法器

Also Published As

Publication number Publication date
CN103399725B (zh) 2017-04-12

Similar Documents

Publication Publication Date Title
CN106325810B (zh) 微处理器
CN107305485B (zh) 一种用于执行多个浮点数相加的装置及方法
CN1928809A (zh) 用于执行浮点运算的系统、设备和方法
US20140195581A1 (en) Fixed point division circuit utilizing floating point architecture
CN103984521B (zh) Gpdsp中simd结构浮点除法的实现方法及装置
CN104579656A (zh) 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器
US20190146756A1 (en) Segment divider, segment division operation method, and electronic device
CN106250098B (zh) 用于在执行浮点运算时控制舍入的装置及方法
CN101630243A (zh) 超越函数装置以及用该装置实现超越函数的方法
US5023827A (en) Radix-16 divider using overlapped quotient bit selection and concurrent quotient rounding and correction
GB2421327A (en) Calculating the number of digits in a quotient for integer division
CN103399725A (zh) 一种不恢复余数的除法器
CN105022961A (zh) 一种计算机数据的保护方法及装置
CN100524201C (zh) 用于实现2的幂的浮点估计的装置与方法
CN101295237B (zh) 求商和余数的高速除法器
CN102231101A (zh) 一种除法器及除法处理方法
US6847986B2 (en) Divider
CN102004627A (zh) 乘法舍入实现方法和装置
US10216481B2 (en) Digit recurrence division with scaling and digit selection using intermediate value
US20140059106A1 (en) Arithmetic circuit for performing division based on restoring division
US10459689B2 (en) Calculation of a number of iterations
US8892622B2 (en) Pipelined divide circuit for small operand sizes
US11327718B2 (en) Arithmetic circuitry for power-efficient multiply-add operations
US20220171601A1 (en) Electronic architecture and semiconductor devices based on a base 60 numeral system
JP4109181B2 (ja) 論理回路、および、それを使用した浮動小数点演算回路とマイクロプロセッサ

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant