一款32位嵌入式CPU的定點(diǎn)加法器設(shè)
從cpu的指令執(zhí)行頻率上看,算術(shù)邏輯單元、程序計(jì)數(shù)器、協(xié)處理器是cpu中使用頻率最多的模塊,而加法器正是這些模塊的核心部件,幾乎所有的關(guān)鍵路徑都與之有關(guān),因而設(shè)計(jì)一種通用于這些模塊的加法器是整個(gè)cpu設(shè)計(jì)中關(guān)鍵的一步。為此,筆者根據(jù)32位cpu的400mhz主頻的要求,結(jié)合cpu流水線結(jié)構(gòu),借鑒各種算法成熟的加法器,提出一種電路設(shè)計(jì)簡(jiǎn)單、速度快、功耗低、版圖面積小的32位改進(jìn)定點(diǎn)加法器的設(shè)計(jì)方案。
1 設(shè)計(jì)思想
對(duì)于高性能cpu中使用的加法器,速度顯然是第一位的,所以考慮采用并行計(jì)算的方法,并且在電路的設(shè)計(jì)上采用少量的器件來(lái)獲得速度上的巨大提升。從面積有度出發(fā),鏈?zhǔn)竭M(jìn)位加法器(ripple-carry adder)的器件最少,面積最小,版圖工作量也最小,可是由于加法器的高位進(jìn)位要等待低位的運(yùn)算結(jié)束后才能得到,所以沒(méi)有辦法在速度上達(dá)到要求。鑒于此,采用類似于鏈?zhǔn)郊臃ㄆ鞯?結(jié)構(gòu)。 省先從進(jìn)位選擇加法器(carry-select adder)得到提示,將32位加法器一分為二,分為低16位加法器和高16位加法器,再將低16位加法器的進(jìn)位輸出作為選擇信號(hào),用于選擇高16位加法器的和及第27位的進(jìn)位輸出(這個(gè)進(jìn)位輸出要在溢出邏輯判斷中使用,而普通的加法器則不用產(chǎn)生進(jìn)位)。通過(guò)這樣的處理,將一個(gè)32位的加法器簡(jiǎn)化就成了兩上16位的加法器,如圖1所示。
另外,從超前進(jìn)位加法器(carry-look-ahead adder)獲得提示,在超前進(jìn)位加法器中引入中間變量g和p用于加速進(jìn)位鏈的速度。而g和p在邏輯表達(dá)式上與前一級(jí)的進(jìn)位無(wú)關(guān),只與每一級(jí)的操作數(shù)輸入有關(guān),而且它們又是構(gòu)成本級(jí)進(jìn)位的必要部分。在微處理器的數(shù)據(jù)通道上,數(shù)據(jù)傳輸是并行進(jìn)行的,即兩個(gè)32位操作數(shù)幾乎同一時(shí)間到達(dá)時(shí)加法器。所以,g和p不論是加法器的最低位還是加法器的最高位,幾乎都可以在相同的時(shí)間內(nèi)得到,因而進(jìn)位鏈上就可以借鑒這個(gè)特點(diǎn)加速進(jìn)位的傳遞。以一個(gè)四位加法器為例,有如下的邏輯推導(dǎo)過(guò)程:
c4=c3p4+g4=(c2p3+g3)·p4=g4=c2p3p4+g3p4+g4=(c1p2+g2) ·p3·p4+g3p4+g4=c1p2p3p4+g2p3p4+g3p4=(c0p1+g1) ·(p2p3p4)+(g2p3p4+g3p4+g4)=c0·(p1p2p3p4)+(g1p2p3p4+g2p3p4+g3p4+g4)
令上式中p1p2p3p4為pgroup,g1p2p3p4+g2p3p4+g3p4+g4為ggroup,如果將32位加法器劃分為若干的小塊,則每一個(gè)小塊都可以有自己相對(duì)應(yīng)的ggroup和pgroup。由此可知對(duì)于整個(gè)加法器的時(shí)延來(lái)說(shuō),關(guān)鍵路徑的時(shí)延總值可以由三部分組成:①產(chǎn)生ggroup和pgroup的時(shí)延;②進(jìn)位傳遞邏輯上的器件時(shí)延;③加法器進(jìn)位鏈上的導(dǎo)線時(shí)延。對(duì)于這三類時(shí)延,時(shí)延①與時(shí)延(②+③)存在重疊的部分,于是使這兩類時(shí)延合理銜接,可以使得進(jìn)位鏈上的邏輯級(jí)數(shù)最小,從而使得電路上的傳輸時(shí)延達(dá)到最小上。
2 具體實(shí)現(xiàn)
2.1 4位加法器模塊的實(shí)現(xiàn)
在具體的電路設(shè)計(jì)中,先將32位數(shù)據(jù)通道劃分成了高低兩部分,然后以4位為單位劃分成更小的模塊。這些模塊在結(jié)構(gòu)上是基本一致的,但在功能上要完成本模塊四組操作數(shù)(a[k:k+3]和b[k:k+3])與進(jìn)位ck的加法運(yùn)算,并要產(chǎn)生模塊的中間變量ggroup和pgroup的運(yùn)算。
對(duì)于單一的每一位,定義它的g和p分別為:gi=aibi,pi=ai+bi,加法器的和sumi=ai+bi+ci-1=pi+ci-1,考慮到器件的實(shí)際驅(qū)動(dòng)能力,結(jié)合加法器的另一個(gè)功能——減法運(yùn)算,設(shè)計(jì)出如圖2所示的帶減法功能的一位加法器電路。
點(diǎn)擊看原圖設(shè)計(jì)的4位加法器進(jìn)位鏈如圖3所示,除c0外,輸入(pi和gi)都是由圖2的一位加法器產(chǎn)生的,所有4位進(jìn)位鏈ci都按超前進(jìn)位加法器連接方式直接接入相應(yīng)位置。由此可以看出,進(jìn)位信號(hào)到達(dá)各位的邏輯級(jí)數(shù)是相當(dāng)?shù)?,只要在進(jìn)位信號(hào)到達(dá)之間使所有的中間信號(hào)gi和pi都能及時(shí)產(chǎn)生,就能及時(shí)得到每一位的和(sum)。
點(diǎn)擊看原圖
圖4是產(chǎn)