用booth算法求[x*y]补。x=0.1101,y=-0.1010

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用booth算法求[x*y]补。x=0.1101,y=-0.1010相关的知识,希望对你有一定的参考价值。

参考技术A 首先编程把原码变为补码,这个资料很多,可以查看
booth乘法的源码是:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity mp is
Port ( ai : in std_logic_vector(7 downto 0);
bi : in std_logic_vector(7 downto 0)
done : out std_logic;
clk : in std_logic;
op : out std_logic_vector(15 downto 0));
end mp;
architecture Behavioral of mp is
begin

process(ai,bi,clk)
variable a,b,m : std_logic_vector( 7 downto 0);
variable cp: std_logic_vector( 1 downto 0);
variable t: std_logic ;
variable counter: integer;
begin
if clk'event and clk='1' then
counter:=0;
t:='0';
a:=ai;
b:=bi;
m:="00000000";
cp:=b(0)&'0';
done<='0';
while counter<8 loop
case cp is
when "10"=> m:=m-a;
when "01"=> m:=m+a;
when others=>m:=m;
end case;
t:=b(0);
b:=m(0)&b(7 downto 1);
m:=m(7)&m(7 downto 1);
cp:=b(0)&t;
counter:=counter+1;
end loop;
op<= m&b;
done<='1';
end if;
end process;
end Behavioral;
这个是8位乘法器,你可以稍作修改本回答被提问者采纳

计算机组成原理——补码乘法运算

在这里插入图片描述

补码的一位乘法(Booth算法)

  1. 进行 n 轮加法、移位,最后再多来一次加法
  2. 每次加法可能 +0 、+[x]补、+[-x]补
  3. 每次移位是“补码的算数右移”
  4. 符号位参与运算

在第二个步骤中,需要根据MQ中的最低位、辅助位 来确定加什么:

  • 辅助位 - MQ中最低位 = 1时,(ACC)+[x]补
  • 辅助位 - MQ中最低位 = 0时,(ACC)+0
  • 辅助位 - MQ中最低位 = -1时,(ACC)+[-x]补

手算模拟

例题

设机器字长为5位(含1位符号位,n=4),x = −0.1101,y = +0.1011,采用Booth算法求x·y

解:手动计算是这样
在这里插入图片描述
最后得 [x·y]补 = 11.01110001
即x·y = −0.10001111

做题总结

  1. n轮加法、算数右移,加法规则如下:
    辅助位 - MQ中最低位 = 1时,(ACC)+[x]补
    辅助位 - MQ中最低位 = 0时,(ACC)+0
    辅助位 - MQ中最低位 = -1时,(ACC)+[-x]补
  2. 补码的算数右移:
    符号位不动,数值位右移,正数右移补0,
    负数右移补1(符号位是啥就补啥)
  3. 一般来说,Booth算法的被乘数、部分积采用双符号位补码

原码,补码一位乘法的对比

原码一位乘法:补码一位乘法:
进行 n 轮加法、移位进行 n 轮加法、移位,最后再多来一次加法
每次加法可能 +0+[|x|]每次加法可能 +0+[x]补、+[-x]
每次移位是“逻辑右移”每次移位是“补码的算数右移”
符号位不参与运算符号位参与运算

以上是关于用booth算法求[x*y]补。x=0.1101,y=-0.1010的主要内容,如果未能解决你的问题,请参考以下文章

[计算机组成原理] Booth算法 —— 补码一位乘法

计算机组成原理——补码乘法运算

计算机组成原理——补码乘法运算

用Booth算法计算-4×3的4位补码乘法运算,要求写出每一步运算过程及运算结果 麻烦详细说明每一步的操作

基于Matlab用遗传算法求一元函数最值问题(附源码)

booth算法 booth算法简介