乘法器
实验目的
1、掌握乘法器以及booth乘法器的原理
实验步骤
1、 如果未安装ByteBlaster,参照实验一的配置文件的安装。 2、 连接JTAG和USB通信线,打开电源。
3、打开Quartus->tools->programmer,将booth_multiplier.sof下载到FPGA中。注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
4、在实验台上通过模式开关选择FPGA调试模式010。
5、将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU所需要的时钟使用正单脉冲时钟。
2.4、实验现象
本实验实现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的中间,无任何操作;
重复 0 1 初始值 步骤 被乘数(md) 被乘数是(-4)10 1100 1100 1100 1100 1100 1100 1100 1100 1100 积(p) 乘数是(-5)10 0000 1011 0 0100 1011 0 0010 0101 1 0010 0101 1 0001 0010 1 1101 0010 1 1110 1001 0 0010 1001 0 0001 0100 1 1:10→积=积-被乘数 2:积右移1位 2 1:11→空操作 2:积右移1位 3 1:01→积=积+被乘数 2:积右移1位 4 1:10→积=积-被乘数 2:积右移1位
2.5、思考题
试述Booth乘法器的原理,即为什么可以用相邻两位的差来决定加减操作
Booth算法的关键在于把1分类为开始、中间、结束三种。
当然一串0的时候加法减法都不做。因此,总结1的分类情况有4种如表2.4所示:
表2.4 1的分类
当前位 1 1 0 0 当前位右边的位 0 1 1 0 分类 1的开始 1的中间 1的结束 0的中间 以前乘法器的第一步是根据乘数的最低位来决定是否将被乘数加到中间结果积,而Booth算法则是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积寄存器右移。算法描述如下:
1) 根据当前位和其右边的位,做如下操作: 00:0的中间,无任何操作;
01:1的结束,将被乘数加到积的左半部分;
10:1的开始,积的左半部分减去被乘数; 11:1的中间,无任何操作。
2) 像前面所讲的算法,将积寄存器右移1位。
需要注意的是,因为Booth乘法器是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移,不像前面的算法逻辑右移就可以了。