通常我們所使用的加法器一般是串行進位,將從輸入的ci逐位進位地傳遞到最高位的進位輸出co,由於電路是有延遲的,這樣的長途旅行是需要時間的,所以為了加快加法器的運算,引入了超前進位全加器。
全加器的兩個邏輯表達式
sum = a ^ b ^ cin;
co = a & b | (a ^ b) & cin;
sum = a ^ b ^ cin;
co = a & b + a & cin + b & cin;
這兩個公式的電路圖看起來不一樣,但其實是一樣的,同一個功能的電路可以有不同的描述方式。而且把co這兩個表達式展開,觀察其最小項表達式(畫卡諾圖),最終的結果也是一樣的和真值表完全相符。
四位超前進位全加器
根據一位全加器的表達式可以推理出,四位全加器每一位的計算通式。
為了達到並行的效果,通過公式化簡,得到co和sum的表達式,每一位之間的運算都是獨立的,和低位的運算沒有關系,這樣做達到完全並行,這就是四位超前進位全加器。
有了四位全加器,我們可以以通過四位超前進位全加器設計出16位、32位、64位超前進位全加器,有些設計方法是將四個四位超前進位全加器串聯起來,即將低四位的co連接到高四位的cin上,但這樣並不能算得上是真正的並行,每四位是並行的,但每四位之間是串行的,博主目的是要達到完全並行的設計,繼續往下看吧。
這里的g是generation(生成)的意思,當a和b同時為1時,1位全加器必然產生進位,p表示propagation(傳到)的意思,當a或b中有一個是1時,如果進位cin位1,1位全加器必然產生進位,利用這個原理即可做出四位超前進位全加器之間的超前進位。
四位超前進位全加器的co進位輸出端為
這與一位全加器的進位類似,
我們可以推出如下關系式
我們通過調用四個超前進位全加器即可實現16位超前進位全加器,那么實現64位超前進位全加器其實也是和這個實現方法一樣了,調用4個16位超前進位全加器就可以實現64位超前進位全加器。不過實際中CPU采用的是超前進位和串行進位集合,並行設計占面積,串行設計速度慢,盡量做到面積與速度之間的權衡。
博主最近要學Verilog設計一個32位的簡易CPU,其中ALU中想用上32位超前進位全加器。對於32位超前進位全加器,也是一樣的方法。我選擇的是三級並行設計,即四個四位超前進位全加器組間並行實現16位超前進位全加器,兩個16位超前進位全加器組間並行實現32位超前進位全加器,至於兩級並行還是多級並行看自己選擇了。
轉載請注明出處:NingHeChuan(寧河川)
個人微信訂閱號:開源FPGA
如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關注個人微信訂閱號
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/8798972.html