Booth算法-乘法器實(shí)驗(yàn)報(bào)告_第1頁(yè)
Booth算法-乘法器實(shí)驗(yàn)報(bào)告_第2頁(yè)
Booth算法-乘法器實(shí)驗(yàn)報(bào)告_第3頁(yè)
Booth算法-乘法器實(shí)驗(yàn)報(bào)告_第4頁(yè)
Booth算法-乘法器實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上Booth乘法器實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)?zāi)康?、理解并掌握乘法器的原理。2、理解并掌握Booth算法,及其實(shí)現(xiàn)方式。二、實(shí)驗(yàn)原理1、乘法規(guī)律 假定是十進(jìn)制數(shù)的各位要么為0要么為1,例如1000*1001被乘數(shù) 1 0 0 010乘數(shù) × 1 0 0 110 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 積 1 0 0 1 0 0 010 從上面可以得出乘法的基本規(guī)律:(1)從右到左用乘數(shù)的每一位乘以被乘數(shù),每一次乘得的中間結(jié)果比上一次的結(jié)果往左移一位。(2)積的位數(shù)比被乘數(shù)和乘數(shù)的位數(shù)要多得多。(3)若十進(jìn)制各位限制為0或1,則乘法變成 若乘數(shù)位為

2、1,則簡(jiǎn)單的復(fù)制被乘數(shù)到合適的位置; 若乘數(shù)位是0,則在合適的位置置0。2、有符號(hào)數(shù)乘法Booth乘法器(1)1的分類Booth算法的關(guān)鍵在于把1分類為開(kāi)始、中間、結(jié)束3種,如下圖1的開(kāi)始1的中間0 11 11 01的結(jié)束B(niǎo)ooth算法1的分類示意圖(2)算法描述 以前乘法器的第一步是根據(jù)乘數(shù)的最低位來(lái)決定是否將被乘數(shù)加到中間結(jié)果積,而B(niǎo)ooth算法則是根據(jù)乘數(shù)的相鄰兩位來(lái)決定操作,第一步根據(jù)相鄰2位的4種情況來(lái)進(jìn)行加或減操作,第二步仍然是將積寄存器右移。算法描述如下:根據(jù)當(dāng)前位和其右邊的位,作如下操作 00:0的中間,無(wú)任何操作; 01:1的結(jié)束,將被乘數(shù)加到積的左半部分; 10:1的開(kāi)始,

3、積的左半部分減去被乘數(shù); 11:1的中間,無(wú)任何操作。 將積寄存器算術(shù)右移一位。對(duì)于Booth算法,舉例如下:210*-310=-610 ,或者說(shuō)是00102*11012=1111 10102 。運(yùn)算過(guò)程見(jiàn)下表。Booth算法運(yùn)算過(guò)程重 復(fù) 步 驟被 乘 數(shù)(md) 積 (p)0初始值 00100000 1101 011:10->積=積-被乘數(shù)2:積右移一位 00101110 1101 01111 0110 121:01->積=積+被乘數(shù)2:積右移一位 00100001 0110 10000 1011 031:10->積=積-被乘數(shù)2:積右移一位 00101110 1011

4、01111 0101 141:11->nop2:積右移一位 00101111 0101 11111 1010 1三、實(shí)驗(yàn)步驟1、在PC機(jī)上完成ISE的安裝。2、完成工程設(shè)計(jì)。3、下載。四、實(shí)驗(yàn)現(xiàn)象1、Modelsim 按照實(shí)例給出仿真結(jié)果2、輸入輸出規(guī)則(1)輸入的4位被乘數(shù)md3md0對(duì)應(yīng)四個(gè)開(kāi)關(guān)。(2)輸入的4為乘數(shù)mr3mr0對(duì)應(yīng)四個(gè)按鍵。(3)乘積product的后兩位對(duì)應(yīng)LED點(diǎn)。3、操作細(xì)節(jié)Booth算法實(shí)驗(yàn)重 復(fù) 步 驟被 乘 數(shù)(md) 積 (p)被 乘 數(shù)(-7)10乘數(shù)是(6)100初始值10010000 0110 011:10->積=積-被乘數(shù)2:積右移一位1

5、0010000 0110 00000 0011 021:01->積=積+被乘數(shù)2:積右移一位 10010111 0011 00011 1001 131:10->積=積-被乘數(shù)2:積右移一位 10010011 1001 10001 1100 141:11->nop2:積右移一位 10011010 1100 11101 0110 0重 復(fù) 步 驟被 乘 數(shù)(md) 積 (p)被 乘 數(shù)(-4)10乘數(shù)是(-5)100初始值 11000000 1011 011:10->積=積-被乘數(shù)2:積右移一位 11000100 1011 00010 0101 121:01->積=積

6、+被乘數(shù)2:積右移一位 11000010 0101 10001 0010 131:10->積=積-被乘數(shù)2:積右移一位 11001101 0010 11110 1001 041:11->nop2:積右移一位 11000010 1001 00001 0100 1五、心得體會(huì)通過(guò)這次實(shí)驗(yàn),真正領(lǐng)悟到所謂的“軟件思想”與“硬件理念”的不同。脫開(kāi)VHDL,我們用學(xué)過(guò)的任意高級(jí)語(yǔ)言編程,我們可以對(duì)變量循環(huán)賦值、可以隨賦值隨利用,但這些是純的軟件思想,硬件無(wú)法立即反應(yīng)與實(shí)現(xiàn),信號(hào)量在賦值方面尤其體現(xiàn)了這一點(diǎn)。實(shí)驗(yàn)中,由于積寄存器在一步操作中既要做加減運(yùn)算,又要右移,反復(fù)操作了很多次,卻始終無(wú)法

7、完成一個(gè)信號(hào)量在一個(gè)進(jìn)程中完成兩個(gè)操作,也試驗(yàn)了在兩個(gè)進(jìn)程中分別完成,但結(jié)果又成了多驅(qū)動(dòng)問(wèn)題。追究了半天原因,想到了用能“即賦值即使用”的變量來(lái)作為“媒介”,用變量來(lái)完成加減運(yùn)算,而積寄存器只需要從“媒介”中右移一位取值,這樣可以既運(yùn)算又完成右移。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Booth isport( md:in std_logic_vector(3 downto 0); mr:in std_logic_vector(3 downto 0); p: buffer

8、std_logic_vector(8 downto 0); clk:in std_logic; final:buffer std_logic);end entity;architecture rtl of Booth issignal count:std_logic_vector(2 downto 0);signal t:std_logic_vector(3 downto 0);shared variable c:std_logic_vector(4 downto 0);shared variable b:std_logic_vector(8 downto 0);begin process(c

9、lk) begin c(0):='0' if(clk'event and clk='1')then b(8 downto 0):=p(8 downto 0); if(count="000")then p(8 downto 5)<="0000"p(4 downto 1)<=mr(3 downto 0);p(0)<='0' b(8 downto 5):="0000"b(4 downto 1):=mr(3 downto 0);b(0):='0' t(3

10、 downto 0)<=not md(3 downto 0)+'1' final<='0' elseif(p(1 downto 0)="01")thenb(8 downto 5):=b(8 downto 5)+md(3 downto 0);elsif(p(1 downto 0)="10")thenb(8 downto 5):=b(8 downto 5)+t(3 downto 0);end if; p(8)<=b(8);p(7 downto 0)<=b(8 downto 1); end if;coun

11、t<=count+'1' if(count="100")then count<="000" final<='1' end if; end if; end process;-process(clk) /it is also can do the same function- begin- c(0):='0'- if(clk'event and clk='1')then- b(8 downto 0):=p(8 downto 0);- case count is- whe

12、n "000"=>- p(8 downto 5)<="0000"p(4 downto 1)<=mr(3 downto 0);p(0)<='0'- - b(8 downto 5):="0000"b(4 downto 1):=mr(3 downto 0);b(0):='0'- t(3 downto 0)<=not md(3 downto 0)+'1'- count<="001" - final<='0'- when

13、 "001"=>- - if(p(1 downto 0)="01")then- b(8 downto 5):=b(8 downto 5)+md(3 downto 0);- elsif(p(1 downto 0)="10")then- b(8 downto 5):=b(8 downto 5)+t(3 downto 0);- end if;- count<="010" - p(8)<=b(8);p(7 downto 0)<=b(8 downto 1); - when "010"

14、;=> - if(p(1 downto 0)="01")then- b(8 downto 5):=b(8 downto 5)+md(3 downto 0);- elsif(p(1 downto 0)="10")then- b(8 downto 5):=b(8 downto 5)+t(3 downto 0); - end if; - p(8)<=b(8);p(7 downto 0)<=b(8 downto 1);- count<="011" - when "011"=>- if(p(1

15、downto 0)="01")then- b(8 downto 5):=b(8 downto 5)+md(3 downto 0);- elsif(p(1 downto 0)="10")then- b(8 downto 5):=b(8 downto 5)+t(3 downto 0);- end if;- p(8)<=b(8);p(7 downto 0)<=b(8 downto 1);- count<="100" - when "100"=>- if(p(1 downto 0)="01")then- b(8 downto 5):=b(8 downto 5)+md(3 downto 0);- elsif(p(1 downto 0)="10")then- b(8 dow

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論