乘法器实验报告

  • 格式:doc
  • 大小:270.00 KB
  • 文档页数:6

计算机组成原理实验报告题目:运算器部件实验:乘法器学院数学与信息学院学科门类工学专业12软件工程学号2012436138姓名王赛赛指导教师王兵运算器部件实验:乘法器一、实验目的掌握乘法器以及booth乘法器的原理二、实验原理首先我们看一下十进制数的乘法。

为了方便起见,我们假定十进制数的各位要么为1要么为0,例如1000×1001:被乘数 1 0 0 010乘数× 1 0 0 1101 0 0 00 0 0 00 0 0 01 0 0 0积 1 0 0 1 0 0 010从上面的步骤我们可以看到,1)从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。

2)积的位数比被乘数和乘数的位数要多的多。

事实上,如果我们忽略符号位,n位的被乘数和m 位的乘数相乘的结果的位数有(n+m)位。

因此,乘法必须象加法那样处理溢出问题,如果两个32位的数相乘,积也只有32位的时候,就会出现溢出。

在上面的例子中,我们把十进制数的各位限制为0或1。

因此,每一步的乘法相当简单:1)如果乘数位是1,则简单的复制被乘数到合适的位置(1×被乘数);2)如果乘数位是0,则在合适的位置置0因为二进制数的各位是0或1,所以与上面情况类似。

既然已经知道了乘法的基本规律,下一步就是设计高度优化的乘法器硬件。

为了让大家更明了乘法器的原理,我们一一列举乘法器的三个版本的改进。

我们先假定被乘数和乘数都是正数。

一个有效的计算有符号数乘法的是Booth算法,算法的新颖之处在于减法也可以用于计算乘积。

假定210×610,或者说00102×01102:0 0 1 0X 0 1 1 0+ 0 0 0 0 移位(乘数位为0)+ 0 0 1 0 相加(乘数位为1)+ 0 0 1 0 相加(乘数位为1)+ 0 0 0 0 移位(乘数位为0)0 0 0 0 1 1 0 0Booth发现加法和减法可以得到同样的结果。

例如,610=-210+810或者01102=-00102 + 10002因为在当时移位比加法快得多,所以Booth发现了这个算法。

Booth算法的关键在于把1分类为开始、中间、结束三种。

当然一串0的时候加法减法都不做。

因此,总结1的分类情况有4种如表2.4所示:表2.4 1的分类当前位当前位右边的位分类1 0 1的开始1 1 1的中间0 1 1的结束0 0 0的中间以前乘法器的第一步是根据乘数的最低位来决定是否将被乘数加到中间结果积,而Booth算法则是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积寄存器右移。

算法描述如下:1)根据当前位和其右边的位,做如下操作:00:0的中间,无任何操作;01:1的结束,将被乘数加到积的左半部分;10:1的开始,积的左半部分减去被乘数;11:1的中间,无任何操作。

2)像前面所讲的算法,将积寄存器右移1位。

需要注意的是,因为Booth乘法器是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移,不像前面的算法逻辑右移就可以了。

对于Booth算法,举例如下,210×-310=-610,或者说是00102×11012=1111 10102。

表2.5 Booth乘法器举例重复步骤被乘数(md)积(p)0 初始值0010 0000 1101 01 1:10→积=积-被乘数0010 1110 1101 02:积右移1位0010 1111 0110 12 1:01→积=积+被乘数0010 0001 0110 12:积右移1位00100000 1011 03 1:10→积=积-被乘数00101110 1011 02:积右移1位00101111 0101 14 1:11→空操作00101111 0101 12:积右移1位00101111 1010 1三、实验步骤1.打开Quartus->tools->programmer,将booth_multiplier.sof下载到FPGA中。

注意进行programmer 时,应在program/configure下的方框中打勾,然后下载。

2.在实验台上通过模式开关选择FPGA独立调试模式010。

3.将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU所需要的时钟使用正单脉冲时钟。

四、实验现象本实验实现4位数的Booth乘法(有符号数乘法)。

输入输出规则对应如下:1.输入的4位被乘数(multiplicand)md3~md0对应开关SD11~SD8。

2.输入的4位乘数(multiplier)mr3~mr0对应开关SD3~SD0。

3.按单脉冲按钮,输入脉冲,也即节拍。

4.乘积product(8位)p7~p0对应灯A8~A1,辅助位A0。

5.当计算结束时,final信号为1,对应灯R7。

如表2.5的booth算法举例,一共需要0~8九个小步骤计算出结果。

本实验也是通过九个小步骤实现的,通过按单脉冲按钮输入脉冲,观察积寄存器的变化,掌握booth乘法器的原理。

1、拨动开关SD11~SD8输入4位被乘数(md3~md0)0010,SD3~SD0输入4位乘数(mr3~mr0)1101。

2、按动单脉冲按钮,输入脉冲,对照表2.5观察积寄存器即灯A8~A0的变化情况,当灯R7亮时,说明计算结束,灯A8~A1为最后相乘结果。

根据以上操作细节,仿照表2.5填写表中各步骤。

进行新的乘法运算时,或者说当上一次运算结束即灯R7亮时,输入新的被乘数、乘数(拨动开关),然后按动单脉冲开关即可观察正确的寄存器结果。

00:0的中间,无任何操作;重复步骤被乘数(md)积(p)被乘数是(-7)10乘数是(6)100 初始值1001 0000 0110 01 1:00→空操作1001 0000 0110 02:积右移1位1001 0000 0011 02 1:10→积=积-被乘数1001 0111 0011 0 2:积右移1位1001 0011 1001 13 1:11→空操作1001 0011 1001 12:积右移1位1001 0001 1100 1 4 1:01→积=积+被乘数1001 1010 1100 12:积右移1位1001 1101 0110重复步骤被乘数(md)积(p)被乘数是(-4)10乘数是(-5)100 初始值1100 0000 1011 01 1:10→积=积-被乘数11000100 1011 02:积右移1位11000010 0101 12 1:11→空操作11000010 0101 12:积右移1位11000001 0010 13 1:01→积=积+被乘数11001101 0010 12:积右移1位11001110 1001 04 1:10→积=积-被乘数11000010 1001 02:积右移1位11000001 0100 五、附录代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Booth isport(multiplicand : in std_logic_vector(3 downto 0);multiplier : in std_logic_vector(3 downto 0);clk : in std_logic;clr :in std_logic;product : buffer std_logic_vector(8 downto 0);final :out std_logic);end entity;architecture rtl of Booth issignal m:std_logic_vector(8 downto 0):=multiplicand&"00000";signal boothstep:std_logic_vector(2 downto 0):="000";signal flag :std_logic_vector(1 downto 0);------后两位部分积signal temp: std_logic_vector (8 downto 0);----部分积寄存器beginprocess(flag)is----------后两位控制加还是减beginif(flag="01")thentemp<=product+m;elsif(flag="10")thentemp<=product-m;elsetemp<=product;end if;end process;flag<=product(1 downto 0);process(clk,clr) is --------时钟到来移位beginif(clr='0')thenproduct<="0000"&multiplier&'0';--qianhou bu 0elsif(clk'event and clk='1')thenproduct<=temp(8)&temp(8 downto 1);----寄存器中的数据保存到product中end if;end process;process(clk) isbeginif clr='0' thenfinal<='0';boothstep<="000";elsif(clk'event and clk='1')thenif(boothstep="011")then ---第四下时钟沿来临时boothstep 为3 这时停止final<='1';boothstep<="000";elseboothstep<=boothstep+'1';final<='0';end if;end if;end process;end rtl;。