数字IC前端学习笔记:数字乘法器的优化设计(基2布斯乘法器)

news2024/10/7 2:19:59

相关阅读

数字IC前端icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482


        ​​​​​​​在之前的文章中,进位保留乘法器、华莱士树乘法器、dadda树乘法器等方法都是优化了部分积累加这个过程。还有一些​​​​​​​方法能对部分积的产生进行优化,基2布斯编码是由布斯夫妇于1950年发明的,因为其硬件实现简单,所需硅片面积较小,能够显著提高乘法运算的速度,而被广泛采用。

        使用基2布斯编码的乘法器,会对乘数进行重新编码,以减少乘法运算中所需的加法次数。除了这一优点,基2布斯编码还可以计算有符号数乘法,这与之前的乘法器不同,如果它们需要计算有符号数,需要将符号位单独异或计算,然后对其绝对值进行无符号数乘法运算,而布斯编码直接使用补码运算,因此不需对符号位单独考虑。

        首先推导基2布斯编码的编码规则,对于一个n位补码表示的数X,可以将其写成X=-X_{n-1}2^{n-1}+\sum_{i=0}^{n-2}X_{i}2^{i}的形式,其中X_{i}为各二进制位,最高位是符号位,所以其值为负数。将右式展开,结果如式1所示,最后的X_{-1}起辅助作用,其值为0。

X=-X_{n-1}2^{n-1}+\sum_{i=0}^{n-2}X_{i}2^{I}=-X_{n-1}2^{n-1}+X_{n-2}2^{n-2}+X_{n-3}2^{n-3}+...+X_{2}2^{2}+X_{1}2+X_{0}+X_{-1}            (式1)

        接着把除了最高位和最低位外的所有X_{n}写成2X_{n}-X_{n},即式2,

X=-X_{n-1}2^{n-1}+(2X_{n-2}-X_{n-2})2^{n-2}+(2X_{n-3}-X_{n-3})2^{n-3}+...+(2X_{2}-X_{2})2^{2}+(2X_{1}-X_{1})2+(2X_{0}-X_{0})+X_{-1}   (式2)

        将括号展开并整理,得到式3,

X=(X_{n-2}-X_{n-1})2^{n-1}+(X_{n-3}-X_{n-2})2^{n-2}+(X_{n-4}-X_{n-3})2^{n-2}+...+(X_{1}-X_{0})2^{2}+(X_{0}-X_{1})2+(X_{-1}-X_{0}) (式3)

        至此得到了基2布斯编码的规律,每一位基2布斯编码即为原来的二进制补码的低一位减本位,所以有三种取值,1、0和-1,这种方式使得可以跳过乘数中的某些连续的1,将多次的部分积累加,减少到较少次数的加减运算,表1总结了基2布斯编码的规则。

表1 补码的布斯编码规则

Xn

Xn-1

BRCn

乘数状态

0

0

0

0

全0字符串

0

1

1

+1

末尾为1的串

1

0

1

-1

开始为1的串

1

1

0

0

中间全1的串

        作为基2布斯编码的一个例子,图1给出了十进制-67编码的例子。如果不使用基2布斯编码,该数作为乘数的普通乘法需要五次加法和一次减法(符号位),使用了基2布斯编码后,只需要进行两次加法和三次减法。对于含有连续1比较多的数来说,这种优化更有效果。

图1 十进制数(-67) 的基2布斯编码

        由此可以构建基2布斯编码模块,布斯编码模块对每三位乘数进行布斯编码,因此对于八位的数据宽度,设计需要八个编码模块(加上最低的辅助位),输出为三个信号,分别是表示为表示减操作的Neg信号,表示部分积为零和一倍的Zero和One信号。这些信号将提供给部分积产生模块,随后部分积产生模块将根据这些信息输出正确的部分积。基2布斯编码器具体的Verilog实现如下所示。

module Booth_Encoder(
input [1:0] Code,
output Neg,Zero,One
);

assign Neg = Code[1];
assign Zero = (Code == 2’b00) || (Code == 2'b11);
assign One = !Zero;

endmodule

        基2布斯编码器还需要搭配部分积产生模块,才能产生正确的部分积(布斯编码只针对乘数,被乘数用于产生部分积)。最后可以使用之前对部分积累加优化过程中谈到的进位保留加法器和树形结构完成乘法结果的产生。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

再获深交所认可,Smartbi实力领跑金融BI赛道

“十四五”规划中提到,健全具有高度适应性、竞争力、普惠性的现代金融体系,构建有效支撑实体经济的体制机制。《证券期货业科技发展“十四五”规划》作为指导证券期货业科技发展的纲领性文件, 秉承国家“十四五”规划的数字化发展理念&#x…

在PCB走线中线不直,有小疙瘩,让走线变直的方法

在PCB走线中线不直,导线上有小疙瘩,那么如何去除呢? 在PCB走线的过程中,鼠标右击,点击Enhanced Pad Entry(增强焊盘入口)选项去勾。 Enhanced Pad Entry去勾后,然后再走线,走线就很直了。 如下图所示。 博主专注职场硬件设计,如果文章对你有帮助,请关注,点赞,收藏…

clickhouse之readonly解决方法

1,问题描述 日志报错写入ck报错:ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: 192.16.1.19, port: 8123; Code: 242. DB::Exception: Table is in readonly mode: replica_path/clickhouse/tables…

8+肿瘤+多组机器学习+分型。

今天给同学们分享一篇肿瘤多组机器学习分型的生信文章“Integrated multiomics analysis and machine learning refine molecular subtypes and prognosis for muscle-invasive urothelial cancer”,这篇文章于2023年6月5日发表在Mol Ther Nucleic Acids期刊上&…

全志R128芯片应用开发案例——按键输入

按键输入 本文案例代码下载地址按键输入案例代码https://www.aw-ol.com/downloads?cat24 首先我们搭建电路,如下: 引脚按键PA25按键1脚GND按键3脚 载入方案 我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所…

金融行业蓄电池监控,究竟有多厉害!

金融行业是现代社会的重要组成部分,金融机构依赖于高度可靠的电力系统来支持其日常运营。随着金融交易日益数字化和自动化,电力中断或失效可能导致严重的财务损失和风险。 因此,金融行业对电力供应的可靠性要求极高,而蓄电池监控正…

Vue3+vite 添加router后的2个坑

废话不多说,发现问题并解决问题 第 1 个坑:关于 …/ router 报红 正常引入页面路由,页面也显示出来了,路径也是正确的,但是却报红了。 原因是:当前路径正则有问题 解决方案: 在 src 文件下 v…

品牌的学习

2023年快消时尚品牌排行榜 时尚快消品牌推荐|除了Zara还有这么多好品牌在向你招手呢! - 知乎 (zhihu.com) 2019年快消时尚品牌排行榜 (72 封私信 / 81 条消息) 如何评价UR这个品牌的衣服? - 知乎 (zhihu.com)

TLP265J(TPR,E(T Triac输出 光隔离器助力工业应用实现稳定高效解决方案

关于Triac输出光隔离器: 它是一种用于隔离和调节交流电压的电子设备。它通常被用于控制交流电源下的电阻性或容性负载,例如灯泡、加热器和电动工具等。该设备采用光电耦合器将输入信号和输出信号隔离开来,以保证安全性和稳定性。 光隔离器的…

嵌入式养成计划-33--数据库-sqlite3

七十一、 数据库 71.1 数据库基本概念 数据(Data) 能够输入计算机并能被计算机程序识别和处理的信息集合数据库 (Database)数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合 常用的数据库 大型数…

信息系统项目管理师第四版学习笔记——项目进度管理

项目进度管理过程 项目进度管理过程包括:规划进度管理、定义活动、排列活动顺序、估算活动持续时间、制订进度计划、控制进度。 规划进度管理 规划进度管理是为规划、编制、管理、执行和控制项目进度而制定政策、程序和文档的过程。本过程的主要作用是为如何在…

Unity官方文档中关于内存管理的翻译(2021.3)

原文:Memory in Unity - Unity 手册 Unity内存管理 为了确保您的应用程序运行时没有性能问题,了解Unity如何使用和分配内存非常重要。本文档的这一部分解释了Unity中内存是如何工作的,适用于希望了解如何提高应用程序内存性能的读者。 Unity使用三个内…

4+经典思路,肿瘤+WGCNA+预后模型鉴定预后标志物

今天给同学们分享一篇4经典思路的生信文章“Identification and validation of a five-gene prognostic signature based on bioinformatics analyses in breast cancer”,这篇文章于2023年1月27日发表在Heliyon期刊上,影响因子为4。 乳腺癌(…

Java集合(三)--- List接口

文章目录 一、List接口常用实现类的对比二、List接口中的常用方法代码 提示:以下是本篇文章正文内容,下面案例可供参考 一、List接口常用实现类的对比 二、List接口中的常用方法 代码 package com.tyust.edu;import org.junit.Test;import java.util.A…

界面组件DevExpress WinForms v23.2新功能预览 - 增强MVVM相关功能

本文主要描述了DevExpress WinForms即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用…

Linux 安全 - LSM源码分析

文章目录 前言一、简介1.1 DAC 和 MAC1.2 LSM 调用流程图 二、LSM相关数据结构2.1 struct security_hook_list2.2 union security_list_options2.3 structure security_hook_heads 三、security_bprm_check四、LSM 源码分析3.1 early_security_init3.2 security_init3.2.1 secu…

代码随想录第39天 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 /*** param {number[]} nums* return {number}*/ var rob function(nums) {//dp[i]max(dp[i-2],dp[dp-3])if(nums.length2)return Math.max(nums[0],nums[1])let dpnew Array(nums).fill(0)dp[0]nums[0]dp[1]Math.max(nums[0],nums[1])for(let i2;i<nums.le…

MacDroid pro 1.8(安卓设备文件传输)

MacDroid是一款适用于Mac OS的Android设备管理应用程序&#xff0c;它可以让用户轻松地将Android手机或平板电脑连接到Mac电脑&#xff0c;并在两者之间进行文件传输和数据同步。 通过MacDroid&#xff0c;用户可以通过USB或Wi-Fi连接&#xff0c;快速、简单地将文件从Android…

JVM第一讲:JVM相关知识体系详解+面试(P6熟练 P7精通)

JVM相关知识体系详解面试(P6熟练 P7精通) 面试时常常被面试官问到JVM相关的问题。本系列将给大家构建JVM核心知识点全局知识体系&#xff0c;本文是JVM第一讲&#xff0c;JVM相关知识体系详解和相关面试题梳理。 文章目录 JVM相关知识体系详解面试(P6熟练 P7精通)1、JVM学习建议…

学习vue-router

可参见: vue-router 详解_vue router_七月J的博客-CSDN博客 https://www.cnblogs.com/chen-ao666/p/17144552.html vue-router的使用 使用vue-router的步骤: 创建路由组件 配置路由映射: 组件和路径映射关系 使用路由: 通过和 <router-link>: 该标签是一个vue-router中…