RM新时代网站-首页

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>電腦硬件>臺(tái)式機(jī)>

原碼乘法,原碼乘法原理詳解

2010年04月13日 10:55 hljzzgx.com 作者:佚名 用戶評(píng)論(0
關(guān)鍵字:原碼乘法(6010)
原碼乘法,原碼乘法原理詳解

  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…x10 
  乘數(shù)  ?  [y]=yf .yn-1…y10
  
  則乘積
  
  [z]=(xf⊕yf)+(0.xn-1…x10)(0.yn-1…y10)??? (2.26)

  式中,xf為被乘數(shù)符號(hào),yf為乘數(shù)符號(hào)。

  乘積符號(hào)的運(yùn)算法則是:同號(hào)相乘為正,異號(hào)相乘為負(fù)。由于被乘數(shù)和乘數(shù)和符號(hào)組合只有四種情況(xff=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 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      RM新时代网站-首页