booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序。下面的表格是我们假设2 作为乘数所进行的分析。接下来,我将用代码向大家阐述。

1、开始的时候在乘数2的‘负一位’加上一个默认0值 00100
 2、先判断[0:-1],结果是2‘b00,表示’0‘ 即没有操作 00100
 3、判断[1:0] 结果是2’b10,表示‘1’即‘-被乘数’操作 00100          
  4、判断【2:1】结果是2‘b10,表示’1‘即’+被乘数‘操作 00100
 5、判断【3:2】 结果是2’b00,表示‘0’即无操作 00100

本次试验进行两个八位数的乘法运算。

lways@(posedge clk or negedge rst_n)
if(!rst_n )
begin
i<=4'b0;
a<=8'b0;
b<=8'b0;
s<=8'b0;
p<=17'b0;
X<=4'b0;
isDone<=1'b0;
end
else if(Start_sig)
case(i)
0:
begin
a<=A;
s<=(~A+1'b1);
p<={8'd0,B,1'b0};
i<=i+1'b1;
end
1:
if(X==8)
begin
X<=4'd0;
i<=i+4'd2;
end
else if(p[1:0]==2'b01)
begin
p<={p[16:9]+a,p[8:0]};
i<=i+1'b1;
end
else if(p[1:0]==2'b10)
begin
p<={p[16:9]+s,p[8:0]};
i<=i+1'b1;
end
else i<=i+1'b1;
2:
begin
p<={p[16],p[16:1]};
X<=X+1'b1;
i<=i+1'b1;
end
3:
begin
isDone<=1'b1;
i<=i+1'b1;
end
4:
begin
i<=3'b0;
isDone<=1'b0;
end
endcase

以上是核心代码,这里我们将被乘数A放入两个寄存器中,一个存储源数据a,一个存储补码s。将乘数B放入p空间中,进行移位操作。

同时设置移位计数器X,当达到8位时停止执行。否则,我们将对数据的末两位进行判断如果p[1:0]是10,则对p[16:9]+s,低八位保持,如果p[1:0]=01,则进行p[16:9]+a,低八位保持。其余的全部保持。

在下一步中,进行移位操作,首位是什么就补什么,将数据进行右移。我们通过测试文件可以看到结果。

转载于:https://www.cnblogs.com/54guge/p/4161880.html

booth算法实现乘法器相关推荐

  1. 【Verilog】布斯算法(Booth Algorithm)乘法器的 Verilog 实现

    目录 布斯算法介绍 计算步骤 计算流程图 举个栗子 Verilog 实现 设计思想 Verilog 代码 TestBench 代码 仿真波形 布斯算法介绍 Booth 的算法检查有符号二的补码表示中 ...

  2. C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法

    Booth算法的推倒表示看不懂,举例说明:算法的计算过程. 求M*Q的值 M=5,Q=6 按二进制分解M和Q :M3M2M1M0×Q3Q2Q1Q0: 0110×0101 (有符号数用补码表示,最高位表 ...

  3. 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

    在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...

  4. 补码一位乘法——布斯(Booth)算法

    布斯Booth算法 "乘积"均改为"部分积".

  5. BOOTH 算法的简单理解

    学习FPGA时,对于乘法的运算,尤其是对于有符号的乘法运算,也许最熟悉不过的就是 BOOTH算法了. 这里讲解一下BOOTH算法的计算过程,方便大家对BOOTH的理解.        上图是BOOTH ...

  6. Booth算法在局域网监控软件中运用的一个例子

    Booth算法是一种高效的二进制乘法算法,可用于在局域网监控软件中进行IP地址的匹配和查找.局域网监控软件通常需要对多台计算机进行监控和管理,而这些计算机的IP地址是关键的识别信息.使用Booth算法 ...

  7. 用Verilog编写booth算法

    计算机组成原理课程设计要求编写一个5级流水MIPS的CPU,其他的都可以根据<自己动手写CPU>完成,只有乘法指令要求使用booth原理,去年的时候在网上找了很久没有找到,所以自己仿着di ...

  8. 如果从学渣角度理解booth算法

    这几天,无聊看了下机组,突然冒出个booth很是不理解,然后郁闷算了两天,似乎有点眉头(主要是网上的一大堆解说我也没看懂,实在愚钝),今天把这个眉头写下,有错误的欢迎指出. 1)所有公式都是从一段算数 ...

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

    x * y = z 运算规则: 1.和原码一位乘法不同,补码一位乘法的符号位是参加运算的,且运算结果和所有参加运算的数都是补码形式. 2.乘数 x 取双符号位参与运算,部分积的初始值为0: 乘数 y ...

最新文章

  1. java的父类java.lang.object_根父类:java.lang.Object
  2. 超详细解读ORB-SLAM3单目初始化(下篇)
  3. 【最全PPT下载+直播回放】DTCC 2019:阿里云数据库8大要点精彩回顾
  4. python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...
  5. Python3操作mysql操作类
  6. 台湾大学生来厦门参访交流
  7. matlab 取模二和,取模(mod)与取余(rem)的区别——Matlab学习笔记
  8. win10桌面无法新建文件夹解除管理员权限方法
  9. webpack 代码压缩优化篇
  10. F27.U盘-做过重装系统启动盘后内存变小方法解决方法-cmd格式化U盘
  11. QT FOR 安卓动态旋转屏幕
  12. iOS直播APP流程和相关技术介绍
  13. linux 筛选重复数据,Linux下uniq筛选
  14. 人月神话(各章精选)
  15. FXS/FXO, BRI/PRI, IPPBX
  16. ECharts修改坐标轴,坐标轴字体,坐标轴网格样式
  17. Python 错题本
  18. BZOJ4833 [Lydsy1704月赛]最小公倍佩尔数
  19. 年产10000吨餐厨垃圾制备氨基酸有机肥工厂设计
  20. 微信小程序获取当前位置并根据经纬度跳转地图导航

热门文章

  1. basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解
  2. Win32 一个helloworld对话框
  3. c# datetime._C#| DateTime.Month属性与示例
  4. array_fill_PHP array_fill()函数与示例
  5. strictmath_Java StrictMath log10()方法与示例
  6. python方法items_Python字典items()方法与示例
  7. VMware下Ubuntu无法全屏显示问题
  8. php错误拦截机制,php拦截异常怎么写-PHP问题
  9. AAC ADTS格式分析
  10. 计算机编程输入与输出,计算机编程语言的发展与输入输出设备的使用