首先畫出2位全加器的真值表與卡諾圖
根據真值表可知二進位制加法與十進位制加法一樣,進製值是逢二進一.而和值則是上級進製值跟被加數跟加數總和模二的餘數.根據卡諾圖化簡得到s與ci+1的全加器電路為:
多位加法器可以用行波進製加法器實現,也就是第一位的ci為0,第二位開始,ci就連線著上一級的ci+1,這樣時鐘從第一位開始,一直到第n位.但是這樣有個時延的問題,一級的ci需要經過兩個門,假設有個32位加法器,要計算第32位時需要經過64個門後才能得到第32個ci.
有了加法自然就有減法.減法的實現為被加數加上加數的2的補碼.乙個n位數x的2的補碼k求得為:k=((2的n次方)-1)-x+1.也可以說以基數為2的補碼.舉個栗子:無符號四位數8-5,8的二進位制為1000,5的二進位制為0101,現在需要求5的2的補碼,2的4次方為16,二進位制為10000,減1後為1111,用1111減去0101後得到1010,再加上1,就是1011,現在用1000加上1011就是0011(忽略進製),10進製結果為3.
有符號和無符號的加法是一樣的,需要區別的是結果的最高符號位為0還是1,如果為0則是正數,如果為1則是負數,需要用2的補碼方式得到該負數的絕對值.舉個栗子:-3-(-2),-3的2的補碼為1101,-2的補碼為1110,因為是減法,需要得到減數的2的補碼,又為0010,1101加0010等於1111,最高位為1,結果是負數,按2的補碼方式取絕對值為0001,結果是-1.
不論加減法都存在算術溢位,也就是兩個4位數相加或相減,其結果可能會超出4位的範圍.那麼判斷算術是否有溢位只需要判斷結果的符號位與數值最高位是否一致即可,如果一致則表示無溢位,如果不一致,則表示有溢位.
前面說的行波進製加法器在加上級進製時必須等待上級電路執行完才有結果,而超前進製加法器則不需要等待上一位的執行即可得到前面的進製.可以從本級進製公式中看出:
ci+1 = xiyi+(xi+yi)ci
ci = xi-1yi-1+(xi-1+yi-1)ci-1
ci = xi-1yi-1+(xi-1+yi-1)(xi-2yi-2+(xi-2+yi-2)ci-2)
這樣以此遞迴下去,直到第0位.其中xiyi是生成函式,記作gi,因為當被加數和加數都等於1時,不管有沒上級進製,本級也一定會進製的,而xi+yi是傳播函式記作pi,也就是xi或yi其中乙個等於1,並且有上級進製,那麼那本級也會進製.舉個栗子:乙個8位超前進製加法器,求它的第八位的上級進製值的函式為:
c8 = g7+p7c7
c8 = g7+p7(g6+p6c6)
c8 = g7+p7(g6+p6(g5+p5c5))
c8 = g7+p7(g6+p6(g5+p5(g4+p4c4)))
c8 = g7+p7(g6+p6(g5+p5(g4+p4(g3+p3c3))))
c8 = g7+p7(g6+p6(g5+p5(g4+p4(g3+p3(g2+p2c2)))))
c8 = g7+p7(g6+p6(g5+p5(g4+p4(g3+p3(g2+p2(g1+p1c1))))))
c8 = g7+p7(g6+p6(g5+p5(g4+p4(g3+p3(g2+p2(g1+p1(g0+p0c0)))))))
因為c0是第一位數值,沒有上級可進製,固定為0,把最後面公式從最裡面的括號展開轉成積之和形式為:
c8 = g7+p7g6+p7p6g5+p7p6p5g4+p7p6p5p4g3+p7p6p5p4p3g2+p7p6p5p4p3p2g1+p7p6p5p4p3p2p1g0+p7p6p5p4p3p2p1p0c0
用9個與門和乙個或門即可知道c8的的結果值.而c64,c32,c7,c6,c5...也是用以上方式展開,在同一時間,各個位即可知道它的上級進製,而不需要等到它的上一級執行完了才得到進製值.這樣並行的加法器大大地縮短了電路時延.
如果是乙個32或者64位的超前進製加法器這樣按如上公式寫的話會變得長而複雜,所以可以分開8位為一組.用4個八位超前進製加法器即可組成乙個32位的.對於以上公式g7+p7g6+p7p6g5+p7p6p5g4+p7p6p5p4g3+p7p6p5p4p3g2+p7p6p5p4p3p2g1+p7p6p5p4p3p2p1g0是生成函式記作s,因為其中每乙個乘積項都有乙個位生成函式,換句話說只要其中乙個乘積項的xi與yi都為1,並且它的後續位的xi或yi只要其中乙個為1,那麼本級進製值就為1.而p7p6p5p4p3p2p1p0則是傳播函式記作b,只要每一位其中xi或yi為1,並且第一位的進製值為1,那麼本級進製值就為1.所以以上公式也可以寫成c8 = s0+b0c0.就有:
c32 = s3+b3c3
c32 = s3+b3(s2+b2c2)
c32 = s3+b3(s2+b2(s1+b1c1))
c32 = s3+b3(s2+b2(s1+b1(s0+b0c0)))
超前進製加法器
在實時訊號處理中,常常要用到多位數字量的加法運算,但序列加法器速度較慢,超前進製加法器則能滿足要求,且結構並不複雜。現在普遍使用的並行加法器是超前進製加法器,只是在幾個全加器的基礎上增加了乙個超前進製形成邏輯,以減少由於逐步進製訊號的傳遞所造成的時延。具體的演算法為 s i x i y i c i ...
46 超前進製加法器
module add ahead sum,cout,a,b,cin output 7 0 sum output cout input 7 0 a,b input cin wire 7 0 g,p wire 7 0 c,sum assign g 0 a 0 b 0 產生第 0位本位值和進製值 assi...
超前進製加法器的理解
目前在所有的cpu中,為了提高加法的計算速度。都採用了超前進製加法器。普通的加法器我們很好理解,我這裡從網上找了一張圖。可以想象最簡單的加法計算就是每一位都進行一次全加器計算,然後產生乙個進行c,下乙個全加器在取得進製以後再進行他的位的計算,迴圈下去直到最後一位。這樣的問題是進行一次32位的加法計算...