原创 用加法器实现减法器!

2009-4-9 21:24 11185 13 13 分类: FPGA/CPLD
正整數減法與減法器

在二進數目系統中,若一整數的最高有效位元(MSB)不是拿來區分正數或負數,那麼此數只能表達為正整數,關於正整數的減法想要用加法來做,首先得建立一個補數(complement)的觀念,例如:


9-3=6 可以用9+6=15 再把個位的5加上進位的1得6即為9-3的差,這就是用加法來做減法運算了,其中9+6中的6就是補數,它是依十進制的基底少一再減去差得到的,也就是9-3=6,"6"在此被稱為3的9補數。


点击看大图


因此二進制正整數的減法,同樣的可以將減數取1補數(比基底2少1的補數,記為1'S)再以加法完成,至於1'S的取法,只需將1、0互換即可,例如:


点击看大图


從以上的例子中,可以想像得到二進制正整數的減法,只要將減數取1補數後與被減數相加,再加上進位的1,也就是進位再加回來,在此被稱為端迴進位。因此,依此例而言圖6.2-1可以根據上述的規則達到目的,其中減數B3 B2 B1 B0經過反閘就等於取了1補數 ,再與被減數A3 A2 A1 A0用加法器相加,同時也把進位Co加在個位數(端迴進位),所得之結果即是A3 A2 A1 A0- B3 B2 B1 B0的差D3 D2 D1 D0


点击看大图


二進制正整數的減法做到這裡似乎解決了,但事實不然,我們看了以下這個例子會有新的發現。


点击看大图


當被減數小於減數時,前面提到的規則似乎不靈
了,但是不必氣餒先前的努力,只要再加少許的步驟二進制正整數的減法就告完善了。首先我們要檢查端迴進位是否為1,若是則結果不必修改,若為0則將結果再
取一次1補數,而且要在結果的數目前加上一個負號,一切又都正確了,例如本例中的端迴進位為0,則1001取1'S為0110,再加個「-」號,意即
-0110(十進制的-6),這是正確的答案。


至於電路如何修改呢?我們可以例用互斥或閘的
一支輸入腳來控制加法器的結果要不要取補數,見圖6.2-2所示,當端迴進位為1時經過反閘為0,因此互斥或閘的輸出D等於加法器的結果S,但是當端迴進
位為0時經過反閘為1,因此互斥或閘的輸出D等於加法器的結果S取1補數,同時也會將表示負數的LED亮起來。


点击看大图


这里要补充一点:  就是异或门的使用?  大家想想加个异或门的技巧的为什么这么爽?


对: c= ~A*B + A*~B ,在B=0,B=1 的情况下会有两个结果


B=0时   C = A  不变号


B=1     C = ~A 变号    

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /3 下一条