乘法器分类:
A. 传统乘法器(及其改进)
传统乘法器的实现很简单,第一步就是去被乘数和乘数的正负关系然后去被乘数和乘数的正值;第二步:乘法本就是累加,乘多少就是累加多少次,所以第二步是累加操作,每加一次被乘数,递减一次乘数,直到乘数为0,表示操作结束;第三步:输出结果根据正负关系取得。
主要代码:

改进:
如果传统的乘法器乘数与被乘数固定,就导致时钟完全由乘数定,这就有问题了:比如2×10就是把2累加10次,这样乘数递减,时钟就为10,太浪费时钟了。所以可以在乘法操作之前先进行被乘数和乘数大小得比对,让大的做被乘数,小的做乘数,这样时钟小号就尽可能的小
主要代码:

B. Booth算法乘法器(及其改进)
以下主要解释。
C. LUT查表法乘法器(及其改进)
很简单,就是提前算好存到一个ROM中,要计算时取出。当然也有很多的优化,不做赘述了。




被乘数和乘数为N位,就循环N位。

module Booth_multiplier#(parameter DATAWIDTH = 8
)
(input                            CLK,input                            RSTn,input                            START,input  [ DATAWIDTH - 1 : 0 ]     A,input  [ DATAWIDTH - 1 : 0 ]     B,output [ DATAWIDTH * 2 - 1 : 0 ] RESULT,output                           Done
);reg [ DATAWIDTH - 1 : 0 ] i;
reg [ DATAWIDTH * 2 : 0 ] P;
reg [ DATAWIDTH - 1 : 0 ] A_reg;
reg [ DATAWIDTH - 1 : 0 ] A_bm;
reg [ DATAWIDTH - 1 : 0 ] N;
reg                       isDone;always @ ( posedge CLK or negedge RSTn )
beginif (!RSTn)begini <= 0;P <= 0;A_reg <= 0;A_bm <= 0;N <=0;isDone <= 0;endelse if (START)begincase (i)0:beginA_reg <= A;A_bm <= ~A + 1'b1;    //complement code of AP <= { 8'd0, B, 1'b0 };  //B add to last 8bit of Pi <= i + 1'b1;N <= 0;end1://operatingbeginif (N == 8)beginN <= 0;i <= i + 2'b10;endelse if (P[1:0] == 2'b00 | P[1:0] == 2'b11)beginP <= P;i <= i + 1'b1;endelse if (P[1:0] == 2'b01)beginP <= {P[16:9] + A_reg,P[8:0]};i <= i + 1'b1;endelse if (P[1:0] == 2'b10)beginP <= {P[16:9] + A_bm,P[8:0]};i <= i + 1'b1;endend2://shiftbeginP <= {P[16],P[16:1]};N <= N + 1'b1;i <= i - 1'b1;end3:beginisDone <= 1;i <= i + 1'b1;end4:beginisDone <= 0;i <= 0;endendcaseend
endassign Done = isDone;
assign RESULT = P[16:1];endmodule
module Booth_multiplier_tb();parameter DATAWIDTH = 8;reg                           CLK;reg                           RSTn;reg                           START;reg  [ DATAWIDTH - 1 : 0 ]    A;reg  [ DATAWIDTH - 1 : 0 ]    B;wire [ DATAWIDTH * 2 - 1 : 0 ]RESULT;wire                          Done;initial
beginCLK = 0;forever #10 CLK = ~CLK;
endinitial
beginRSTn = 0;START = 0;#10 RSTn = 1;START = 1;A = 2;B = 4;#400A = 3;B = 5;#400A = 4;B = 6;#400A = 10;B = 19;#400A = 32;B = 45;#400A = 23;B = 45;#400A = 32;B = 12;#400A = 32;B = 15;#400$stop;
endBooth_multiplier BM(.CLK(CLK),.RSTn(RSTn),.START(START),.A(A),.B(B),.RESULT(RESULT),.Done(Done));
endmodule

仿真结果:

Booth算法乘法器相关推荐

  1. 八位“Booth二位乘算法”乘法器

    文章目录 八位"Booth二位乘算法"乘法器 原理 补码乘法器 Booth一位乘 Booth二位乘 设计思路 减法变加法 vivado特性 设计文件 综合电路 测试文件 仿真波形 ...

  2. booth算法实现乘法器

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

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

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

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

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

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

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

  6. BOOTH 算法的简单理解

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

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

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

  8. 用Verilog编写booth算法

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

  9. Booth编码乘法器以及测试代码

    程序代码如下: 方法一 module Booth_multiplier (mul_a, mul_b, clk, rst_n,start, mul_out);input [7:0] mul_a, mul ...

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

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

最新文章

  1. 什么时候需要在外壳变量周围花括号?
  2. 洪嘉振 计算多体系统动力学pdf_多体动力学演化python入门——quantum many-body scars 和稀疏矩阵后续...
  3. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
  4. TODO-MVP-Loaders源码体验
  5. [论文阅读] Cross-level Contrastive Learning and Consistency Constraint for Medical Image Segmentation
  6. youphp学习整理
  7. 计算机系统常见故障分析与排除,电脑常见网络故障分析与排除方法
  8. 前端工程师的摸鱼日常(13)
  9. Android:RecycleView基本使用(瀑布流)
  10. 微信小程序生命周期和路由传参详解
  11. 配置Druid(德鲁伊)数据源
  12. 【正向偏置和反向偏置的区别】
  13. 未来想象计算机图片儿童版,未来世界儿童画画大全绘画作品欣赏
  14. 逐梦C++之四:四种强制类型转换
  15. jzxx4015求和2
  16. 扮猪吃虎!昨天去面试测试,三轮面试题!分享给大家。
  17. 数据库设计之学生选课系统_转载
  18. (读书笔记)《玩着玩着就能成为PPT高手》——说的漂亮
  19. (C++)二维坐标系下,计算两点之间方位角
  20. 《Linux就该这么学》第十节课学习笔记

热门文章

  1. Kindle退市,掌阅iReader或将接过电纸书市场大旗
  2. 傅里叶变换与反变换(李永乐老师笔记)
  3. 数学画图软件_数学建模竞赛要点分析 amp; 实用工具网站收集
  4. 人工智能 - 人脸合成 (腾讯AI开放平台)
  5. ViewPage动态删除页面
  6. 开源GIS-01-开源库的编译
  7. html变形金刚代码,百度变形金刚JS特效
  8. hex(base16)、base32、base64三种编码方式区别
  9. cmos逻辑门传输延迟时间_电路基础:详解TTL和CMOS电平
  10. java 二维向量_二维向量的叉积是标量还是向量?