计算机体系结构-Booth乘法

news/2024/11/19 19:33:22/文章来源:https://www.cnblogs.com/XL2COWARD/p/18197659

原理解释

电路实现

以Radix-4 Booth编码为例,Booth乘法的核心是部分积的生成,需要生成\(N/2\)个部分积,每个部分积与\([X]_补\)有关,存在\(-X,-2X,+X,+2X,0\) 这五种可能,其中减去\(X_{补}\)的操作可以认为是按位取反的\(X_{补}\)在末尾+1。为了硬件实现方便,可以将末位1操作提取出来,假设\(X_{补}\)的二进制格式为\(x_6x_5x_4x_3x_2x_1x_0\),假设部分积\(P=p_7p_6p_5p_4p_3p_2p_1p_0+c\),那么有:
image
当部分积微2X时,可以认为X输入左移一位,此时\(p_i=x_{i-1}\)相等。如果部分积的选择为\(-X/-2X\),则此处对\(x_i\)\(x_{i-1}\)取反,并设置最后的末位进位\(c=1\)
由此可以得到每一位\(p_i\)的逻辑表达式为:
image
Booth结果选择逻辑如下所示:
image

部分积生成过程中需要利用\(y_{i-1},y_i\)\(y_{i+1}\)这三个信号来生成需要用到的\(S_{-X},S_{-2X},S_{X},S_{2x}\)的选择信号,通过卡诺图化简可以得到:
image
选择信号生成部分的逻辑图如下所示:
image
通过组合上述两个部分,可以形成每个Booth部分积的逻辑图,调用该逻辑通过移位加法策略可以实现两位Booth补码乘的结构。
乘法操作开始时,乘数右侧需要补1位的0,结果需要预置为全0.在每个时钟周期的计算结束后,乘数算术右移两位,被乘数左移两位,直到乘数全为0,乘法结束。
对于N位补码乘法,操作可以在N/2个时钟周期完成。被乘数、结果、加法器和Booth核心的宽度都为2N位。

image
image

代码实现


/*
* 基4的booth编码的单周期有符号乘法器
*/module booth_multiplier_base4 #(parameter DATA_WIDTH = 8       // 数据位宽应该为2的指数
)(  input [DATA_WIDTH-1 : 0] a,  input [DATA_WIDTH-1 : 0] b,  output reg [2*DATA_WIDTH-1 : 0] product,input clk
);  integer i;  reg [2:0] booth_bits [DATA_WIDTH/2-1:0];  reg [DATA_WIDTH:0] b_extended;reg [2*DATA_WIDTH:0] partial_product [DATA_WIDTH/2-1:0];  reg [2*DATA_WIDTH-1:0] a_pos, a_neg, a_extend; always @(posedge clk) begin  b_extended = {b, 1'b0}; // 这里我补了个0,防止索引超出界限a_extend = {{DATA_WIDTH{a[DATA_WIDTH-1]}}, a};    // 符号位扩展 ,之前忘记扩展找了好久a_pos = a_extend;a_neg = ~a_extend + 1'b1;  // 补码运算product = 0;for (i = 0; i < DATA_WIDTH/2; i = i + 1) begin  booth_bits[i] = {b_extended[2*i+2], b_extended[2*i+1], b_extended[2*i]};  case (booth_bits[i])/*$\sum_{i=0}^{\frac{n}{2}-1} (-2 \cdot b_{2i+2} + b_{2i+1} + b_{2i})$  // LaTex{ b(2i+2), b(2i+1), b(2i) } :=000:    0;001:    1;010:    1;011:    2;100:    -2;101:    -1;110:    -1;111:    0;*/  3'b000, 3'b111: partial_product[i] = 9'd0;  3'b001, 3'b010: partial_product[i] = a_pos;3'b011:         partial_product[i] = a_pos << 1;3'b100:         partial_product[i] = a_neg << 1;3'b101, 3'b110: partial_product[i] = a_neg; endcase  endfor (i = 0; i < (DATA_WIDTH/2-1); i = i + 1) beginproduct = product + (partial_product[i] << (2*i)); // Shift and accumulateendend  endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707720.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 JS 实现在浏览器控制台打印图片 console.image()

在前端开发过程中,调试的时候,我门会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个…

渗透测试快速启动指南-全-

渗透测试快速启动指南(全)原文:Quick Start Guide to Penetration Testing 协议:CC BY-NC-SA 4.0一、NMAP 简介 漏洞评估和渗透测试变得越来越重要,尤其是在最近几年。组织通常拥有存储敏感数据的复杂资产网络。这些资产暴露在来自组织内部和外部的潜在威胁之下。为了全面…

『手撕Vue-CLI』编码规范检查

前言 这篇为什么是编码规范检查呢?因为这是一个很重要的环节,一个好的编码规范可以让代码更加清晰易读,在官方的 VUE-CLI 也是有着很好的编码规范的,所以我也要加入这个环节。 其实不管在哪个项目中,编码规范都是很重要的,像我们平日里的项目开发当中,我们也会使用 ESLi…

字节面试:MySQL什么时候 锁表?如何防止锁表?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

CF1884D Counting Rhyme 题解

题目链接:CF 或者 洛谷 给个莫反题解,讲讲常规套路 题目要求满足没有 \(a_k \mid a_i 与 a_k \mid a_j\) 的 \((i,j)\) 的对数,显然即不存在 \(a_k \mid \gcd(a_i,a_j)\)。稍微拓展下,如果不存在整除多个数,那么显然不整除它们的 \(\gcd\) 即可,因为它们的公因数即为满足…

ITSM工作台:工程师效率与协同的新天地

在当今快节奏的IT运维领域,ITILDESK工作台脱颖而出,成为专为技术工程师量身打造的全能助手。这款平台不仅仅是一个工具集合体,它是一个精心设计的生态系统,旨在促进工程师的工作效率、团队协作与个人成长,为日常运维工作带来前所未有的便捷与智能。 一站式工作环境:从工…

HTML5中 drag 和 drop api

被拖放元素 -- A,目标元素 -- B。dragstart 事件主体是A,在开始拖放A时触发。 dragend 事件主体是A,在整个拖放操作结束时触发。 drag 事件主体是A,正在拖放A时触发(整个拖拽,drag事件会在被拖拉的节点上持续触发,相隔几百毫秒)。 dragenter 事件主体是B,在A进入某元素…

一些不错的地理题

2022年福建高考与土壤联系最密切的应该是植被 所以AB选项直接排除 然后的话30度的时候为什么大幅上升呢,主要是因为青藏高原 所以通过尺度也可以做这个题 10度的纬度,算是一个中等的尺度,而不应该是土壤植被这种小尺度大题意义类要去找主体、找问题 对你的意义 对我的意义 对…

项目管理之八大绩效域-------笔记(二)

八大绩效域详细解析 18.1 干系人绩效域跟干系人所有相关的活动.一、预期目标①与干系人建立高效的工作关系②干系人认同项目目标③支持项目的干系人提高了满意度,并从中收益④反对项目的干系人没有对项目产生负面影响三四是一个意思,就是支持你的人更支持你,反对你的人没有负面…

【日记】跟奇安信斗智斗勇,败下阵来(416 字)

正文今天一个客户都没有,让我快怀疑我们银行是不是要倒闭了……因为内外网 u 盘不知所踪,所以重新制了一个。深刻体会到了奇安信有多烂。有两个 u 盘,奇安信似乎把主控写坏了,插上电脑有反应,但是看不见盘符,磁盘管理也看不到。另一个也是这样,但后面莫名其妙好了。Wind…

DNS 的层级结构和分层结构是怎样的?

DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 DNS采用分层结构的原因主要有以下几点: 分层结构使得DNS系统能够轻松扩展,以容纳…