当前位置:首页 > 英文周记 > 正文内容

booth算法原理「booth算法例题讲解」

更新时间:2026-07-18 00:03:17 周记网4年前 (2023-01-31)英文周记478

计算机组成原理,图中画箭头的地方,这个递推式是怎么来的呢?

在不考虑符号位的一位乘法的计算过程中

booth算法原理「booth算法例题讲解」

每次是根据乘数Y的最后一位,判断部分积中是否加上被乘数X

然后部分积和乘数都右移一位,依次计算,直到乘数为0

而Booth算法其实就是连带符号位一起考虑的一位乘法

在得到上图蓝框中的表达式后,可以发现,每次判断部分积中是否加上被乘数[X]补

不再根据乘数的最后一位,而是根据最后两位(Yₙ₊₁-Yₙ)来判断

若Zₙ表示部分积,初始Z₀=0

Z₁对应的乘数的最后两位为Yₙ₊₁和Yₙ,累加上(Yₙ₊₁-Yₙ)[X]补,再右移一位(乘2⁻¹)

Z₂对应的乘数的最后两位为Yₙ和Yₙ₋₁,累加上(Yₙ-Yₙ₋₁)[X]补,再右移一位(乘2⁻¹)

......

Zₙ对应的乘数的最后两位为Y₂和Y₁,累加上(Y₂-Y₁)[X]补,再右移一位(乘2⁻¹)

最后乘数Y中只剩Y₁和Yₛ,最后再加一次(Y₁-Yₛ)[X]补,即得最终的乘积[X×Y]补

如何清晰理解布斯算法Booth algorithm的原理

你用的什么综合器?FPGA还是DC?综合工具优化的当然会比你设计的要好,这是毋庸置疑的兄弟。是否冗余你可以按照最原始的方法(移位加)设计一个乘法器,对比综合结果。

用Booth算法计算x乘以y x=0.110111,y=-0.101110 求详细的解题步骤

先求出[-x]补=1.0011

然后看[y]补=0.101(10),为10,所以要加[-x]补,得

0.0000

+ 1.0011

= 1.0011 再右移一位得0.10011

然后看[y]补=0.10(11),为11,所以直接右移一位得 0.010011

然后看[y]补=0.1(01)1,为01,所以要加[x]补,得

0.010011

+ 0.1101

= 1.000111 再右移一位得0.1000111

然后看[y]补=0.(10)11,为10,所以要加[-x]补,得

0.1000111

+ 1.0011

= 1.1011111 再右移一位得0.11011111

然后看[y]补=(0.1)011,为01,所以要加[x]补,得

0.11011111

+ 0.1101

= 1.10101111

因为是最后一步,所以不移位,得1.10101111

扩展资料:

Booth算法原理:

布斯算法将乘数看作从最低位开始的一串二进制数字。从最低位算起,只要这串数字为“0“,就不执行任何操作;当这串数字遇到第一个“1”时执行一次减法,即减被乘数与该位权值的乘积,而对于其后的“1”不执行任何操作;

当这串数字再变为“0”时,则遇到第一个“0”时执行一次加法,即加被乘数与该位权值的乘积,而对其后的“0”则不执行任何操作。如此一直进行到最高位 [1]  。

举例来说,假设被乘数是5,乘数是7,即进行二进制数00000101与00000111相乘。该算法将7看作为三个“1”后面跟有五个“0”的一串数字。对于第一个”1”,该算法将减去5×20,对于第二和第三个“1”,则不执行任何操作;当遇到第一个“0”时,加5×23,得到最后结果是35。

寄存器除法实验的原理

除法器以及booth乘法器的原理二、实验原理除法是乘法的倒数。首先我们看一下十进制数的除法。为了方便起见,我们假定十进制数的各位要么为1要么为0,例如(1001010)10 ÷(1000):

除数

1 0 0 1 商1000)1 0 0 1 0 1 0 被除数-1 0 0 0 1 01 0 11 0 1 0- 1 0 0 01 010 余数被除数、除数、商、和余数的关系如下式所示:被除数=商×除数+余数式中,余数必须比除数小。除法中求商的基本方法是利用被除数减去除数,看结果是正还是负,来决定商的这位是1还是0。假定被除数和除数都是正的,因此商和余数都是非负的。操作数和结果都是32位的,忽略符号。

开始

比较善于节省空间的人们发现,商寄存器浪费的空间正好和余数寄存器浪费的空间一样,因此,将商寄存器和余数寄存器结合起来。下图为除法器的算法流程。

从寄存器左移一位

从余数寄存器左半部分减去除数寄存器,结果存在余数寄存器的左半部分

余数≥0

余数0

测试余数



Yes:32

No32



加除数到余数寄存器的左半部分已恢复原来的被除数值。商寄存器左移,第0位置0



寄存器的左半部分右移一位

循环32次

余数寄存器左移一位,第0位置1

3、实验步骤1.打开Quartus-tools-programmer,将booth_divider.sof下载到FPGA中。注意进行programmer时,应在program/configure下的方框中打勾,然后下载。2.在实验台上通过模式开关选择FPGA独立调试模式010。3.将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU所需要的时钟使用正单脉冲时钟。4、实验现象本实验实现4位数的除法(无符号除法),输入输出规则对应如下:1、输入的4位被除数(dividend)md3~md0对应开关SD11~SD8。2、输入的4位除数(divisor)mr3~mr0对应开关SD3~SD0。3、按单脉冲按钮,输入脉冲,也即节拍。4、余数寄存器remainder(8位)r7~r0对应灯R7~R0。5、当计算结束时,ready信号为1,对应实验台上最上排最右排的标志位指示灯S,同时商和余数分别在灯A3~A0和A7~A4上体现出来。五、附录代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED;ENTITY divider ISGENERIC(k : POSITIVE := 3); --input number word length less onePORT( dividend : IN BIT_VECTOR(k DOWNTO 0);

divisor : IN BIT_VECTOR(k DOWNTO 0); clock : IN BIT;quotient : OUT BIT_VECTOR(k DOWNTO 0);remainder_r : OUT BIT_VECTOR(k DOWNTO 0);--remainder remainder : INOUT BIT_VECTOR((2*k + 2) DOWNTO 0);--remainder REGfinish : INOUT BIT);END divider;ARCHITECTURE structural OF divider ISSIGNAL drreg : BIT_VECTOR(k DOWNTO 0);SIGNAL adderout : BIT_VECTOR(k DOWNTO 0);SIGNAL carries : BIT_VECTOR(k DOWNTO 0);SIGNAL augend : BIT_VECTOR(k DOWNTO 0);SIGNAL tcbuffout : BIT_VECTOR(k DOWNTO 0);SIGNAL adder_ovfl : BIT;SIGNAL clr_dr : BIT;SIGNAL load_dr : BIT;SIGNAL init_rem : BIT;SIGNAL load_rem : BIT;SIGNAL shift_rem : BIT;SIGNAL add_op : BIT;signal count : INTEGER RANGE 0 TO k :=0;SIGNAL count2 : INTEGER RANGE 0 TO 3 :=0;

BEGINPROCESS --main clocked process containing all sequential elementsBEGINWAIT UNTIL (clock'EVENT AND clock = '1');--register to hold divisor during divisionIF clr_dr = '1' THENdrreg = (OTHERS = '0');ELSIF load_dr = '1' THENdrreg = divisor;ELSEdrreg = drreg;END IF; --register/shifter accumulates partial remainder registerIF init_rem = '1' THENremainder = (OTHERS = '0');remainder((k+1) DOWNTO 1) = dividend; --initialize remainder and sll 1ELSIF load_rem = '1' THENremainder((2*k + 1) DOWNTO (k + 1)) = adderout; --load to top half remainder(2*k+2) = NOT remainder(2*k+1); remainder(k DOWNTO 0) = remainder(k DOWNTO 0); --refresh right half

ELSIF shift_rem = '1' THENremainder = remainder ROL 1; --rotate left ELSEremainder = remainder;END IF;END PROCESS;--adder adds/subtracts divisor to left half of the remainder registeraugend = remainder((2*k+1) DOWNTO (k+1));addgen : FOR i IN adderout'RANGEGENERATElsadder : IF i = 0 GENERATEadderout(i) = tcbuffout(i) XOR augend(i) XOR (NOT add_op);carries(i) = (tcbuffout(i) AND augend(i)) OR(tcbuffout(i) AND (NOT add_op)) OR((NOT add_op) AND augend(i));END GENERATE;otheradder : IF i /= 0 GENERATEadderout(i) = tcbuffout(i) XOR augend(i) XOR carries(i-1);

carries(i) = (tcbuffout(i) AND augend(i)) OR(tcbuffout(i) AND carries(i-1)) OR(carries(i-1) AND augend(i));END GENERATE;END GENERATE;adder_ovfl = carries(k-1) XOR carries(k);tcbuffout = NOT drreg WHEN (add_op='0') ELSE drreg;--divider state counterPROCESS(clock)BEGIN IF (clock'event AND clock='1') THEN IF (count=count'high AND count2=count2'high) THENcount = 0;count2 = 0;finish ='1'; ELSIF (count2=count2'high) THENcount2 =1;count = count+1;finish ='0';ELSEcount2 = count2 +1;finish ='0';END IF;END IF;END PROCESS;--assign control signal values based on statePROCESS(count2)BEGIN--assign defaults, all registers refresh add_op ='0';clr_dr = '0';

5.9

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

除法器实验报告

计算机组成原理实验报告

题目:运算器部件实验:除法器

学 院 数学与信息学院

学科门类 工 学

专 业 12软件工程

学 号 2012436138

第 1 页

姓 名 王赛赛

指导教师 王兵

一、实验目的

1.掌握乘法器以及booth乘法器的原理

二、实验原理

除法是乘法的倒数。首先我们看一下十进制数的除法。为了方便起见,我们假定十进制数的各位要么为1要么为0,例如(1001010)10 ÷(1000):

除数

1 0 0 1 商

第 2 页

1000)1 0 0 1 0 1 0 被除数

-1 0 0 0

1 0

1 0 1

1 0 1 0

- 1 0 0 0

1 010 余数

被除数、除数、商、和余数的关系如下式所示:

第 3 页

被除数=商×除数+余数

式中,余数必须比除数小。

除法中求商的基本方法是利用被除数减去除数,看结果是正还是负,来决定商的这位是1还是0。

假定被除数和除数都是正的,因此商和余数都是非负的。操作数和结果都是32位的,忽略符号。

开始

比较善于节省空间的人们发现,商寄存器浪费的空间正好和余数寄存器浪费的空间一样,因此,将商寄存器和余数寄存器结合起来。下图为除法器的算法流程。

第 4 页

从寄存器左移一位

从余数寄存器左半部分减去除数寄存器,结果存在余数寄存器的左半部分

第 5 页

余数≥0

余数0

测试余数



Yes:32

No32



加除数到余数寄存器的左半部分已恢复原来的被除数值。商寄存器左移,第0位置0



寄存器的左半部分右移一位

循环32次

余数寄存器左移一位,第0位置1

第 6 页

3、实验步骤

1.打开Quartus-tools-programmer,将booth_divider.sof下载到FPGA中。注意进行programmer时,应在program/configure下的方框中打勾,然后下载。

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

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

4、实验现象

第 7 页

本实验实现4位数的除法(无符号除法),

输入输出规则对应如下:

1、输入的4位被除数(dividend)md3~md0对应开关SD11~SD8。

2、输入的4位除数(divisor)mr3~mr0对应开关SD3~SD0。

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

4、余数寄存器remainder(8位)r7~r0对应灯R7~R0。

第 8 页

5、当计算结束时,ready信号为1,对应实验台上最上排最右排的标志位指示灯S,同时商和余数分别在灯A3~A0和A7~A4上体现出来。

五、附录

代码:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED;

ENTITY divider IS

第 9 页

GENERIC(k : POSITIVE := 3); --input number word length less one

PORT( dividend : IN BIT_VECTOR(k DOWNTO 0);

divisor : IN BIT_VECTOR(k DOWNTO 0);

clock : IN BIT;

quotient : OUT BIT_VECTOR(k DOWNTO 0);

remainder_r : OUT BIT_VECTOR(k DOWNTO 0);--remainder

第 10 页

remainder : INOUT BIT_VECTOR((2*k + 2) DOWNTO 0);--remainder REG

finish : INOUT BIT

);

END divider;

ARCHITECTURE structural OF divider IS

SIGNAL drreg : BIT_VECTOR(k DOWNTO 0);

SIGNAL adderout : BIT_VECTOR(k DOWNTO 0);

第 11 页

SIGNAL carries : BIT_VECTOR(k DOWNTO 0);

SIGNAL augend : BIT_VECTOR(k DOWNTO 0);

SIGNAL tcbuffout : BIT_VECTOR(k DOWNTO 0);

SIGNAL adder_ovfl : BIT;

SIGNAL clr_dr : BIT;

SIGNAL load_dr : BIT;

SIGNAL init_rem : BIT;

第 12 页

SIGNAL load_rem : BIT;

SIGNAL shift_rem : BIT;

SIGNAL add_op : BIT;

signal count : INTEGER RANGE 0 TO k :=0;

SIGNAL count2 : INTEGER RANGE 0 TO 3 :=0;

BEGIN

PROCESS --main clocked process containing all sequential elements

第 13 页

BEGIN

WAIT UNTIL (clock'EVENT AND clock = '1');

--register to hold divisor during division

IF clr_dr = '1' THEN

drreg = (OTHERS = '0');

ELSIF load_dr = '1' THEN

drreg = divisor;

ELSE

第 14 页

drreg = drreg;

END IF;

--register/shifter accumulates partial remainder register

IF init_rem = '1' THEN

remainder = (OTHERS = '0');

remainder((k+1) DOWNTO 1) = dividend; --initialize remainder and sll 1

ELSIF load_rem = '1' THEN

第 15 页

remainder((2*k + 1) DOWNTO (k + 1)) = adderout; --load to top half

remainder(2*k+2) = NOT remainder(2*k+1);

remainder(k DOWNTO 0) = remainder(k DOWNTO 0); --refresh right half

ELSIF shift_rem = '1' THEN

remainder = remainder ROL 1; --rotate left

ELSE

第 16 页

remainder = remainder;

END IF;

END PROCESS;

--adder adds/subtracts divisor to left half of the remainder register

augend = remainder((2*k+1) DOWNTO (k+1));

addgen : FOR i IN adderout'RANGE

GENERATE

lsadder : IF i = 0 GENERATE

第 17 页

adderout(i) = tcbuffout(i) XOR augend(i) XOR (NOT add_op);

carries(i) = (tcbuffout(i) AND augend(i)) OR

(tcbuffout(i) AND (NOT add_op)) OR

((NOT add_op) AND augend(i));

END GENERATE;

otheradder : IF i /= 0 GENERATE

adderout(i) = tcbuffout(i) XOR augend(i) XOR carries(i-1);

第 18 页

carries(i) = (tcbuffout(i) AND augend(i)) OR

(tcbuffout(i) AND carries(i-1)) OR

(carries(i-1) AND augend(i));

END GENERATE;

END GENERATE;

adder_ovfl = carries(k-1) XOR carries(k);

tcbuffout = NOT drreg WHEN (add_op='0') ELSE drreg;

第 19 页

--divider state counter

PROCESS(clock)

BEGIN

IF (clock'event AND clock='1') THEN

IF (count=count'high AND count2=count2'high) THEN

count = 0;

count2 = 0;

finish ='1';

第 20 页

ELSIF (count2=count2'high) THEN

count2 =1;

count = count+1;

finish ='0';

ELSE

count2 = count2 +1;

finish ='0';

END IF;

END IF;

END PROCESS

怎么理解Booth算法

布思算法(booth

algorithm)的简单理解方法:

由于是第一次接触,对于其原理却一无所知,书上的解释以及网上的文章不知是自己才疏学浅还本来就是泛泛而谈,没有让我了解其本质。经过长时间的思考分析,最终找到了一种比较简单的理解方法。

举一个简单的例子,比如说计算×,在这里首先将乘数改写为 -

-

---------------------------------------------------

这样根据乘法分配律得×=×(0100)

类似于booth算法的重新编码形式,再将上述算式改写为

×=×0+1

+ × -1 0

最终再将上式合并到一起,可得由booth算法改写后的编码形式: × 0+10000-10

由此可见,乘数的数段"01"可以重新编码为“+1”,数段“10”可以重新编码为“-1”,数段“11”可重新编码为“0”

根据无符号二进制数乘法的过程可知,当乘数段为“00”只是对乘数进行了右移操作,故重新编码为“0”

由于上述推导过程是根据二进制数加减以及乘法分配律推导而来的,故对于由补码表示的负数乘法同样适用

2022计算机考研组成原理_第2章名词解释

第2章 数据编码和数据运算

(2001年,2002年)1.基数:在浮点数据编码中,对阶码所代表的指数值的数据,在计算机中是一个常数,不用代码表示。

(2003年)2.移码:带符号数据表示方法之一,符号位用1表示正,0表示负,其余位与补码相同。

(2004年)3.溢出:指数的值超出了数据编码所能表示的数据范围。

(2005年)4.偶校验码:让编码组代码中1的个数为偶数,违反此规律为校验错。

5.原码:带符号数据表示方法之一,一个符号位表示数据的正负,0代表正号,1代表负号,其余的代表数据的绝对值。

6.补码:带符号数据表示方法之一,正数的补码与原码相同,负数的补码是将二进制位按位取反后在最低位上加1。

7.反码:带符号数据的表示方法之一,正数的反码与原码相同,负数的反码是将二进制位按位取反。

8.阶码:在浮点数据编码中,表示小数点的位置的代码。

9.尾数:在浮点数据编码中,表示数据有效值的代码。

10.机器零:在浮点数据编码中,阶码和尾数都全为0时代表的0值。

11.上溢:指数的绝对值太大,以至大于数据编码所能表示的数据范围。

12.下溢:指数的绝对值太小,以至小于数据编码所能表示的数据范围。

13.规格化数:在浮点数据编码中,为使浮点数具有唯一的表示方式所作的规定,规定尾数部分用纯小数形式给出,而且尾数的绝对值应大于1/R,即小数点后的第一位不为零。

14.Booth算法:一种带符号数乘法,它采用相加和相减的操作计算补码数据的乘积。

15.海明距离:在信息编码中,两个合法代码对应位上编码不同的位数。

16.冯·诺依曼舍入法:浮点数据的一种舍入方法,在截去多余位时,将剩下数据的最低位置1。

17.检错码:能够发现某些错误或具有自动纠错能力的数据编码。

18.纠错码:能够发现某些错误并且具有自动纠错能力的数据编码。

19.奇校验码:让编码组代码中1的个数为奇数,违反此规律为校验错。

20.海明码:一种常见的纠错码,能检测出两位错误,并能纠正一位错误。

21.循环码:一种纠错码,其合法码字移动任意位后的结果仍然是一个合法码字。

22.桶形移位器:可将输入的数据向左、向右移动1位或多位的移位电路。

“booth算法原理「booth算法例题讲解」” 的相关文章

booth算法原理「booth算法移位规则」

booth算法原理「booth算法移位规则」

求布斯算法举例详解 布斯乘法算法(英语:Booth's multiplication algorithm)是计算机中一种利用数的2的补码形式来计算乘法的算法。该算法由安德鲁·唐纳德·布斯于 1950...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。