Wallace树乘法器及Verilog实现

 一、Wallace树乘法器

Wallace树乘法器就是将多个部分积进行分组,每三个一组,最后如果剩下的部分积个数不够三个的不做处理,然后将各组的部分积进行相加得到和以及进位信息,直到最终只剩下两行部分积,相加后得到最终结果。

以下面的例子进行说明:

a=8'hA7,b=8'hD9

①首先列出所有的部分积,然后按照三个三个进行分组,如图中相同颜色的为一组,但是最后黄色的两个由于不够则不进行运算,然后对一组内的三行部分积进行运算,得到的和留在本位,得到的进位填充到前一列的最后一行,详见下图2

图1

图2

在上图中,我们以红色部分的进行举例,三行的运算结果最终为两行第一行为和,第二行为进位

第一行红色背景的最后一列只有1,因此本位和为1,没有进位因此填充到前一列最后一行的为0 ;倒数第二列有两个1,因此本位和为0,进位为1填充到它的前一列的最后一行,后面同理,详见下图:

图3

图中蓝色箭头表示和的填充,黄色虚线箭头表示进位的填充,需要注意的是在此次计算中新产生的进位不参与运算,只填充到对应位置。

②将上述得到的结果再次分组,如图5

图4

图5

③再次按照上述步骤计算得到图6,再分组得到图7

图6

图7

④计算得到结果然后再分组如图9

图8

图9

⑤得到最后结果只剩两行,直接相加得到最终结果

二、Verilog实现

wallace_tree模块如下:

module wallace_tree(input [3:0] a,input [3:0] b,input data_valid,output [7:0] sum);reg [7:0]temp[3:0];
reg [7:0]temp_reg[3:0];
integer i;
integer j;
always@(*)
beginif(data_valid)for(i=0;i<=3;i=i+1)begintemp[i]=8'b0;temp_reg[i]=8'b0;for(j=0;j<=3;j=j+1)begintemp[i][j]=(a[j]&b[i]);endendtemp_reg[0]=temp[0];temp_reg[1]=temp[1]<<1;temp_reg[2]=temp[2]<<2;temp_reg[3]=temp[3]<<3;
endwire [7:0]cin_1;
wire [7:0]sum_1;
wire [7:0]cin_2;
wire [7:0]sum_2;full_add inst_full_add (.a(temp_reg[0]), .b(temp_reg[1]), .c(temp_reg[2]), .cin(cin_1), .sum(sum_1));full_add inst_full_add1 (.a(sum_1), .b(cin_1), .c(temp_reg[3]), .cin(cin_2), .sum(sum_2));assign sum=cin_2+sum_2;endmodule

full_add模块如下:

module full_add(input [7:0]a,input [7:0]b,input [7:0]c,output  [7:0]cin,output  [7:0]sum);
reg [7:0]cin=0;
reg [7:0]sum=0;
integer i;
always@(*)
beginfor(i=0;i<=7;i=i+1)beginsum[i]=a[i]^b[i]^c[i];cin[i+1]=(a[i]&b[i])|((a[i]|b[i])&c[i]);end
endendmodule

仿真tb如下:

module tb_top();
reg [3:0]a;
reg [3:0]b;
wire [7:0]sum;
reg data_valid;initial begina=0;b=0;data_valid=0;#100a=4'b0011;b=4'b1010;data_valid=1;#100a=0;b=0;data_valid=0;#100a=4'b1111;b=4'b1111;data_valid=1;#100a=0;b=0;data_valid=0;#100a=4'b1100;b=4'b1100;data_valid=1;#100a=0;b=0;data_valid=0;
endwallace_tree inst_multiplication (.a(a), .b(b), .data_valid(data_valid), .sum(sum));endmodule

仿真结果如下:

综合结果如下:

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

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

相关文章

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月11日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月11日 星期六 农历四月初四 1、 央行新信号&#xff1a;统筹研究消化存量房产和优化增量住房的政策措施。 2、 民政部等七部门规范养老机构预收费&#xff1a;预收周期不得超12个月。 3、 气象局&#xff1a;南方将迎新…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档基于 https://www.bilibili.com/video/BV1wC4y1Y…

安全 | 开源入侵防御系统 Snort

目录 Snort 概要 入侵预防系统模式 数据包记录器和嗅探器模式 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; Snort 概要 Snort 概要 是世界上最重要的开源入…

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion&#xff0c;这几年一直很火的模型&#xff0c;比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型&#xff0c;但由于该模型与VAE那边&#xff0c;都涉及了较多了概率论知识&#xff0c;实在让人望而却步。所以&#xff0…

如何对团队成员进行六西格玛管理的培训?

在现代企业中&#xff0c;六西格玛管理已成为提升产品质量、减少浪费、提高生产效率的重要工具。然而&#xff0c;要想充分发挥六西格玛管理的优势&#xff0c;必须拥有一支熟练掌握这一方法的团队。因此&#xff0c;对团队成员进行六西格玛管理培训至关重要。具体步骤如深圳天…

【话题】你用过最好用的AI工具有那些

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、C知道二、CSDN工具集三、AI工具的普及与受欢迎程度四、AI工具的实际应用与影响五、总结与展望文章推荐 背景 探讨人们在使用AI工具时&#xff0c;最喜欢的和认…

【JS 的数据类型】

JS 的数据类型 基本数据类型 js有8种基本数据类型&#xff0c;分别为&#xff1a;undefined、number、Object、null、Symbol、Boolean、String、BigInt&#xff1b; 其中Symbol和BigInt是ES6新增的数据类型&#xff1a; ● Symobol代表独一无二的值&#xff0c;可以用来代表对…

本安防爆手机在电力行业中的应用

在电力行业这一充满挑战与风险的领域中&#xff0c;安全始终是最为首要的考量。电力巡检、维修等作业往往涉及易燃、易爆环境&#xff0c;这就要求工作人员配备能够在极端条件下保障通讯和作业安全的专业设备。防爆手机应运而生&#xff0c;以其独特的设计和卓越的性能&#xf…

Spring框架学习-详细

文章目录 1. Spring简介1.1 面向接口编程1.2 Spring简介1.3 Spring体系结构 2 Spring IoC - 基于XML2.1 Sping框架部署&#xff08;IoC&#xff09;2.2 Spring IoC使用2.3 IoC和DI2.4 DI依赖注入Spring容器通过反射方法实现属性注入有三种方式1. set方法注入2. 构造器注入 2.5 …

2024临床常用的认知障碍评估量表汇总,医生必备!

认知障碍指大脑记忆、语言、推理、计算、情感、注意力、定向力、执行能力等方面出现异常&#xff0c;导致学习、记忆障碍&#xff0c;影响患者社会功能和平时生活质量。临床常用专业的认知障碍评估量表&#xff0c;来评估患者的认知障碍严重程度。 常笑医学整理了5个常用的认知…

effective python学习笔记_类与接口

用组合类实现多层结构而不用内置类型 例子&#xff1a;成绩单&#xff0c;存储学生各科成绩多个然后加权重&#xff0c;如果用字典类型会导致字典有多层嵌套结构 思想 当用内置类型如字典元组等结构出现超过二层的多层嵌套结构时&#xff0c;读起来会比较难懂&#xff0c;此时…

blender简单贴图

1、直接拖拽图片到着色器编辑器 2、将图片节点的颜色和原理化节点的基础色相连 3、打开渲染预览

✨✨使用vue3打造一个el-form表单及高德地图的关联组件实例✨

✨1. 实现功能 &#x1f31f;表单内显示省市县以及详细地址 点击省市县输入框时&#xff0c;打开对应地图弹窗&#xff0c;进行位置选择选择位置回显入对应输入框表单内的省市县以及地址输入框同外嵌表单走相同的校验方式触发校验后点击reset实现清除校验与清空数据 &#x1f…

【系统分析师】软件架构设计

文章目录 1、构件与软件复用1.1 主流构件标准1.2 构件获取与管理1.3 构件复用的方法 2、软件架构概述3、软件架构建模4、软件架构风格4.1 经典架构风格4.2 层次架构风格4.3 富互联网应用-RIA 5、面向服务的架构5.1 SOA概述5.2 SOA的关键技术5.3 SOA的实现方法 6、软件架构评估6…

React 第三十章 前端框架的分类

现代前端框架&#xff0c;有一个非常重要的特点&#xff0c;那就是基于状态的声明式渲染。如果要概括的话&#xff0c;可以使用一个公式&#xff1a; UI f&#xff08;state&#xff09; state&#xff1a;当前视图的一个状态f&#xff1a;框架内部的一个运行机制UI&#xff1…

Android使用Chaquo来运行Python的librosa的相关代码【有详细案例教程】

在某些情况下&#xff0c;我们可能需要在android上运行python的代码&#xff0c;那么常见的解释器有很多&#xff0c;目前比较成熟的就是chaquo&#xff0c;它适配的第三方机器学习的库很多&#xff0c;下面是它的简单使用教程 1.环境的搭建 1.1 在Android studio中新建安卓工…

MySQL·表的内外连接

目录 表的内连和外连 内连接 案例1&#xff1a;显示SMITH的名字和部门名 外连接 左外连接 案例2&#xff1a; 查询所有学生的成绩&#xff0c;如果这个学生没有成绩&#xff0c;也要将学生的个人信息显示出来 右外连接 案例3&#xff1a;对stu表和exam表联合查询&#…

RFID读写头JY-V640在半导体wafer晶圆盒的使用流程

为了最大限度地提高生产效率&#xff0c;新的晶圆工厂和正在翻新升级的晶圆工厂选择采用RFID技术应用在半导体制造业上&#xff0c;通过RFID技术的非接触式采集信息特性&#xff0c;对晶圆盒在生产、存储、运输过程中进行信息追踪和管理&#xff0c;提升半导体制造业的生产效率…