專用集成電路 -- 運算電路
1. 二進制加法器
二進制加法器接收加數A和B,以及進位Ci,輸出和S,以及進位輸出Co.
二進制加法器的真值表如下:

邏輯表達式:
從實現的角度,可以將S和Co定義為一些中間信號:
- \(G=AB\):進位產生(generate),為1時,保證\(C_o=1\)
- \(D=\overline{A}\cdot \overline{B}\):進位取消(delet),為1時,保證\(C_o=0\)
- \(P = A\oplus B\):進位傳播(propagate),為1時,保證\(C_o=C_i\)
上面的幾個變量均和Ci無關,可以將邏輯表達式寫為這些值的函數:
二進制全加器的一個特性是,輸入反向的話,輸出也反向,可以通過邏輯表達式觀察得到:

1.1 逐位進位加法器
也叫行波進位加法器。通過把N個二進制全加器(FA)串聯起來得到。

1.2 靜態CMOS加法器
如果直接用CMOS實現上面的二進制全加器,將會消耗36個管子,而實際上可以通過將邏輯表達式變形,來使得“和”與“進位產生”電路共享某些邏輯:
從真值表很容易驗證這與之前的式子等價。並且只需要28管:

上面電路用到了一個小技巧,就是將Ci關鍵信號放在靠近輸出端,可以避免內部節點充放電等待Ci信號的到來,改善輸出的延時。
缺陷:
- 進位產生與和產生電路中堆疊了很多PMOS管
- Co信號的本征負載電容很大,包括兩個擴散電容,6個柵極電容加上布線電容。
- 在進位產生電路中經過了兩個反向級,如果進位鏈輸出的負載很小,兩級邏輯引起額外的延時。
- 和的產生要求一個額外的邏輯級
延時優化:
利用全加器的反向特性,輸入反向輸出也反向,可以在加法器鏈中引入輸入反向的全加器:

1.3 鏡像加法器(mirror adder)
鏡像加法器的特點:
- 基於G,D,P變量
- 取消了進位反向門
- PDN和PUN不再是對偶的CMOS結構,而是對稱結構。
- 只消耗24個晶體管
- 只有在進位產生電路的管子需要優化尺寸改善速度,求和電路的晶體管都可以使用最小尺寸。關鍵點在於使\(\overline{C_o}\)處電容最小。
\(G=AB\),\(D=\overline{A}\cdot \overline{B}\),$P = A\oplus B \((與\)A+B\(等價) \)C_o(G,P) = G + PC_i\(,\)S = ABC_i+\overline{C_o}(A+B+C_i)$

可以分析一下鏡像加法器的工作方式,實際上鏡像加法器的進位電路巧妙利用了進位產生,消除和傳播:
- 當A=B=1時,G=1,表示進位產生,此時通過PDN的兩個串聯NMOS可以將輸出拉低,得到Co的反向信號,並且此時PUN不導通;
- 當A=B=0時,D=1,表示進位消除,此時通過PUN的兩個串聯PMOS可以將輸出拉高,得到Co的反向信號;並且此時PDN不導通;
- 當A和B不全為1時,P=1,表示進位傳播。PUN和PDN都部分導通(輸入為A和B的PMOS和NMOS都有一個導通),上拉還是下拉取決於進位輸入Ci,與公式中的\(PC_i\)相匹配,並且輸出Co的反向信號。
- 對於和電路也可以同樣分析。
鏡像加法器的版圖:

1.4 傳輸門型加法器
使用傳輸門來構建和與進位電路,特點是它的和與進位輸出具有近似的延時。也是24管。
\(G=AB\),\(D=\overline{A}\cdot \overline{B}\),$P = A\oplus B \((與\)A+B\(等價) \)C_o(G,P) = G + PC_i\(,\)S(G,P) = P\oplus C_i$

需要注意的是,在Co的產生電路中,用到了一個變換:
1.5 曼徹斯特進位鏈加法器
在傳輸門加法器中,進位電路可以進行優化,比如可以使用進位消除和產生信號來控制進位電路(下左圖):

此外,使用動態邏輯可以更加簡化,傳輸門也只需要使用單管,並且不需要進位取消電路。如上面右圖。在預充電(\(\phi=0\))時,輸出節點充到VDD,表示Co=0;求值時,根據G和Ci信號決定有無進位產生。下圖是曼徹斯特進位鏈的構造:

上圖中加法器進位鏈在最壞情況下的延時模型可模擬為線性RC網絡。其延時為:
版圖:

1.6 進位旁路加法器(Carry-Bypass Adder)
旁路進位加法器又叫進位跳躍加法器(carry-skip adder) :

基本思路是增加一條進位旁路,通過進位選擇信號\(BP=P_0P_1\dots P_n\)信號來選擇進位輸出是否直接選擇最底層的進位進行輸出。進而加快加法器。
曼徹斯特進位鏈實現的旁路加法器:

從上圖中可以發現,當BP為高時,直接輸出進位輸入,而BP不為高時,則輸出由中間的某些G信號決定,與Ci無關。這一性質可以極大加速加法器鏈,因為若干個這樣的模塊串聯在一起時,實際上各個模塊的進位電路中直到選擇器之前的部分都可以並行地執行,而無需等待上級進位信號。
下面來計算旁路加法器的傳播延時。首先對於N級的旁路進位加法器,假設其被划分為(N/M)個等長的旁路,每個旁路含有M位:

上圖中灰色部分為關鍵路徑。其延時可以表示為:
可以看到,雖然旁路加法器的延時仍然關於N呈線性關系,但斜率除以了一個M,但是多了幾個常數項,所以反映到下圖的延時和級數N的關系曲線中就會發現,當N比較大時旁路加法器優於逐位進位,但N比較小(4-8)時,反而比逐位進位差。

1.7 線性進位選擇加法器(Linera Cary-Select Adder)
線性進位選擇加法器其實跟上面的旁路加法器類似,但是旁路加法器可以工作的一個條件是進位鏈中要使用G信號或者D信號來保證不選擇旁路時加法器鏈的輸出也跟輸入進位Ci無關。因此旁路加法器需要額外的BP信號(每級P相與)配合進位產生信號G來控制進位鏈。
另外一種方法是使用線性進位選擇加法器,其工作更加簡單粗暴,為了使得加法器鏈的進位輸出跟輸入解耦,直接考慮進位輸入的兩種可能值,提前計算兩種可能結果,等到輸入進位到來直接根據進位值選擇哪條路徑輸出即可,這意味着同時實現了0和1進位輸入的兩個進位路徑:

付出的代價是一個額外的進位路徑和一個多路開關,大概等於逐位進位結構的30%。
可以推導進位選擇加法器的傳播延時為:
可見其傳播延時仍然關於N呈線性關系。
1.8 平方根進位選擇加法器(Square-Root Carry-Select Adder)
在上面的線性選擇加法器中,每級分配相同的全加器,因此每級的延時都相同,每級進位鏈的結果在上一級的多路開關信號到來前已經穩定下來,可見在后面的幾級在時刻5已經完成,但每級等待的時間越來越長,如圖:

如果能夠使后級不需要等待前一級多路開關的信號,而是在剛求完本級就正好接受到前級信號,就能消除這個等待時間:

上圖就是平方根進位選擇加法器,其與線性選擇加法器的區別只在於每級的位數逐級遞增。通過這種方式,每級在計算完本級的進位結果的同時上一級的多路開關信號正好到來。
假設總共含有\(P\)級,第一級為\(M\)位。則有
如果\(M<<N,如M=2,N=64\),則第一項起主要作用,則有\(N = \frac{P^2}{2}, P=\sqrt{2N}\)
因此其傳播延時可寫為:
從公式可以看到,由於此處的M是初級的位數,一般都比線性選擇加法器的小,延時並且跟根號2N呈線性關系,所以反應到延時和級數曲線中,平方根進位選擇加法器跟縱軸交點要小於線性選擇,且當N比較大時斜率遠小於線性選擇加法器:

1.9 超前進位加法器(Carry-lookahead Adder)
a. 單一超前進位加法器
上面的選擇和旁路加法器雖然能減少延時,但逐級進位效應仍然存在。超前進位加法器解決了這一問題。
其基本思想是:
N位加法器的每一位上都有下面的關系:
通過展開\(C_{o,k-1}\),一直展開到第一級可以徹底消除每級進位的前一級的依賴,代價是實現加法器的邏輯逐級增加:

下面是一個四級超前進位加法的實現,利用了對偶性(類似鏡像加法器):

局限:
單一超前進位加法器只在N比較小(<5)時使用,實際上的延時還是隨位數線性增加的,這主要由下面的因素決定:
- 大的扇入使得在N較大時極慢
- 如果用較為簡單的門實現,則需要多個邏輯層次,也會增加延時
- 某些信號的扇出常常過度增加,使得加法器更慢,例如G0和P0信號出現在后面的每級中,導致線電容較大
b. 對數超前進位加法器
將進位傳播和進位產生組織成遞歸的樹狀結構:

在上面的公式中,進位傳播被分解成兩位的子組合\(G_{i:j},P_{i:j}\).稱之為塊進位產生和塊進位傳播信號。
引入一個新的布爾運算,稱之為點操作\((\cdot)\):
利用這個操作可以分解\((G_{i:j},P_{i:j})=(G_{i:k},P_{i:k})\cdot (G_{k-1:j},P_{k-1:j})\),點操作服從結合律,不服從交換律。
利用點操作的結合律,可以構成一個樹結構來計算所有\(2^i-1\)個位置上的進位,並且只需要\(log_2(N)\)就可計算出來。因此對數加法器可以將傳播延時降低到\(log_2(N)\)。
下面是基於點操作的基2 kogge-Stone草簽僅為對數加法器原理圖。
其中白色小方格表示建立P和G信號,黑點表示點操作,菱形表示和產生。

對於N=16的情形,整個加法器需要49個邏輯門。
1.10 動態邏輯實現加法器
下面是用動態多米諾邏輯實現的加法器進位產生和傳播信號電路。

以及多米諾邏輯實現的點操作電路:

還需要配套的求和電路:

其中\(S_i^0=\overline{a_i\oplus b_i}\),\(S_i^1=a_i\oplus b_i\).上圖中的保持器是重要的,因為前面兩級多米諾邏輯違反了多米諾的設計規則:兩個動態門串聯在一起而沒有在中間插入反相器。如果用同一個時鍾求值,則會第二個門的輸出可能會有毛刺。
1.10 總結
各類加法器傳播延時和面積與級數的關系圖:

2. 乘法器
2.1 陣列乘法器
實現乘法的比較常用的方法是類似與手工計算乘法的方式:

對應的硬件結構就是陣列乘法器(array multiplier)它有三個功能:產生部分積,累加部分積和最終相加。

陣列乘法器的關鍵路徑為(下圖標出了兩條可能的關鍵路徑):

假設乘數為\(N\),被乘數為\(M\)。則上面的乘法器產生\(N\)個部分積,乘法位數為\(M\),則需要\(N\times M\)個二輸入AND門以及\(N-1\)個\(M\)位加法器。
可以得到關鍵路徑延時為:
2.2 進位保留乘法器
背景:由於陣列乘法器中有許多幾乎一樣的關鍵路徑,因此通過調整晶體管的尺寸來提高性能效果有限。
解決:進位輸出可以沿着對角線傳播而不是向左傳遞,這樣傳播並不改變結果,只需要加入額外的一排加法器(向量合並加法器vector-merging)來產生最終的結果。這樣的乘法器叫做進位保留乘法器:

可見,相比於陣列乘法器,進位保留乘法器增加了部分面積,但關鍵路徑唯一確定。
下圖是進位保留加法器的布圖(floorplan)結構。其規整的結構適合自動化生成。

2.3 樹形乘法器
部分積的求和加法器可以安排為樹形以減少關鍵路徑和減少加法器。其中兩個點的是半加器,三個點的是全加器。其壓縮過程可以分為下面幾步:


可見,前面的兩部只需要三個半加器和三個全加器,最后一步是簡單的加法器鏈。只比較前面部分的話,進位保留加法器的前面部分需要6個全加器和6個半加器!
優點:除了節省乘法器需要的硬件,Wallace樹形乘法器也可以減少傳播延時,其延時\(O(log_{1.5}(N))\)。
缺點: 非常不規則,版圖設計復雜。
2.4 Booth乘法器
在下面詳細說明了Booth乘法器原理:
3. 移位器
3.1 一位可控移位器
其實是一個復雜的多路開關電路,根據不同控制信號,將輸入左移或右移或不變。
多位的移位可以簡單串聯這樣的單元實現,但移位位數多時,該方法過於復雜,不實用並且速度很慢。

3.2 桶形移位器
由晶體管陣列構成,行數等於數據字長,列數等於最大移位寬度。

特點:
- Sh0Sh3**只能有一位是高電平**,分別控制A右移0位3位
- 自動支持符號位擴展
- 信號最多只需要通過一個傳輸門,也就是說傳播延時理論上是常數,與位數和規模無關(實際上因為緩沖器輸入電容會隨着移位寬度線性增加,所以延時不會是常數)
- 版圖尺寸不由晶體管決定,而是通過布線數目或者所金屬線的間距決定。
- 適用於移位數較小的移位器。

3.3 對數移位器
桶形移位器實現為傳輸管的單個陣列,而對數移位器采用分級的方法。移位值分解為幾個2的指數值。

- 對數移位器的速度取決於移位寬度,一個M為的移位器需要\(log_2M\)級,
- 適用於較大的移位值,在速度和面積上都更有效,且容易參數化。
版圖:
