微处理器芯片中,乘法器是进行数字信号处理的核心,同一时候也是微处理器中进行数据处理wd=%E5%85%B3%E9%94%AE%E9%83%A8%E4%BB%B6&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">关键部件乘法器完毕一次操作的周期基本上决定了wd=%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">微处理器的主频。wd=%E4%B9%98%E6%B3%95%E5%99%A8&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">乘法器的速度和面积优化对于整个CPU的性能来说是非常重要的。

为了加快乘wd=%E6%B3%95%E5%99%A8&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">法器的运行速度。降低乘法器的面积。有必要对乘法器的算法、结构及电路的详细实现做深入的研究。

 wd=Booth%E7%AE%97%E6%B3%95&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">Booth算法与乘法器的一般结构
乘法器工作的基本原理是首先生成部分积。再将这些部分积相加得到乘积。在眼下的乘法器设计中,基4Booth算法是部分积生成过程中普遍採用的算法。 对于N位wd=%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%95%B0&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">有符号数乘法A×B来说,常规的乘法运算会产生N个部分积。假设对乘数B进行基4Booth编码。每次需考虑3位:相邻高位、本位和相邻低位,编码后产生部分积的个数能够降低到[(N+1)/2]?? ([X]取值为不大于X的整数),确定运算量0、±1A、±2A。 对于2A的实现。仅仅须要将A左移一位。因此,对于符号数乘法而言。基4 wd=Booth%E7%AE%97%E6%B3%95&hl_tag=textlink&tn=SE_hldp01350_v6v6zkg6" rel="nofollow">Booth算法既方便又快捷。而对于无符号数来说,仅仅需对其高位作0扩展。而其它处理方法同样。尽管扩展后可能导致部分积的个数比有符号数乘法多1,可是这样的算法非常好地保证了硬件上的一致性。有利于实现。对于32位乘法来说。结合指令集的设计,通常情况下须要相加的部分积不超过18个


booth乘法器是一种位操作乘法器。与传统乘法器不同的是直接操作位。传统乘法器依靠加法,不断累加。在这里就不说了。

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

booth乘法器有个重要的加码运算。来看一下
B[-1]就是B的零位右边的位。是假想的位。如0010  0  B[-1]就是0。 做booth乘法器又引入了p空间。
上图的左移一位或者右移一位指的是p空间。什么是p空间呢?我们以7(0111)和2(0010)相乘为例。他们位数n均为4位。所以p空间大小为n*2+1=9。
p空间是怎样做乘法运算的呢?
代码例如以下:

module product
(
input CLK,
input RSTn, input Start_Sig,
input [7:0]A,
input [7:0]B, output Done_Sig,
output [15:0]Product, output [7:0]SQ_a,
output [7:0]SQ_s,
output [16:0]SQ_p
); /*************************/ reg [3:0]i;
reg [7:0]a; // a的寄存器
reg [7:0]s; // a的补码加1 a非
reg [16:0]p; // p空间存储器
reg [3:0]X;   //操作次数
reg isDone; always @ ( posedge CLK or negedge RSTn )
 if( !RSTn )
  begin
   
   i <= 4'd0;
   a <= 8'd0;
   s <= 8'd0;
   p <= 17'd0;
   X <= 4'd0;
   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 isDone <= 1'b0; i <= 4'd0; end
   
  endcase /*************************/ assign Done_Sig = isDone;
assign Product = p[16:1]; /*************************/ assign SQ_a = a;
assign SQ_s = s;
assign SQ_p = p;
/**************************/
endmodule

booth乘法器原理的更多相关文章

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

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

  2. 【黑金原创教程】【TimeQuest】【第四章】内部延迟与其他

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  3. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  4. FPGA 开发详细流程你了解吗?

    FPGA 的详细开发流程就是利用 EDA 开发工具对 FPGA 芯片进行开发的过程. FPGA 的详细开发流程如下所示,主要包括电路设计.设计输入.综合(优化).布局布线(实现与优化).编程配置五大步 ...

  5. 乘法器——booth编码

    博主最近在学习加法器.乘法器.IEEE的浮点数标准,作为数字IC的基础.当看到booth编码的乘法器时,对booth编码不是很理解,然后在网上找各种理解,终于豁然开朗.现将一个很好的解释分享给大家,希 ...

  6. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

  7. IQ调制原理

    现代通信中,IQ调制基本上属于是标准配置,因为利用IQ调制可以做出所有的调制方式. 但是IQ调制到底是怎么工作的,为什么需要星座映射,成型滤波又是用来干嘛的.这个呢,讲通信原理的时候倒是都会泛泛的提到 ...

  8. Verilog乘法器

    乘法器,不能用乘号直接表示,略坑呀 坑归坑,做还是要做的 思路:首先乘法分为有符号乘与无符号乘,所以建立两个module分别运算有符号与无符号.然后在总module中用case语句判断输出应赋的值. ...

  9. Booth算法

    Booth算法 算法描述(载自维基百科) 对于N位乘数Y,布斯算法检查其2的补码形式的最后一位和一个隐含的低位,命名为y-1,初始值为0.对于yi, i = 0, 1, ..., N - 1,考察yi ...

随机推荐

  1. **没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案

    一.现象 我将之前Redhat9.0编译好的uboot,转到ubuntu12.04环境.在ubuntu环境下对 uboot重新编译提示错误.编译过程如下: root@hailin-virtual-ma ...

  2. Python9-day11-作业

    # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),# 要求登录成功一次,后续的函数都无需再输入用户名和密码 FLAG = False def login(func): def ...

  3. cocos2d-x游戏开发(一)之环境搭建篇

    前言 进入研究生生涯已经有一段时间,感觉却没做些什么,实验室虽有一个很大的国家项目,但考虑到它这么的单一,总想利用业余时间做些什么,拓宽一下自己的知识面. 偶然机会,了解到cocos这个东东,恰好,实 ...

  4. JQuery中xxx is not a function或者can not find $

    在项目中,遇到以上两个错误,反复折腾了好久,js代码写得没有问题,jquery的文件也引入了,就是反复的报告错误,xxx is not a function.如图: 就是这样的错误,shake is ...

  5. python基础学习笔记——列表技巧

    列表: 循环删除列表中的每⼀个元素 li = [, , , ] for e in li: li.remove(e) print(li) 结果: [, ] 分析原因: for的运⾏过程. 会有⼀个指针来 ...

  6. mac下secureCRT 客户端 $redis-cli回车后没有反应的解决办法

    启动redis server后,SecureCRT进入redis-cli,输入不断在后面追加IP:Port显示设置当前的Session Options-->Terminal-->Emula ...

  7. 字符串格式化format很牛B

    python的format方法可谓相当强大,它可以接受不限个参数... 1.通过位置来格式化字符串,注意format传入的参数的位置要正确{0}对应第1个参数,{1}对应第2个参数... >&g ...

  8. 九度oj 题目1035:找出直系亲属

    题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild ...

  9. get 发送ajax请求

    上demo小案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  10. Masonry练习

    tableView的cell自动适应,scrollview自动适应,自定义自动布局控件 demo链接:http://pan.baidu.com/s/1jHsrGwQ