古詩詞大全網 - 成語用法 - 306 - 加法器的優化——超前進位加法器(Carry-Lookahead Adder,CLA)

306 - 加法器的優化——超前進位加法器(Carry-Lookahead Adder,CLA)

上壹節我們學習了ALU的加法實現功能部件——全加器,進行兩個4bit的二進制數相加,就要用到4個全加器(如圖1所示)。那麽在進行加法運算時,首先準備好的是1號全加器的3個input。而2、3、4號全加器的Cin全部來自前壹個全加器的Cout,只有等到1號全加器運算完畢,2、3、4號全加器才能依次進行進位運算,最終得到結果。 這樣進位輸出,像波浪壹樣,依次從低位到高位傳遞, 最終產生結果的加法器,也因此得名為 行波進位加法器 (Ripple-Carry Adder,RCA)。

RCA的優點是電路布局簡單,設計方便, 我們只要設計好了全加器,連接起來就構成了多位的加法器。 但是缺點也很明顯,也就是 高位的運算必須等待低位的運算完成 , 這樣造成了整個加法器的延遲時間很長。那麽,RCA的效率到底如何呢?讓我們來算壹算:

將4bit的RCA內部結構全部打開,就得到了如圖2所示的4-bit RCA的門電路圖。要對壹個電路的性能進行分析,我們就要找出其中的最長路徑。 也就是找出所有的從輸入到輸出的電路連接中,經過的門數最多的那壹條,也稱為關鍵路徑(如圖3所示)。

我們來做壹個簡單的分析, 對於最低位的全加器,它在A、B和Cin都已經準備好。其實,輸入信號進入到這塊電路之後,在連接線上傳遞需要花時間。 稱為 線延遲 ,而經過這樣的門,也需要花時間,稱為 門延遲 。 在進行設計原理分析時,我們主要關註門延遲。

從第壹個全加器的A-S這條通路來看,產生第壹個S輸出,需要通過兩個門的延遲。 所以它顯然不是最長的路徑,當然,從A出發或著從B出發都是壹樣的, 所以對於第壹個全加器,它的最長路徑,是紅色線標記的那條,後面的全加器關鍵路徑同理可得。

那麽,假設經過壹個門電路的延遲時間為T,那麽經過4個全加器所需要的總延遲時間就是:2T x 4 + T(第壹個全加器產生3個T) = 9T。所以推出,經過n個全加器所產生的總延遲時間為2T x n + T = (2n+1)T。

對於壹個32bit的RCA,有總延遲時間:(2n+1)T =(2×32+1)×T =65T,這是什麽概念呢?舉個例子,iPhone 5s的A7 SoC處理器采用28nm制造工藝,主頻1.3GHz(0.66ns)。按照這個工藝水平,門延遲T設為0.02ns,那麽32-bit RCA的延遲時間為1.3ns ,時鐘頻率為769MHz,遠超A7處理器的主頻延遲時間,更別說這個32bit的RCA只是壹個加法運算器,更更別說,我們在計算過程中只考慮了門延遲,還有線延遲等各種延遲沒有加入計算……

所以RCA的效率絕對是個問題。那麽,有沒有辦法優化呢?RCA的主要問題是高位的運算必須等待低位的“進位輸出信號”,那我們的優化思路就是‘能否提前計算出“進位輸出信號’ ?”

參見圖2,我們可以用前壹個全加器的參數來表示後面的進位輸出(Cout),即:

由此來表示4個全加器的進位輸出為:

最終我們需要得到的是C4,經過換算,C4=G3+P3·G2+P3·P2·G1+P3·P2·P1·G0+P3·P2·P1·P0·C0,而這些參數,全部已知!並不需要前壹個全加器運算輸出,由此我們得到了提前計算進位輸出的方法, 用這樣的方法實現了加法器就被稱為 超前進位加法器 (Carry-Lookahead Adder,CLA)。

根據上面的優化算法,我們重新繪制了CLA的布線方式(如圖4):

那麽使用CLA來進行加法運算的效率如何呢?還是按照Apple A7處理器的工藝水平,單個CLA的延遲為0.08ns,4級CLA的延遲為0.26ns,時鐘頻率3.84GHz,都遠遠小於主頻的延遲,完全符合標準。然而,由圖可見,計算4bit的二進制數,就要平行排列4個全加器,那麽要是計算8bit,16bit,32bit……的呢?可能就需要更復雜的布線方式,這就是CLA的缺點。

最後,我們列個表比較壹下RCA和CLA的優缺點:

32位的加法器如果采用行波進位的方式,我們已經分析過需要65級的門延遲, 那如果采用超前進位的方式,理想情況下也只需要四級的門延遲,但可惜的是, 這也只是壹個理想。因為要實現32位的完全的超前進位,電路就會變得非常的復雜。 因此通常的實現方法, 是采用多個小規模的超前進位加法器拼接而成壹個較大的加法器,例如,用4個8-bit的超前進位加法器連接成32-bit加法器。