原碼乘法,原碼乘法原理詳解
1.人工算法與機器算法的同異性
在定點計算機中,兩個原碼表示的數(shù)相乘的運算規(guī)則是:乘積的符號位由兩數(shù)的符號位按異或運算得到,而乘積的數(shù)值部分則是兩個正數(shù)相乘之積。
設n位被乘數(shù)和乘數(shù)用定點小數(shù)表示(定點整數(shù)也同樣適用)
被乘數(shù) [x]原=xf .xn-1…x1x0
乘數(shù) ? [y]原=yf .yn-1…y1y0
則乘積
[z]原=(xf⊕yf)+(0.xn-1…x1x0)(0.yn-1…y1y0)??? (2.26)
式中,xf為被乘數(shù)符號,yf為乘數(shù)符號。
乘積符號的運算法則是:同號相乘為正,異號相乘為負。由于被乘數(shù)和乘數(shù)和符號組合只有四種情況(xfyf=00,01,10,11),因此積的符號可按“異或”(按位加)運算得到。
數(shù)值部分的運算方法與普通的十進制小數(shù)乘法類似,不過對于用二進制表達式的數(shù)來說,其乘法規(guī)則更為簡單一些。
設x=0.1101,y=0.1011.讓我們先用習慣方法求其乘積,其過程如下:
運算的過程與十進制乘法相似:從乘數(shù)y的最低位開始,若這一位為“1”,則將被乘數(shù)x寫下;若這一位為“0”,則寫下全0。然后在對乘數(shù)y的最高為進行乘法運算,其規(guī)則同上,不過這一位乘數(shù)的權與最低位乘數(shù)的權不一樣,因此被乘數(shù)x要左移一位。以此類推,直到乘數(shù)個位乘完為止,最后將它們統(tǒng)統(tǒng)加起來,變得到最后乘積z。
如果被乘數(shù)和乘數(shù)用定點整數(shù)表示,我們也會得到同樣的結果。
人們習慣的算法對機器并不完全適用。原因之一,機器通常只有n位長,兩個n位數(shù)相乘,乘積可能為2n位。原因之二,只有兩個操作數(shù)相加的加法器難以勝任將各n位積一次相加起來的運算。早期計算機中為了簡化硬件結構,采用串行的1位乘法方案,即多次執(zhí)行“加法—移位”操作來實現(xiàn)。這種方法并不需要很多器件。然而串行方法畢竟太慢,自從大規(guī)模集成電路問世以來,出現(xiàn)了各種形式的流水式陣列乘法器,它們屬于并行乘法器。
圖2.4 m×n位不帶符號的陣列乘法器邏輯圖
2.不帶符號的陣列乘法器
設有兩個不帶符號的二進制整數(shù):
A=am-1…a1a0
B=bn-1…b1b0
它們的數(shù)值分別為a和b,即
???
在二進制乘法中,被乘數(shù)A與乘數(shù)B相乘,產(chǎn)生m+n位乘積P:
P=pm+n-1…p1p0
乘積P 的數(shù)值為
???
實現(xiàn)這個乘法過程所需要的操作和人們的習慣方法非常類似:
上述過程說明了在m位乘n位不帶符號整數(shù)的陣列乘法中,“加法—移位”操作的被加數(shù)矩陣。每一個部分乘積項(位積)aibj叫做一個被加數(shù)。
這m×n個被加數(shù){aibj|0≤i≤m-1和0≤j≤n-1}
可以用m×n個“與”門并行地產(chǎn)生。顯然,設計高速并行乘法器的基本問題,就在于縮短被加數(shù)矩陣中每列所包含的1的加法時間。
這種乘法器要實現(xiàn)n位×n位時,需要n(n-1)個全加器和n2個“與”門。該乘法器的總的乘法時間可以估算如下:
令Ta為“與門”的傳輸延遲時間,Tf為全加器(FA)的進位傳輸延遲時間,假定用2級“與非”邏輯來實現(xiàn)FA的進位鏈功能,那么我們就有:
Ta = Tf = 2T
從演示中可知,最壞情況下延遲途徑,即是沿著矩陣P4垂直線和最下面的一行。因而得n位×n位不帶符號的陣列乘法器總的乘法時間為:
tm=Ta+(n-1)×6T+(n-1)×Tf
=2T+(n-1)×6T+(n-1)×2T=(8n-6)T (2.27)
[例16] 已知兩個不帶符號的二進制整數(shù)A=11011,B=10101,求每一部分乘積項aibj的值與p9p8……p0的值。
[解:]
???
a4b0=1 a3b0=1 a2b0=0 a1b0=1 a0b0=1
a4b1=0 a3b1=0 a2b1=0 a1b1=0 a0b1=0
a4b2=1 a3b2=1 a2b2=0 a1b2=1 a0b2=0
a4b3=0 a3b3=0 a2b3=0 a1b3=0 a0b3=0
a4b4=1 a3b4=1 a2b4=0 a1b4=1 a0b4=1
P=p9p8p7p6p5p4p3p2p1p0=1000110111(56710)
3.帶符號的陣列乘法器
(1) 對2求補器電路
我們先來看看算術運算部件設計中經(jīng)常用到的求補電路。一個具有使能控制的二進制對2求補器電路圖,其邏輯表達式如下:
C-1=0, Ci=ai+Ci-1
ai*=ai⊕ECi-1, 0≤i≤n
在對2求補時,要采用按位掃描技術來執(zhí)行所需要的求補操作。令A=an…a1a0是給定的(n+1)為帶符號的數(shù),要求確定它的補碼形式。進行求補的方法就是從數(shù)的最右端a0開始,,由右向左,直到找出第一個“1”,例如ai=1, 0≤i≤n。這樣,ai以左的每一個輸入位都求反,即1變0,0變1。最右端的起始鏈式輸入C-1必須永遠置成“0”。當控制信號線E為“1”時,啟動對2求補的操作。當控制信號線E為“0”時,輸出將和輸入相等。顯然,我們可以利用符號位來作為控制信號。
例如,在一個4位的對2求補器中,,如果輸入數(shù)為1010,那么輸出數(shù)應是0110,其中從右算起的第2位,就是所遇到的第一個“1”的位置。用這種對2求補器來轉換一個(n+1)為帶符號的數(shù),所需的總時間延遲為
tTC=n·2T+5T=(2n+5)T (2.28)
其中每個掃描級需2T延遲,而5T則是由于“與”門和“異或”門引起的。
(2) 帶符號的陣列乘法器
(n+1)×(n+1)位帶求補器的陣列乘法器邏輯方框圖
通常,把包括這些求補級的乘法器又稱為符號求補的陣列乘法器。在這種邏輯結構中,共使用三個求補器。其中兩個算前求補器的作用是:將兩個操作數(shù)A和B在被不帶符號的乘法陣列(核心部件)相乘以前,先變成正整數(shù)。而算后求補器的作用則是:當兩個輸入操作數(shù)的符號不一致時,把運算結果變成帶符號的數(shù)。
設A=anan-1…a1a0和B=bnbn-1…b1b0均為用定點表示的(n+1)位帶符號整數(shù)。在必要的求補操作以后,A和B的碼值輸送給n×n位不帶符號的陣列乘法器,并由此產(chǎn)生2n位真值乘積:
A·B=P=p2n-1…p1p0
p2n=an⊕bn
其中P2n為符號位。
上面所示的帶求補級的陣列乘法器既適用于原碼乘法,也適用于間接的補碼乘法。不過在原碼乘法中,算前求補和算后求補都不需要,因為輸入數(shù)據(jù)都是立即可用的。而間接的補碼陣列乘法所需要增加的硬件較多。為了完成所必需的乘法操作,時間大約比原碼陣列乘法增加1倍。
[例17] 設x=+15,y=-13,用帶求補器的原碼陣列乘法器求出乘積x·y=?
[解:]
設最高位為符號位,則輸入數(shù)據(jù)為
[x]原=01111 [y]原=11101
符號位單獨考慮,算前求補級后 |x|=1111,|y|=1101
算后經(jīng)求補級輸出并加上乘積符號位1,則原碼乘積值為111000011。
換算成二進制數(shù)真值是
x·y=( -11000011)2=(-195)10
十進制數(shù)驗證:x×y = 15× (-13) = -195相等。
[例18] 設x=+15,y=-13,用帶求補器的補碼陣列乘法器求出乘積x·y=?
[解:]
設最高位為符號位,則輸入數(shù)據(jù)用補碼表示為
[x]補=01111 [y]補=10011
符號位單獨運算,x0⊕y0=0+1=1
尾數(shù)部分算前求補器輸出為: |x|=1111,|y|=1101
算后求補器輸出為00111101,加符號位1,得
[x·y]補=100111101
補碼二進制數(shù)真值是
x·y=-1×28+1×25+1×24+1×23+1×22+1×20=(-195)10
十進制數(shù)驗證:???? x×y=(+15)×(-13)=-195相等。
非常好我支持^.^
(83) 31%
不好我反對
(185) 69%
相關閱讀:
( 發(fā)表人:admin )