一、基本的二進制加法/減法器
半加器
不考慮進位
各種邏輯門的圖形符號
1.一位全加器
常用的全加器邏輯電路
2.n位的行波進位加減器
n個1位的全加器(FA)可級聯成一個n位的行波進位加減器。
行(xing)波進位:串行進位,高位的運算要等待低位的進位傳到才能執行,區別於並行進位或超前進位。
對行波進位加法/減法器的解讀
1.行波進位加/減法器
n個1位的全加器(FA)可級聯成一個n位的行波進位加減器
2.M爲方式控制輸入線(控制進行加法,還是減法運算) :
當M= 0時,作加法(A+B)運算;
當M= 1時,作減法(A- B)運算;
具體地,
[A-B]補=[A]補+[-B]補
已知[B]補,通過M=1,得到[-B]補
3.電路採用單符號位法的溢出檢測邏輯:
當Cn=Cn-1時,運算無溢出;
當Cn≠Cn- 1時,運算有溢出,經異或門J產生溢出信號。
4.n位行波進位加法器的延遲時間ta的計算
當前位全加和Si必須等低位進位Ci-1來到後才能進行,加法時間與位數有關。
定義T:單級邏輯電路的單位門延遲,T通常採用一個“與非”門或一個“或非”門的時間延遲來作爲度量單位。
3T:異或門的延遲時間
加法器開啓之後經過3T:確定了是加運算還是減運算
對一位全加器(FA)來說,Si的時間延遲爲6T(每級 異或門延遲3T);Ci+1的時間延遲爲5T。
加法器開啓之後經過6T:每個全加器Ai⊕Bi的值得到
加法器開啓之後經過8T:通過C0得到了C1的值
最後一次進位完成之後,耗費3T:完成溢出檢測
在整個行波進位的過程中同時得到各Si
n位行波進位加法器的延遲時間ta爲:ta=3T+ 3T+ n:2T+ 3T=n.2T+9T=(2n+9)T
從上式可看出,採用行波進位加法器時,位數越多,延遲時間越長。也可採用先行進位等方法縮減運算時間。
ta爲在加法器的輸入端輸入加數和被加數後,在最壞的情況下加法器輸出端得到穩定的求和輸出所需要的最長時間。
ta越小越好。
5.由一位全加器(FA)構成的行波進位加法器的缺點:
缺點:
(1)串行進位,它的運算時間長;
(2)只能完成加法和減法兩種操作而不能完成邏輯操作。
多功能算術/邏輯運算單元(ALU):
不僅具有多種算術運算和邏輯運算的功能;
而且具有先行進位邏輯。
從而能實現高速運算。
二、定點乘法運算
1.乘法的手工算法
設n位被乘數和乘數用定點小數表示
被乘數 [x]原=xf . xn-1… x1x0
乘數 [y]原=yf . yn-1… y1y0
則乘積
[z]原=(xf⊕yf)+(0. xn-1… x1x0)(0. yn-1… y1y0)
式中,xf 爲被乘數符號, yf 爲乘數符號。
(1)乘積符號的運算規則:同號相乘爲正,異號相乘爲負。
(2) 手工運算過程:
設x=0.1101,y=0.1011
機器與人們習慣的算法不同之處:
(1) 機器通常只有n位長, 兩個n位數相乘, 乘積可能爲2n位。
(2) 只有兩個操作數相加的加法器難以勝任將n位積 一次相加起來的運算。
2.適合定點機的形式
爲了適合兩個操作數相加的加法器,將 x·y 改寫成下面形式:
根據此式,按式中括號可表達的層次,從內向外逐次進行移位累加。
一般而言,設被乘數x,乘數y都是小於1的n位定點正數:
x=0.x1x2......xn <1
y=0.y1y2......yn <1
形成遞推公式
3.原碼一位乘法流程圖
高基乘法:
以上討論的乘法都只是檢查一位二進制位。能否同時檢查K位二進制位?以K=2, C=A × B爲例
如果這兩位二進制位爲00,則加0
如果這兩位二進制位爲01,則加A
如果這兩位二進制位爲10,則加2A 2A=4A-2A
如果這兩位二進制位爲11,則加3A 3A=4A-A
如果這兩位二進制位爲11,則減A, 4A待下一次補上,由於部分積己右移兩位,原來加4A變成加A號
如何知道有4A的操作?
兩位二進制位爲10或11,則加4A
高速乘法部件——陣列乘法器
硬件乘法器的常規設計是適用“串行移位”和“並行加法”相結合的方法,這種方法並不需要很多器件。然而串行方法畢竟太慢,執行一次乘法的時間至少是執行一次加法時間的n倍,不能滿足科學技術對高速乘法所提出的要求。自從大規模集成電路問世以來,高速的單元陣列乘法器應運而生,出現了各種形式的流水線陣列乘法器,它們屬於並行乘法器,提供了極快的速度。陣列乘法器的運算過程如下:
第一:當乘數的位數字爲1 時,我們可以將被乘數的值直接放置適當的位置。而適當的位置是依乘數的第幾個位和被乘數做運算之後所放的位置。
第二:當乘數的位數字爲0 時,我們可以將0 放置適當的位置, 以作爲部分乘積。
第三:我們利用筆和紙計算的乘法,在硬件中使用與門來實現。例如:1000 ×1中,乘數1 和每一個被乘數的位都個別做與運算,其結果爲1000 正是我們所要的結果。由此可知我們只需用與門就可以完成我們所要的乘法。
第四:當部分乘積都運算完成後,使用加法來完成最終的乘法結果運算。
根據以上四點的說明,我們可以運用最簡單、最直觀的方式來描述固定點乘法器的電路描述。我們使用與門來做部分積運算,使用全加器(Full adder)來運算部分積的最終結果。圖1所示爲有符號位的5x5固定點乘法器的架構圖。
• 不需要很多器件,硬件結構簡單;
• 速度太慢,執行一次乘法操作的時間至少是加法操作的n倍;
由於乘法操作大約佔全部算術運算的1/3,故採用高速乘法部件是非常必要的。
2.不帶符號的陣列乘法器
設有兩個不帶符號的二進制整數 A=am-1…a1a0 , B=bn-1…b1b0
它們的數值分別爲a和b,即:
(1) 習慣方法運算過程:
(2) 不帶符號陣列乘法器邏輯框圖
(3) 5 X 5位不帶符號陣列乘法器邏輯電路圖
3.帶符號的陣列乘法器
(1) 對2求補器電路
例1: 對1010求補。
例2: 對1011求補。
方法:從數的最右端a0開始,由右向左, 直到找出第一個“1”,例如ai=1, 0≤i≤n。這樣, ai以左的每一個輸入位都求反, 即1變0, 0變1。
對2求補電路
(2) 帶符號A的陣列乘法器
(3) 結構:
包括求補級的乘法器又稱爲符號求補的陣列乘法器。
在這種邏輯結構中,共使用三個求補器:
• 兩個算前求補器 作用是:將兩個操作數A和B在被不帶符號的乘法陣列(核心部件)相乘以前,先變成正整數。
• 算後求補器 作用是:當兩個輸入操作數的符號不一致時,把運算結果變成帶符號的數。
在必要的求補操作以後,A和B的碼值輸送給n×n位不帶符號的陣列乘法器,並由此產生2n位的乘積:
A·B=P=p2n-1…p1p0 p2n=an⊕bn 其中P2n爲符號位。
三、定點除法運算
除法算法設計
設有n位定點小數:
被除數 x,其原碼爲 [x]原=xf . xn-1… x1 x0
除數 y,其原碼爲 [y]原=yf . yn-1… y1 y0
則有商q=x/y,其原碼爲 [q]原=(xf⊕yf) + (0. xn-1…x1x0 / 0.yn-1… y1y0)
• 商的符號運算qf=xf⊕yf 與原碼乘法一樣;
• 商的數值部分的運算,實質上是兩個正數求商的運算。
1.手算運算步驟
例: 設被除數x=0.1001, 除數y=0.1011, 仿十進制除法運算, 手算求x÷y的過程。
得x÷y的商q=0.1101, 餘數爲r=0.00000001。
2.機器運算與手算的不同
原碼一位除法
結果與手算相同,但餘數不是真正的餘數,多乘了2n,故正確的餘數應爲2-n×rn,即:0.00000001
(1) 在計算機中,小數點是固定的,不能簡單地採用手算的辦法。爲便於機器操作, 除數Y固定不變, 被除數和餘數進行左移 (相當於乘2)。
(2) 機器不會心算,必須先作減法,若餘數爲正, 才知道夠減;若餘數爲負, 才知道不夠減。不夠減時必須恢復原來的餘數, 以便再繼續往下運算。這種方法稱爲恢復餘數法。
(3) 要恢復原來的餘數, 只要當前的餘數加上除數即可。但由於要恢復餘數, 使除法進行過程的步數不固定, 因此控制比較複雜。
實際中常用不恢復餘數法,又稱加減交替法。其特點是運算過程中如出現不夠減,則不必恢復餘數,根據餘數符號, 可以繼續往下運算,因此步數固定,控制簡單。
3.恢復餘數法
被除數減除數,夠減時,商1;不夠減時商0。
由於商0時若不夠減,即不能作減法,但現在在判斷是否商0時,已經減了除數,爲了下次能正確運算,必須把已減掉的除數加回去恢復餘數。這就是“恢復餘數法”。
【例1】x=0.1001, y=0.1011, 用恢復餘數法求 x/y。
解:[x]原 =[x]補= x=0.1001, [y]補=0.1011, [-y]補=1.0101
餘數每次左移相當於乘以2,在求得n位商後,相當於多乘了2^n,所以最後餘數應乘以2^(-n)纔是正確的值。
故:[q]原=0. 1 1 0 1 餘數 [r4]原=0.00000001
4.加減交替法(不恢復餘數法)
上述恢復餘數法由於要恢復餘數,使得除法的步數不固定,控制比較複雜。實際上常用的是加減交替法。
特點:當運算過程中出現不夠減的情況,不必恢復餘數,而是 根據餘數的符號,繼續往下運算,因此步數固定,控制簡單。
運算規則:
當餘數爲正時,商1,餘數左移一位,減除數;
當餘數爲負時,商0,餘數左移一位,加除數。
【例2】x=0.1001, y=0.1011, 用加減交替法求 x/y. 解:[x]原=[x]補= x =0.1001, [y]補=0.1011, [- y]補=1.0101
【例3】x=0.1011, y=0.1101, 用加減交替法求 x/y. 解:[x]原=[x]補= x =0.1011, [y]補=0.1101, [- y]補=1.0011
原碼加減交替除法流程圖
原碼加減交替法原理邏輯框圖
陣列除法器
陣列式除法器是一種並行運算部件, 採用大規模集成電路製造。與早期的串行除法器相比, 陣列除法器不僅所需的控制線路少, 而且能提供令人滿意的高速運算速度。
陣列除法器有多種多樣形式:
不恢復餘數陣列除法器;
補碼陣列除法器等等。
1.可控加法/減法(CAS)單元
用於並行除法流水邏輯陣列中。
CAS單元的輸入與輸出的關係可用如下一組邏輯方程來表示:
Si=Ai⊕(Bi⊕P)⊕Ci
Ci+1=(Ai+Ci)·(Bi⊕P)+AiCi
• 當P=0時, 即是我們熟悉的一位全加器(FA)的公式:
Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+BiCi+AiCi
• 當P=1時, 則得求差公式:
在減法情況下:輸入Ci稱爲借位輸入,而Ci+1稱爲借位輸出。
爲說明CAS單元的實際內部電路實現,將方程式
Si=Ai⊕(Bi⊕P)⊕Ci
Ci+1=(Ai+Ci)·(Bi⊕P)+AiCi
加以變換,可得如下形式:
在這兩個表達式中,每一個都能用一個三級組合邏輯電路(包括反向器)來實現。因此每一個基本的CAS單元的延遲時間爲3T單元。
2.不恢復餘數的陣列除法器(不恢復餘數陣列除法,也叫加減交替法。)
在不恢復餘數的除法陣列中: • 當餘數爲正時(ri ≥ 0) ,商“1”,下次做減法運算,減法是用2的補碼運算來實現的,此時
[x-y]補= [x ]補+ [-y]補;
• 當餘數爲負時(ri< 0) ,商“0”,下次做加法運算;
• 每次運算完成後要將餘數左移一位,再與除數做加或減運算; • 商的符號由兩數的符號按位相加求得。
例: x=0.101001, y=0.111, 求x÷y。 [-y]補=1.001
例: x=0.100101, y=0.101, 求x÷y。 [-y]補=1.011
• 被除數x是一個6位的小數(雙倍長度值):
x=0.x1x2x3x4x5x6
它是由頂部一行和最右邊的對角線上的垂直輸入線來提供的。
• 除數y是一個3位的小數
y=0.y1y2y3
它沿對角線方向進入這個陣列。這是因爲:
在除法中所需要的部分餘數的左移,可以用下列等效的操作來代替:即讓餘數保持固定,而將除數沿對角線右移。
• 最上面一行所執行的初始操作經常是減法。因此最上面一行的控制線P固定置成“1”。
• 減法是用2的補碼運算來實現的,這時右端各CAS單元上的反饋線用作初始的進位輸入。
• 每一行最左邊的單元的進位輸出決定着商的數值。
將當前的商反饋到下一行,我們就能確定下一行的操作。
由於進位輸出信號指示出當前的部分餘數的符號,因此,它將決定下一行的操作將進行加法還是減法。
由圖看出,該陣列除法器是用一個可控加法/減法(CAS)單元所組成的流水陣列來實現的。
推廣到一般情況:
一個(n+1) 位除(n+1)位的加減交替除法陣列由(n +1)2個CAS單元組成, 其中兩個操作數(被除數與除數) 都是正的。 n爲尾數位數。
對不恢復餘數陣列除法器來說,在進行運算時:
• 沿着每一行都有進位(或借位)傳播;
• 同時所有行在它們的進位鏈上都是串行連接;
• 而每個CAS單元的延遲時間爲3T單元。
因此,對一個2n位除以n位的不恢復餘數陣列除法器來說,單元的數量爲(n+1)2,考慮最大情況下的信號延遲,其除法執行時間爲 td=3T(n+1)^2 其中n爲尾數位數。