定点乘法器—-基4booth算法

一. 简介

本篇文章将介绍如何使用 基4 booth算法赛题中介绍了)来生成部分积,在开始之前,简要介绍一下定点乘法器的计算流程:

乘数进行booth编码 —> 利用得到的编码值被乘数生成部分积 —-> 对部分积进行压缩求和。

基4 booth后面简称为booth2)算法用来完成前面的两步。

ps: 有booth2就有booth1,它们大同小异,只不过booth1太垃圾了,感兴趣的可以自行了解。

二. booth2 编码

编码的过程很简单,将乘数的末尾补个0,然后三位三位为一组,通过公式计算出对应的值即可。如下图,末尾的0是补的,对8bit乘数来说,可以生成出4组数据。

请添加图片描述

然后将这4组数据,应用下面的这个公式,便可得到最终的4个编码值。

请添加图片描述

得到编码值之后,用每个编码值被乘数得到部分积,将部分积末尾不错对应数量的0即可。

编码值a,不需要补0,编码值b需要补充2个0,此时位宽为10bit,编码值c需要补充4个0,此时位宽为12bit,以此类推即可。

最后将部分积的符号位扩展一位即可,例如正数的符号位为0,那么就用00表示,负数的符号位为1,那么就用11表示。

请添加图片描述

boot2编码就这样完成了它的任务,至于为什么可以这样,可以参考下面的公式,来源于赛题,看懂就可以知道那个编码公式怎么来的了,以及补0操作左移对应位数),非常简单是吧。

请添加图片描述

三. booth2 编码代码实现

通过booth2编码的真值表可以知道

组数为 000 或者 111 时 ,部分积为0

组数为 001 或者 010 时, 部分积就是被乘数

组数为 011 时, 部分积就是被乘数左移动一位

组数为 100 时,部分积就是被乘数左移动一位,然后取相反数

组数为 101 或者 110 时,部分积为被乘数的相反数。

总结可以发现,当组数的最高位为0时,被乘数不变,当组数的最高位为1时,需要对被乘数取反当组数的最后两位一样的时候,那么就需要对被乘数左移一位的操作。那么可以使用如下三个变量进行标记,当set0为1时,直接输出0,不用判断其他两个变量,否则需要判断。完整代码如下。

请添加图片描述

四. 部分积生成代码实现

首先,需要提前计算三个值-A,-2A,2A。

请添加图片描述

然后按照上面分析的,来生成部分积,这里将部分积扩展到了32bit,因为16bit乘16bit,结果的最大位宽为32bit。只截出了两个部分积,其余部分积依次类推。

请添加图片描述

至此 基4 booth算法介绍完毕,实现过程没有经过任何优化,和算法可以清晰对应上。当然,提前透露一下,最终效果延时比较高,效果不是很好,效果如图。

请添加图片描述

关注回复 : 定点乘法器基础版本
获取完整代码

下一篇,将介绍部分积的压缩。

查看全文

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

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

相关文章:

请添加图片描述

定点乘法器—-基4booth算法

一. 简介
本篇文章将介绍如何使用 基4 booth算法赛题中介绍了)来生成部分积,在开始之前,简要介绍一下定点乘法器的计算流程:
对乘数进行booth编码 —> 利用得到的编码值和被乘数生成部分积 —-> 对部分积进行压缩求和。
基4 booth后面简称为……

linux入门—理解进程概念

什么是进程
大家在课本上经常可以看到进程得概念为:一个运行起来的程序就将其称之为进程或者加载到内存中的程序就称之为进程再或者进程相比于程序具有动态属性等等,这些都可以称之为进程的概念,但是这些概念都十分的难懂,所以接……

【IAR工程】STM8S208RB基于寄存器操作硬件I2C驱动ssd1306/sh1106 Oled

【IAR工程】STM8S208RB基于寄存器操作硬件I2C驱动ssd1306/sh1106 Oled📌在GitHub上有关stm8驱动ssd1306 oled的开源项目:https://github.com/microgeek-eu/oled_ssd1306_stm8 不过该项目是在SDCC环境下编译的,包含I2C和spi接口可选择。 &……

Java多层for语句嵌套之结束指定的for

很多是时候我们经常遇到多层for语句嵌套的情况,但有时候我们想提早退出内部的for语句或者提早结束外部的for语句。 可以使用标签和break来解决,break标签; 结束指定层的for循环(这里指定的层一般当前层的上面的任意一层或者当前层……

设计模式-七大设计原则介绍

设计模式-七大设计原则介绍 设计模式学习整理 1.单一职责原则Single Responsibility Principle, SRP)
基本介绍:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
单一职责原则分析
一个类(大到模块,小到方法……

Hbase配置与启动

一、前置条件
hadoop已经完成配置,可以使用hadoop version命令查看
#hadoop version命令查看
hadoop version二、Hbase配置
1、ZooKeeper和Hbase下载解压 这里博主是在windows上下载,然后利用puty传到Linux虚拟机的节点的方式,当然你也可以……

解决:Hbase启动后没有HMaster,报错java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder

解决方法: 把hbase-2.1.5/lib/client-facing-thirdparty目录下的htrace-core-3.1.0-incubating.jar 复制到hbase-2.1.5/lib即可。 cp /home/Hbase/hbase-2.1.5/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar /home/Hbase/lib 一、错误描述&#x……

Hbase按指定列族中指定列的列值查找数据Hbase命令

最近在做大数据的实验时,遇到需要类似于sql中 select XXX from where xxxxxxxx的一个检索的需求,翻了好多博客都没有解决,最后通过查看hbase filte的文档,使用SingleValueFilter过滤器 表的结构 #结构Student表,包含Ba……

eNSP 构建以太网交换网络

VLAN划分方法描述使用场景基于端口直接指定该端口所属的VLAN适用于设备位置固定的安全环境基于MAC地址根据数据帧头部的MAC地址来划分VLAN适用于设备位置不固定,但设备MAC地址固定的小型网络基于子网根据数据包头部的源IP地址来划分VLAN适用于对移动性和简化管理有较……

力扣-《剑指offer》-树-刷题笔记

目录
第一题:二叉树的镜像
第二题:对称二叉树
第三题:从上到下打印二叉树
第四题:二叉树搜索树的第k大节点 第五题:二叉树的深度
第六题:平衡二叉树 第七题:二叉树的最近公共祖先 第一题&a……

13、Qt生成dll-QLibrary方式使用

Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirs&#xff……

基于mapreduce 的 minHash 矩阵压缩

Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……

关于hashmap使用迭代器的问题

keySet获得的只是key值的集合,valueSet获得的是value集合,entryset获得的是键值对的集合。 package com.test2.test;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;public class mapiterator……

Hadoop入口FileSystem HDFS操作 本地文件合并到HDFS和HDFS文件合并

Hadoop 文件API的起点是FileSystem类。这是一个与文件系统交互的抽象类。存在不同的具体实现子类来处理HDFS和本地文件系统。
HDFS接口的FileSystem对象:
Configuration conf new Configuration);
FileSystem hdfs FileSystem.getconf); HDFS直接操作&#x……

combiner partitioner

combine是在map端进行的,是在patition之后 partitioner也是在map端进行的 combine 适用在每个map端进行简单的合并,同样也是继承Reduce类。…

toString.indexOf:)和subsTring

package com.test2.test;public class subStirngTest {public static void mainString[] args) {String sb"abcdefgh";String sc"abcd:efgh";int splitIndexsc.indexOf":");//找到标识符的位置System.out.printlnsplitIndex);sb.substring1)……

Aprior 算法

Apriori 算法:(hadoop中实现) 第一步:统计项的频度 (用一个MR统计出来) 假设是一个矩阵 U1 app1 , app3
U2 app1 , app2 , app3
U3 app2 , app3 把矩阵看成一行行的向量
U1<app……

matlab中kmeans简单使用

[Idx,C,sumD,D]Kmeansdata,3,’dist’,’sqEuclidean’,’rep’,4) 等号右边: kmeans:K-均值聚类 data是你自己的输入数据 3 是你要聚成3类 dist sqEuclidean 这2个参数,表示距离函数为欧式距离。什么是欧式距离自己百度 ’rep’,4 聚类重……

matlab中贝叶斯简单使用

Matlab部分代码: Data_prediction loadlichen\Pima-prediction-set.txt);
Data_train loadlichen\Pima-training-set.txt);
training_data Data_train:,1:8);
training_label Data_train:,9);
prediction_data Data_prediction:,1:8);
prediction_la……

awk sed 的截取和替换vsftpd.log

vsftpd.log 日志
首先需要在配置文件中添加开启的语句。
然后必须有用户登录才会产生日志文件。 日志格式: 截取结果: Static.sh脚本内容:
#!/bin/bash
cat /var/log/vsftpd.log |awk {print $8 " "$9" "$10" &……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注