Booth算法-乘法器实验报告_第1页
Booth算法-乘法器实验报告_第2页
Booth算法-乘法器实验报告_第3页
Booth算法-乘法器实验报告_第4页
Booth算法-乘法器实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上Booth乘法器实验报告一、实验目的1、理解并掌握乘法器的原理。2、理解并掌握Booth算法,及其实现方式。二、实验原理1、乘法规律 假定是十进制数的各位要么为0要么为1,例如1000*1001被乘数 1 0 0 010乘数 × 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 从上面可以得出乘法的基本规律:(1)从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。(2)积的位数比被乘数和乘数的位数要多得多。(3)若十进制各位限制为0或1,则乘法变成 若乘数位为

2、1,则简单的复制被乘数到合适的位置; 若乘数位是0,则在合适的位置置0。2、有符号数乘法Booth乘法器(1)1的分类Booth算法的关键在于把1分类为开始、中间、结束3种,如下图1的开始1的中间0 11 11 01的结束Booth算法1的分类示意图(2)算法描述 以前乘法器的第一步是根据乘数的最低位来决定是否将被乘数加到中间结果积,而Booth算法则是根据乘数的相邻两位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积寄存器右移。算法描述如下:根据当前位和其右边的位,作如下操作 00:0的中间,无任何操作; 01:1的结束,将被乘数加到积的左半部分; 10:1的开始,

3、积的左半部分减去被乘数; 11:1的中间,无任何操作。 将积寄存器算术右移一位。对于Booth算法,举例如下:210*-310=-610 ,或者说是00102*11012=1111 10102 。运算过程见下表。Booth算法运算过程重 复 步 骤被 乘 数(md) 积 (p)0初始值 00100000 1101 011:10->积=积-被乘数2:积右移一位 00101110 1101 01111 0110 121:01->积=积+被乘数2:积右移一位 00100001 0110 10000 1011 031:10->积=积-被乘数2:积右移一位 00101110 1011

4、01111 0101 141:11->nop2:积右移一位 00101111 0101 11111 1010 1三、实验步骤1、在PC机上完成ISE的安装。2、完成工程设计。3、下载。四、实验现象1、Modelsim 按照实例给出仿真结果2、输入输出规则(1)输入的4位被乘数md3md0对应四个开关。(2)输入的4为乘数mr3mr0对应四个按键。(3)乘积product的后两位对应LED点。3、操作细节Booth算法实验重 复 步 骤被 乘 数(md) 积 (p)被 乘 数(-7)10乘数是(6)100初始值10010000 0110 011:10->积=积-被乘数2:积右移一位1

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

6、+被乘数2:积右移一位 11000010 0101 10001 0010 131:10->积=积-被乘数2:积右移一位 11001101 0010 11110 1001 041:11->nop2:积右移一位 11000010 1001 00001 0100 1五、心得体会通过这次实验,真正领悟到所谓的“软件思想”与“硬件理念”的不同。脱开VHDL,我们用学过的任意高级语言编程,我们可以对变量循环赋值、可以随赋值随利用,但这些是纯的软件思想,硬件无法立即反应与实现,信号量在赋值方面尤其体现了这一点。实验中,由于积寄存器在一步操作中既要做加减运算,又要右移,反复操作了很多次,却始终无法

7、完成一个信号量在一个进程中完成两个操作,也试验了在两个进程中分别完成,但结果又成了多驱动问题。追究了半天原因,想到了用能“即赋值即使用”的变量来作为“媒介”,用变量来完成加减运算,而积寄存器只需要从“媒介”中右移一位取值,这样可以既运算又完成右移。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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论