基于可逆逻辑的除法器 【技术领域】
本发明涉及信息技术领域的低功耗的CMOS电路,特别涉及一种低功耗的基于可逆逻辑的除法器。
背景技术
除法是数值计算和数据分析中最常用的运算之一,许多高级运算如平方根、指数、三角函数等都与其有关。除法器是电子技术领域的基础模块,广泛应用于数字电路和数字系统的设计中。但传统的除法器是不可逆的,并且存在信息位的丢失,能耗较大。
Landauer已证实,由与门、异或门等这些不可逆的传统逻辑门构造的电路在运行过程中,不可避免的会产生能量的损耗。因为在计算过程中,每比特信息的丢失会消耗kT*ln2焦耳的能量,其中k是波尔茨曼常量,T是绝对温度。尽管与其它形式的能耗相比,kT*ln2是一个非常小的量,但在计算中消耗的总能量同信息丢失的个数是成正比的,也就是说,随着信息丢失个数的增加,能耗也随之增加,所以在进行低能耗电路设计时,这一能耗不能忽视。
1973年,Bennett指出,在电路中,为了避免因每比特信息丢失而产生的kT*ln2能耗,必须使用可逆逻辑门。可逆逻辑电路是无信息损失的,在理论上能实现零能耗。因此,用可逆逻辑门设计成的除法器可以大大的降低系统能耗。
【发明内容】
本发明的目的是提供一种不恢复余数的可逆除法器,通过一系列可逆模块及三态门的级联来实现。
本发明是通过以下的技术方案实现的:
一种基于可逆逻辑的除法器,包括两个可逆左移寄存器,其中一个是(n+2)输入/输出可逆左移寄存器Reg_1,另一个是n输入/输出可逆左移寄存器Reg_2;两个可逆复用器,其中一个是(n+1)比特可逆复用器MUX_1,另一个是n比特可逆复用器MUX_2;一个n输入/输出可逆串行进位加法器;一个基于可逆D型触发器的二分频器;一个反相器、n个三态门以及若干Feynman门。
更进一步地,所述基于可逆逻辑的除法器中,所述可逆复用器MUX_1的输出作为可逆左移寄存器Reg_1的输入,可逆复用器MUX_2的输出作为可逆左移寄存器Reg_2的输入;所述可逆左移寄存器Reg_1的第一输出P1作为第一Feynman门的第一比特输入,这个第一Feynman门的第二比特输入置零,通过这个第一Feynman门后,得到的两个输出都为P1,其中一个输出P1作为所述可逆加法器ADD的进位输入,用来控制所述可逆加法器ADD执行加法或减法,另一个输出P1控制除数的取反操作;可逆左移寄存器Reg_1的第二输出R=(rn-1…r1,r0)分别作为n个第二Feynman门的第一比特输入,这n个第二Feynman门的第二比特输入都置零,这n个第二Feynman门的第一输出作为最终的余数R=(rn-1…r1,r0),第二输出分别作为n个所述三态门的输入,n个所述三态门的输出作为可逆加法器ADD的部分输入B=(Bn…B2,B1);所述可逆加法器的输出(Cn,Sn…S2,S1)作为可逆复用器MUX_1的一个输入,可逆复用器MUX_1的另一个输入为(P,an-1…a1,a0)=(0,0…,0,0);可逆左移寄存器Reg_2的输出q0直接作为输出,(qn-1…q2,q1)分别作为(n-1)个第四Feynman门的第一比特输入,(n-1)个第四Feynman门地第二比特输入置零,这(n-1)个第四Feynman门第一输出作为部分余数输出,其第二输出连同Cn作为可逆复用器MUX_2的一个输入,可逆复用器MUX_2的另一个输入为被除数X=(xn-1,…x1,x0),可逆左移寄存器Reg_2的输出SO作为可逆左移寄存器Reg_1的输入。
本发明对除法器进行了基于可逆逻辑门的可逆设计,避免了因逻辑信息位的丢失产生的能量损耗,减少了应用了除法器的数字电路或数字系统的能耗。
附图说明:
图1:二选一n输入/输出可逆复用器的结构;
图2:n输入/输出可逆串行进位加法器的结构;
图3a:基于可逆D型触发器的二分频器的结构;
图3b:可逆二分频器基本模块;
图4a:可逆左移寄存器的结构;
图4b:可逆左移寄存器基本模块;
图4c:n输入/输出可逆左移寄存器的结构;
图5:三态门的结构;
图6:反相器的的结构;
图7:时钟脉冲CLK经过可逆二分频器及反相器后的输出结果的图示;
图8:基于可逆逻辑的n输入/输出除法器的结构。
具体实施方式:
一、构建基于可逆逻辑的除法器
基于可逆逻辑的除法器包括:可逆复用器、可逆串行进位加法器、可逆二分频器、可逆左移寄存器、三态门、反相器及若干Feynman门。
下面分别介绍每个模块的构建:
1、二选一n输入/输出可逆复用器由n个Fredkin门级联而成,伴随n个无用输出,如图1所示。其中S为控制输入,An…A2A1及Bn…B2B1是两组输入数据。当S=0时,输出数据Jn…J2J1=An…A2A1;当S=1时,输出数据Jn…J2J1=Bn…B2B1。
2、n输入/输出可逆串行进位加法器由n个HNG门级联而成,伴随2n个无用输出,如图2所示。单独的HNG门能实现全加器的功能,将低位HNG门的进位输出连到高位HNG门的进位输入,就能实现任意n输入/输出可逆串行进位加法器。
3、基于可逆D型触发器的二分频器由一个Fredkin门及两个Feynman门级联而成,伴随两个无用输出,如图3a所示,其基本模块如图3b所示,取名为“BUF”。如果时钟脉冲CLK的周期为T,则输出Qn+1的周期为2T。
4、图4a是一位可逆左移寄存器的基本结构,它由三个Fredkin门和三个Feynman门级联而成,其对应的功能表见表1。当HOLD=0,E=0时,寄存器执行数据的左移操作;当HOLD=0,E=1时,寄存器执行数据的同步置入操作;当HOLD=1时,不管使能端E的状态,寄存器为保持状态。图4b是一位可逆左移寄存器(图4a)的基本逻辑单元,它将主要的五个输入——CLK、HOLD、E、Qi-1及DIi,五个输出——CLK、HOLD、E、Qi及Qi封装成一个基本逻辑单元,记为可逆左移寄存器基本模块。
n输入/输出可逆左移寄存器由n个可逆左移寄存器基本模块(图4b)级联而成,如图4c所示。它的工作原理见表2。表1中第1、2行为寄存器左移操作;第3行为并行输入数据的同步置入操作;第4行为保持状态。
表1一位可逆左移寄存器的功能表
HOLD E 时钟脉冲CLK 输出Qi 0 0 ↑ Qi-1 0 1 ↑ DIi 1 × ↑ Qi
表2n输入/输出可逆左移寄存器的功能表
(n+2)输入/输出可逆左移寄存器由n+2个可逆左移寄存器基本模块级联而成。工作原理同n输入/输出可逆左移寄存器。
5、三态门的结构见图5,其真值表如表3所示。当使能端EN=1时,如果输入为0,则输出为0;如果输入为1,则输出也为1。当使能端EN=0时,不论输入取何值,电路的输出端出现开路,既不是低电平0也不是高电平1,这就是第三种高阻工作状态。三态门的输出作为可逆加法器ADD的输入B=(Bn…B2,B1)。
表3三态门电路的真值表
使能EN 输入 输出 1 0 0 1 1 1 0 × 高阻
6、反相器的结构如图6所示,它是最简单的可逆门——一输入一输出。当输入为0时,输出为1;当输入为1时,输出为0。在设计除法器时,可逆二分频器BUF的输出作为反相器的输入。时钟脉冲CLK,可逆二分频器BUF及反相器的输出关系如图7所示,由图7可知,通过可逆二分频器BUF后得到的时钟脉冲的周期为2T,是时钟周期CLK周期的两倍,通过反相器后得到的时钟脉冲的周期也为2T,与通过可逆二分频器BUF后得到的时钟脉冲不同之处在于:原来的上升沿变为下降沿,原来的下降沿变为上升沿。
在本发明的除法器中,反相器的输出是用来控制三态门的工作状态的,具体地说,是指当时钟周期CLK为奇数个周期时,三态门处于高阻状态,此时相当于断路,可逆加法器不工作;当时钟周期CLK为偶数个周期时,三态门正常工作,输出等于输入,可逆加法器运行。因为有n个三态门,所以反相器的输出要用到n次,为了避免可逆逻辑中的扇出,需要利用n个Feynman门,作为复制门来解决扇出的问题。
7、基于可逆逻辑的n输入/输出除法器
本发明的除法器适用于除数与被除数都是正整数的情况,把除法运算转化成移位运算及加/减法运算,为使本发明的技术方案更加清楚明白,以下参照图8对本发明进一步详细说明。
图8所示的基于可逆逻辑的除法器适用于除数和被除数都为正整数的情况。它的组成部件是2个可逆左移寄存器:Reg_1及Reg_2,Reg_1为(n+2)输入/输出可逆左移寄存器,Reg_2为n输入/输出可逆左移寄存器;两个可逆复用器:MUX_1及MUX_2,MUX_1为(n+1)比特可逆左移寄存器,MUX_2为n比特可逆左移寄存器;一个可逆加法器ADD;一个基于可逆D型触发器的二分频器;一个反相器;n个三态门以及若干Feynman门。
可逆复用器MUX_1的输出J=(jn,jn-1…j1,j0)作为可逆左移寄存器Reg_1的输入。同理,可逆复用器MUX_2的输出K=(kn-1…k1,k0)作为可逆左移寄存器Reg_2的输入。
可逆左移寄存器Reg_1的输出P1作为第一Feynman门的第一比特输入,第二比特输入置零。通过第一Feynman门后,得到的两个输出都为P1,一个输出P1作为可逆加法器ADD的进位输入,主要控制可逆加法器是执行加法还是减法,另一个输出P1控制除数的取反操作。所谓取反操作,简单来说,当Feynman的一个输入为A,另一个输入为0,则它的两个输出都为A,此时Feynman门起到了复制的作用;当Feynman的一个输入为A,另一个输入为1时,得到一个输出为A,另一个输出为A,也就是实现了取反。在本发明中,控制除数取反操作的P1的值为1时,就实现了取反操作;P1的值为0时,就相当于起到复制的作用。
可逆左移寄存器Reg_1的第二输出R=(rn-1…r1,r0)分别作为n个第二Feynman门的第一比特输入,第二比特输入置零。因为R=(rn-1…r1,r0)需要用到两次,而可逆电路中是不允许出现扇出的,所以利用n个第二Feynman门解决这个扇出问题。这n个第二Feynman门的其中n个输出作为最终的余数R=(rn-1…r1,r0),另n个输出分别作为n个三态门的输入。
除数Y=(yn-1…y1,y0)分别作为n个第三Feynman门的第一比特输入,前述第一Feynman门的另一个输出P1通过该n个第三Feynman门来控制除数Y=(yn-1…y1,y0)的取反操作。其中y0对应的第三Feynman门的第二输入为前述第一Feynman门的输出反馈,也就是前述第一Feynman门的另一个输出P1;y1,y2,…,yn-1各自对应的第三Feynman门的第二输入都是前一个第三Feynman的输出反馈;如果反馈的是0(即P1=0),则这n个第三Feynman门输出等于原除数,且作为可逆加法器ADD的输入A=(An…A2,A1);如果反馈的是1(即P1=1),则这n个第三Feynman门输出为原除数取反后的值,且作为可逆加法器ADD的输入A=(An…A2,A1)。也就是说,所述除数Y=(yn-1…y1,y0)经取反或以原值作为所述可逆加法器ADD的输入。
可逆加法器的输出(Cn,Sn…S2,S1)作为可逆复用器MUX_1的一个输入,另一个输入为(P,an-1…a1,a0),(P,an-1…a1,a0)的初始值为(0,0…0,0),Cn是每执行一次可逆加法器ADD而产生的对应商值,需要反馈给可逆复用器MUX_2。因为Cn用到了两次,所以借助一个Feynman门解决了扇出的问题。
可逆左移寄存器Reg_2的输出q0直接作为输出,(qn-1…q2,q1)分别作为(n-1)个第四Feynman门的第一比特输入,第二比特输入置零。这(n-1)个第四Feynman门第一输出作为部分余数输出,第二输出连同Cn作为可逆复用器MUX_2的一个输入,另一个输入为被除数X=(xn-1…x1,x0)。可逆左移寄存器Reg_2的输出SO作为可逆左移寄存器Reg_1的输入,与Reg_1的SI相连。SI对应图4b中的Qi-1,简单来说,是指前一状态的输出;SO对应图4b中的Qi,简单来说,是指最后的输出状态。
本发明的除法器的核心部件是两个可逆左移寄存器:Reg_1及Reg_2,其中Reg_1为(n+2)输入/输出可逆左移寄存器,Reg_2为n输入/输出可逆左移寄存器,它们主要执行数据的同步置入及左移。待除法完成后,Reg_1的部分输出结果为余数R=(rn-1…r1,r0),Reg_2的输出值为商Q=(qn-1…q1,q0)。
起初,令P=1及A=(an-1…a1,a0)=0,作为可逆复合器MUX_1的其中一个输入数据。被除数X=(xn-1…x1,x0)作为可逆复合器MUX_2的其中一个输入数据。控制信号SELECT=0时,MUX_1的输出J=(jn,jn-1…j1,j0)=(P,an-1…a1,a0),MUX_2的输出K=(kn-1…k1,k0)=(xn-1…x1,x0)。此后令SELECT=1。
当钟脉冲上升沿第一次出现,且控制信号E=1及HOLD1=0,HOLD2=0时,MUX_1的输出值J作为Reg_1的部分输入并被同步置入,MUX_2的输出值K作为Reg_2的输入并被同步置入。接着令E=0,当下一个时钟脉冲来临时,Reg_1和Reg_2进行数据的左移操作。
在第一个脉冲上升沿至第二个脉冲上升沿出现的这段时间内,三态门的控制端EN=0,此时不论三态门的输入为何,它的输出端出现开路,处于高阻工作状态,可逆加法器不工作。随着第二个脉冲上升沿的到来,三态门的控制端EN=1,此时电路处于通路,且三态门的输出等于输入,可逆加法器进行工作。Reg_1的输出P1的值将决定可逆加法器到底是执行加法还是减法。当P1=1时,进行减法运算;当P1=0时,进行加法运算。由于是原码除法,所以第一步进行减法运算,即P1=1。这也就是设置初始值P=1的原因。
第一步执行减法后,要将结果(最高进位Cn及和S=(Sn…S2,S1))反馈给MUX_1,作为MUX_1的另一个输入。更重要的一点是,商的值直接与最高进位Cn相关,所以还需将Cn的值反馈给MUX_2。因为SELECT=1时,所以MUX_1的输出J=(jn,jn-1…j1,j0)=(Cn,Sn…S2,S1),MUX_2的输出K=(kn-1…k1,k0)=(qn-1…q1,q0,Cn)。
当第三个时钟上升沿来临时,Reg_1及Reg_2完成新数据的置入,当第四个时钟上升沿来临时,完成数据的左移,并执行新一轮的加/减法与相应值的反馈。
如此循环,当第2n+1个时钟上升沿来临后,令控制信号HOLD2=1,此时Reg_2的输出为最终的商值Q=(qn-1…q1,q0)。如果此时Reg_1的输出P0=1,则令HOLD1=1,输出为最终的余数R=(rn-1…r1,r0);如果此时P0=0,则令HOLD1=1,等待第2n+2个时钟上升沿的来临,此时再做一次加法运算,并返回相应的值,且令HOLD1=0。当第2n+3个时钟上升沿来临后,令控制信号HOLD1=1,此时Reg_1的输出才为最终的余数R=(rn-1…r1,r0)。至此,计算过程结束。
二、运行该可逆除法器
起初,令P=1及A=(an-1…a1,a0)=0,作为可逆复合器MUX_1的其中一个输入数据。被除数X=(xn-1…x1,x0)作为可逆复合器MUX_2的其中一个输入数据。控制信号SELECT=0时,MUX_1的输出J=(jn,jn-1…j1,j0)=(P,an-1…a1,a0),MUX_2的输出K=(kn-1…k1,k0)=(xn-1…x1,x0)。此后令SELECT=1。
当钟脉冲上升沿第一次出现,且控制信号E=1及HOLD1=0,HOLD2=0时,MUX_1的输出值J作为Reg_1的部分输入并被同步置入,MUX_2的输出值K作为Reg_2的输入并被同步置入。接着令E=0,当下一个时钟脉冲来临时,Reg_1和Reg_2进行数据的左移操作。
在第一个脉冲上升沿至第二个脉冲上升沿出现的这段时间内,三态门的控制端EN=0,此时不论三态门的输入为何,它的输出端出现开路,处于高阻工作状态,可逆加法器不工作。随着第二个脉冲上升沿的到来,三态门的控制端EN=1,此时电路处于通路,且三态门的输出等于输入,可逆加法器进行工作。Reg_1的输出P1的值将决定可逆加法器到底是执行加法还是减法。当P1=1时,进行减法运算;当P1=0时,进行加法运算。由于是原码除法,所以第一步进行减法运算,即P1=1。这也就是设置初始值P=1的原因。
第一步执行减法后,要将结果(最高进位Cn及和S=(Sn…S2,S1))反馈给MUX_1,作为MUX_1的另一个输入。更重要的一点是,商的值直接与最高进位Cn相关,所以还需将Cn的值反馈给MUX_2。因为SELECT=1时,所以MUX_1的输出J=(jn,jn-1…j1,j0)=(Cn,Sn…S2,S1),MUX_2的输出K=(kn-1…k1,k0)=(qn-1…q1,q0,Cn)。
当第三个时钟上升沿来临时,Reg_1及Reg_2完成新数据的置入,当第四个时钟上升沿来临时,完成数据的左移,并执行新一轮的加/减法与相应值的反馈。
如此循环,当第2n+1个时钟上升沿来临后,令控制信号HOLD2=1,此时Reg_2的输出为最终的商值Q=(qn-1…q1,q0)。如果此时Reg_1的输出P0=1,则令HOLD1=1,输出为最终的余数R=(rn-1…r1,r0);如果此时P0=0,则令HOLD1=1,等待第2n+2个时钟上升沿的来临,此时再做一次加法运算,并返回相应的值,且令HOLD1=0。当第2n+3个时钟上升沿来临后,令控制信号HOLD1=1,此时Reg_1的输出才为最终的余数R=(rn-1…r1,r0)。至此,计算过程结束。