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