【【verilog典型电路设计之Wallace 树乘法器】】

news2024/11/26 16:38:01

verilog典型电路设计之Wallace 树乘法器

Wallace 树乘法器
是一种我们在集成电路学习中应用非常广泛的设计 其中由两部分组成 一个是FA和HA
FA是full add 全加器 HA 是half 半加器
加法从数据最密集的地方开始,不断地反复使用全加器半加器来覆盖“树” 。 这一级全加器 是一个3输入2输出的器件,因此全加器又称为3-2压缩器。通过全加器将树的深度不断缩减,最终缩减为一个深度为2的树。最后一级则采用一个简单的两输入加法器组成。
在这里插入图片描述
在这里插入图片描述
我们所非常熟知的常规算法是印象里 几个数加起来 一种做法是把其中的一个个数添加,依次相乘 然后慢慢算出它最终的结果 还有一种做法是我们按照常规的竖式加算的方法 我们按照小学教的
在这里插入图片描述
借用一下上次的图 我们会很清晰的发现 乘算之后会得到4个这种暂态的数
好因为这是4位数乘4位数 要是我们把想法扩大 把目标放在更大的数乘更大的数呢 我们会遇到 更大层次的数相乘 那么就会余下好几层的数乘 我们先引入 全加器的概念将三位数压缩成2位
我就以上面的数相加进行举例
比如说1 2 3 4 组数字 我挑选 1 2 3 组我现在想把他压缩成2位 就是
在这里插入图片描述
就是我们将三位数字可以拆解成1个十位 1个个位 就像是1+1+1=11
0+0+1=01 这就是全加器的实现 我们可以把 三个数字 变成 两个数字

而对于半加器来说是 只有两位数相加才会得到结果的
就好比最大的 1+1 =10
这里所有的加数都是以二进制的形式存在的
下面是wallace的verilog代码

module wallace(x,y,out);
parameter size=4;
input [size-1:0] x,y;
output [2*size-1:0] out;
wire [size*size-1:0] a;
wire [1:0] b0,b1,c0,c1,c2,c3;
wire [5:0] add_a,add_b;
wire [6:0] add_out;
wire [2*size-1:0] out;
assign a={x[3][3][2],x[2],x[1],x[3],x[1],x[0][3][2],x[1][0][2][1][0][O]}&
{y[3].y[2].y[3].y[2],y[3].y[1].y[2].y[3].y[0].y[1].y[1],.y[2],.y[0].y[0].y[1].y[0]};
 multiplierhadd U1(.x(a[8]),.y(a[9]),.out(b0));
hadd U2(.x(a[11]),y(a[12]),.out(b1));
hadd U3(.x(a[4]),-y(a[5]),.out(c0));
fadd U4(.x(a[6]),-y(a[7]),z(b0[0]),.out(c1));
fadd U5(.x(a[13]),-y(a[14]),z(b0[1]),.out(c2));
fadd U6(.x(b1[0])..y(a[10]),z(b1[1]),.out(c3));
assign add_a={c3[1],c2[1],c1[1],cO[1],a[3],a[1l;lladderassign add_b={a[15],c3[0],c2[0],c1[0],c0[0],a[2]};
assign add_out=add_a+add_b;
assign out={add_out,a[0]};
endmodule
module fadd(x,y, z, out);
output [1:0]out;
input x,y,z;
assign out=x+y+z;
endmodule
module hadd(x, y, out);
output [1:0]out;
input x,y;
assign out=x+y;
endmodule

下面是wallace的testbench

module wallace_tb;
reg [3:0] x, y;
wire [7:0] out;
wallace m(.x(x),.y(y),.out(out));
initial
begin
x=3;y=4;
#20 x=2; y=3;
#20 x=6; y=8;
end
endmodule

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

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

相关文章

TIOBE2023年8月榜单发布,Python超越老将C/C++蝉联冠军

TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎,TIOBE 官网近日公布了 2023 年 8 月的编程语言排行榜。 此次的榜单中,Python依旧稳居第一,占比达到了13.33%。…

企业门禁如何应对安全问题?这个方法稳赢!

随着科技的不断进步,门禁监控正逐渐演化为一个智能化、高效能的管理工具,为工业安全管理带来了全新的可能性。 因此,门禁监控不仅是安全管理的一部分,更是企业保护财产和保障生产流程的关键策略之一。 客户案例 湖南某制造公司是…

【Spring】统一事件的处理(拦截器、统一异常处理、统一数据格式返回)

文章目录 前言一、Spring 拦截器1.1 用户登录权限校验案例1.1.1 最初的用户登录验证1.1.2 使用 Spring AOP 实现登录验证的问题 1.2 Spring 拦截器的使用1.2.1 Spring 拦截器概念与使用步骤1.2.2 使用拦截器实现对用户登录权限的校验 1.3 拦截器实现原理1.4 Spring 拦截器和 Sp…

AI绘画 | 一文学会Midjourney绘画,创作自己的AI作品(快速入门+参数介绍)

一、生成第一个AI图片 首先,生成将中文描述词翻译成英文 然后在输入端输入:/imagine prompt:Bravely running boy in Q version, cute head portrait 最后,稍等一会即可输出效果 说明: 下面的U1、U2、U3、U4代表的第一张、第二张…

Revit SDK: FindColumns 找到和墙相交的柱子 MeasureHeight 计算天窗到最近楼板的位置

前言 本文的主要内容是基于 ReferenceIntersector 的两个个应用。ReferenceIntersector 的主要作用是找到一条与给定射线相交的各个元素。 FindColumns 内容 ReferenceIntersector namespace Autodesk.Revit.DB {public class ReferenceIntersector : IDisposable{public R…

trollcave靶场

配置 第一步:启动靶机时按下 shift 键, 进入以下界面 第二步:选择第二个选项,然后按下 e 键,进入编辑界面 将这里的ro修改为rw single init/bin/bash,然后按ctrlx,进入一个相当于控制台的界面…

用于构建生成式 AI 应用程序备忘单的最佳 Python 工具

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 新一代的声音 KDnuggets发布了一份富有洞察力的新备忘单,重点介绍了用于构建生成AI应用程序的顶级Python库。 毫无疑问,读者都知道,生成式人工智能是目前数据科…

小红书运营 变现方法总结(精)

大家好,我是网媒智星,今天跟大家分享一下小红书运营方面的知识,怎样利用小红书变现?全篇倾情干货输出,认真学习,保证您收获多多。 首先,让我们来分析一下小红书平台的优势。关于卖东西&#xff…

政务中心站至政务中心东站右线盾构本月始发

本报记者 赵鹏 实习记者 池阳 通讯员 董浩程 立秋已过,平谷线“瓜熟蒂落”的日子指日可待。在左线隧道刚刚顺利贯通后,平谷线政务中心站至政务中心东站区间右线隧道已展开盾构组装施工,右线盾构即将于本月内始发,被誉为“地下蛟龙…

游戏类APP如何提升用户的活跃度?

移动游戏行业,追求使用率的营销能发挥强大的功效,可帮助减少玩家流失、追回流失的玩家、提高活跃玩家所带来的价值以及增加付费玩家贡献的收入。 一、了解玩家需求 想要提升玩家的活跃,首先要知道,玩家喜欢玩哪些平台的游戏&…

LLM-2-ChatGLM2

1 训练 1.1 训练参数配置理解 训练的输入长度source的长度target的长度 –pre_seq_len:pre_seq_len的取值范围一般是1到512,它表示自然语言指令的长度,即输入序列中的前pre_seq_len个token,具体的值需要根据自然语言指令的长度…

最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)

win10系统安装软件时,可能需要.net framework3.5的运行环境,当我们安装某些软件的时候会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)。如果系统默认的是4.0以上的版本,当软件需要.net framework3.…

基于Java+SpringBoot+vue前后端分离疫情下图书馆管理系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

OpenZFS 2.2 发布 RC3,支持 Linux 6.4

导读之前的 OpenZFS 2.2 候选版本已致力于实现与 Linux 6.4 内核的兼容性,而在 2.2-rc3 中,Linux 6.4 支持的元跟踪器已标记为已完成。 OpenZFS 2.2 发布了第 3 个 RC 版本。 之前的 OpenZFS 2.2 候选版本已致力于实现与 Linux 6.4 内核的兼容性&#x…

手把手教你 Vue3 + vite + Echarts 5 +TS 绘制中国地图,看完就会

废话不多说,看图! 本篇文章介绍 Vue3 vite TS 项目内使用 Echarts 5 绘制中国地图,标记分布点!之前没有接触过 Echarts 的,可以先去官方示例看看,里面图形特别齐全。但是官方文档看着费劲的,太…

Calcite使用外部自定义函数

在calcite中可以通过自定义函数来实现丰富的算子,但是往往需要将自定义的函数包与Calcite集成在一起,才能使用相应的算子功能,由于业务需求多变,函数包可能面临频繁的更改,如果需要更改生效,则需要将Calcite的代码重新…

DatenLord X Segmentfault直播预告 l CURP协议的工业化实践

CURP协议 传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源的分布式KV存储Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现…

量子论公众号是如何半年做到10000粉的?

有不少人问我,“量子论”公众号是怎么运营的?“量子论”公众号是如何涨到1万粉的? 用这篇文章作为参考答案吧。 我是2月份开始落笔写这个号的,那个时候我已经在玩ChatGPT了。 随着AI火出圈,我打算分享一些ChatGPT使用经…

【LeetCode每日一题】——628.三个数的最大乘积

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 排序 二【题目难度】 简单 三【题目编号】 628.三个数的最大乘积 四【题目描述】 给你一个…

2023最新版本Activiti7系列-源码篇-初始化过程

源码分析 1.设计模式 1.1 命令模式 https://dpb-bobokaoya-sm.blog.csdn.net/article/details/89115420 1.2 责任链模式 https://dpb-bobokaoya-sm.blog.csdn.net/article/details/89077040 2.初始化过程 2.1 入口代码 我们在SpringBoot项目中来看Activiti7的源码。首先要…