数字IC前端学习笔记:数字乘法器的优化设计(华莱士树乘法器)

news2024/11/19 9:29:47

相关阅读

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


        进位保留乘法器依旧保留着阵列的排列规则,只是进位是沿斜下角,如果能使用树形结构来规划这些进位保留加法器,就能获得更短的关键路径延迟和更小的器件开销,这种结构的乘法器被称为华莱士树乘法器。图1所示为使用四位华莱士树乘法器的例子,图中总共有十六个部分积,分别通过被乘数和乘数的各位相与(通过与门)得到,图中的斜杠/代表一个全加器,连接的分别是右上角的本位和以及左下角给高位的进位,带反斜杠\的/表示是半加器。

图1 华莱士树乘法器的覆盖过程

        第一阶段华莱士将所有的部分积按行,每三行分组,在组内使用保留进位加法器(有全加器和半加器两种)压缩,当组内某一列含有三个部分积,则使用全加器压缩;若含有两个部分积,则使用半加器压缩,含有一个部分积,则不压缩。分组时的多余行不进行压缩,直接传递到下一阶段(在这里指的是第四行)。       

        下一阶段中,继续三行分一组,进行压缩,直到最后得到两行部分积,此时使用一个普通的多位传播进位加法器或者超前进位加法器等进行(两数相加)向量合并。可以看到只需要两个阶段,十六个部分积就可被压缩至两行。这个结构使用了五个全加器和三个半加器(不包括最后的向量合并器)。 

        具体的Verilog代码实现见附录,Modelsim软件仿真如图2所示。使用Synopsis的综合工具Design Compiler综合的结果如图3所示,综合使用了0.13μm工艺库

图2 华莱士树乘法器仿真结果

图3 华莱士树乘法器综合结果

        在Design Compiler中使用report_timing命令,可以得到关键路径的延迟,如图4所示,可以看出延迟仅有1.39ns。性能优于进位保留乘法器,远由于普通的阵列乘法器,这是由于此时将部分分组并分别处理,结果大约能在三级加法器的延迟后得到。

图4 华莱士树乘法器关键路径报告

        在Design Compiler中使用report_area命令,报告所设计电路的面积占用情况,如图5所示,可以看到这个面积略大于阵列乘法器,这是由最后的向量合并加法器贡献的,所以这个面积随着数据位宽的增加不会迅速变大。如果不考虑向量合并加法器的影响,阵列乘法器使用了八个全加器和四个半加器,进位保留乘法器使用了六个全加器和六个半加器,而华莱士树乘法器仅仅用了五个全加器和三个半加器,该实现减少了位宽较大乘法器的硬件开销,同时对传播延时的优化也很显著。

 图5 华莱士树乘法器面积报告

        进位保留乘法器的Verilog代码如下所示。

module Wallace_Multiplier (
    input      [3:0]    A      ,
    input      [3:0]    B      ,
    output  [7:0]    Sum
);

    wire [3:0] partial_product [3:0];  

    wire [3:0] W_level1_c,W_level1_carry;
    wire [3:0] W_level2_c,W_level2_carry;


    assign partial_product[0]=B[0]?A:0;
    assign partial_product[1]=B[1]?A:0;
    assign partial_product[2]=B[2]?A:0;
    assign partial_product[3]=B[3]?A:0;

    // level1
    Adder_half adder_half_u1 (
        .Mult1    (partial_product[0][1]),
        .Mult2    (partial_product[1][0]),
        .Res    (Sum[1]),
        .Carry(W_level1_carry[0])
    ); 

    Adder adder_u1 (
        .Mult1     (partial_product[0][2]),
        .Mult2     (partial_product[1][1]),
        .I_carry (partial_product[2][0]),
        .Res     (W_level1_c[1]),
        .Carry (W_level1_carry[1])
    );

    Adder adder_u2 (
        .Mult1     (partial_product[0][3]),
        .Mult2     (partial_product[1][2]),
        .I_carry (partial_product[2][1]),
        .Res     (W_level1_c[2]),
        .Carry (W_level1_carry[2])
    );

    Adder_half adder_half_u2 (
        .Mult1    (partial_product[1][3]),
        .Mult2    (partial_product[2][2]),
        .Res    (W_level1_c[3]),
        .Carry(W_level1_carry[3])
    ); 

    // level2
    Adder_half adder_half_u3 (
        .Mult1    (W_level1_c[1]),
        .Mult2    (W_level1_carry[0]),
        .Res    (Sum[2]),
        .Carry(W_level2_carry[0])
    ); 

    Adder adder_u3 (
        .Mult1     (W_level1_c[2]),
        .Mult2     (W_level1_carry[1]),
        .I_carry (partial_product[3][0]),
        .Res     (W_level2_c[1]),
        .Carry (W_level2_carry[1])
    );

    Adder adder_u4 (
        .Mult1     (W_level1_c[3]),
        .Mult2     (W_level1_carry[2]),
        .I_carry (partial_product[3][1]),
        .Res     (W_level2_c[2]),
        .Carry (W_level2_carry[2])
    );

    Adder adder_u5 (
        .Mult1     (W_level1_carry[3]),
        .Mult2     (partial_product[2][3]),
        .I_carry (partial_product[3][2]),
        .Res     (W_level2_c[3]),
        .Carry (W_level2_carry[3])
    );
    assign Sum[7:3]={partial_product[3][3],W_level2_c[3:1]}+{W_level2_carry[3:0]};
    assign Sum[0]=partial_product[0][0];
endmodule

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

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

相关文章

Postman接口测试学习之常用断言

什么是断言? 断言——就是结果中的特定属性或值与预期做对比,如果一致,则用例通过,如果不一致,断言失败,用例失败。断言,是一个完整测试用例所不可或缺的一部分,没有断言的测试用例…

linux虚拟机查看防火墙状态

linux虚拟机查看防火墙状态 在Linux虚拟机中,你可以通过以下几种方法查看防火墙状态: 查看iptables防火墙状态 对于使用iptables防火墙的Linux系统,可以使用以下命令查看防火墙状态: sudo iptables -L -v -n查看firewalld防火墙…

javaee ssm框架项目整合thymeleaf 项目结构图

搭建ssm框架项目 参考这篇博客 引入thymeleaf 引入jar包 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…

Redis-分布式锁

分布式锁相关内容 超卖问题切入可以使用互斥锁给先获取到锁的线程加锁吗&#xff1f;使用redis分布式锁解决超卖问题setnx命令实现分布式锁为什么需要设置过期时间&#xff1f;Redis实现分布式锁如何合理控制锁的有效时长 redisson实现分布式锁 超卖问题切入 我们先来看一个项目…

nodejs+vue临沂特色产品销售平台elementui

从实际工作出发&#xff0c;对过去的临沂特色产品销售平台存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息 提高了工作的效率。 随着信息化社会的形成和微电子技术日新月异的发展&#xff0c;临沂特色产品销售平台是针对目前临沂特色产品销售…

el-date-picker增加默认值 修改样式

预期效果 默认是这样的 但希望是直接有一个默认的当天日期&#xff0c;并且字体颜色啥的样式也要修改&#xff08;在这里假设今天是2023/10/6 功能实现 踩了坑挺多坑的&#xff0c;特此记录 官方文档 按照官方的说明&#xff0c;给v-model绑定一个字符串就可以了 在j…

操作符 | C语言中操作符详解 | 操作符的优先级 | 移位操作法的使用方式

一、算术操作符&#xff1a;、-、*、/、% 算术操作符其实在平时生活中&#xff0c;也遇到很多&#xff0c;并且这五类操作符基本很常见&#xff0c;而他们的作用与数学所学习的功能是一样的。但是“/”除号操作符与“%”取模操作符有些不同。下面就以这两个的操作符为主要说起…

Tomcat 介绍与 jspgou 部署

一、虚拟机简介 1、Java 虚拟机 (1) 虚拟机&#xff1a; 虚拟机&#xff08;Virtual Machine&#xff09;是一种软件或硬件实体&#xff0c;它模拟了一个独立的计算环境&#xff0c;可以在其上运行应用程序。 虚拟机可分为系统虚拟机和程序虚拟机&#xff1a; ● 系统虚拟…

Mall脚手架总结(一)——SpringSecurity实现鉴权认证

前言 在结束理论知识的学习后&#xff0c;荔枝开始项目学习&#xff0c;这个系列文章将围绕荔枝学习mall项目过程中总结的知识点来梳理。本篇文章主要涉及如何整合Spring Security和JWT实现鉴权认证的功能&#xff01;希望能帮助到一起学习mall项目的小伙伴~~~ 文章目录 前言 …

【Pytorch笔记】6.Transforms

pytorch官方文档 - transforms transforms需要使用计算机视觉工具包&#xff1a;torchvision。 torchvision.transforms&#xff1a;常用的图像预处理方法&#xff1b; torchvision.datasets&#xff1a;常用数据集的dataset实现&#xff0c;如MNIST、CIFAR-10、ImageNet等&am…

基于python编写的excel表格数据标记的exe文件

目录 一、需求&#xff1a; 二、思路&#xff1a; 三、工具 四、设计过程 &#xff08;一&#xff09;根据需要导入相关的图形界面库 &#xff08;二&#xff09;创建图形窗口 &#xff08;三&#xff09;标签设计 &#xff08;四&#xff09;方法按钮设计 &#xff0…

值得推荐的阿里巴巴Java开源项目

说明&#xff1a;以下都是项目中使用过的&#xff0c;后续将持续更新&#xff01;&#xff01;&#xff01; 1、开源 Java 诊断工具 Arthas Arthas&#xff08;阿尔萨斯&#xff09;是阿里巴巴开源的 Java 诊断工具&#xff0c;深受开发者喜爱。 Arthas 采用命令行交互模式&…

「专题速递」JPEG AI、端到端图像编码的标准化及产品落地、深度学习

从最初的追随者到如今的领跑者&#xff0c;中国的超高清视频编解码技术已经走过20年的漫长征程。从开始制定不同的视频编解码标准&#xff0c;如H.264/265、AV1、VVC、AVS&#xff0c;再到积极地探索基于AI的视频编码技术。视频编解码——这一将视频数据高效压缩、传输和解码还…

软件项目和安全项目案例(承接软件和安全项目合作)

公司有专业的软件开发团队和安全研究团队&#xff0c;具备完善的安全测试、安全培训、安全开发、安全服务等安全解决方案&#xff0c;可以助力政企研发专业、高效、安全、稳定的软件产品&#xff0c;欢迎项目咨询、商务合作&#xff01; 一、软件开发项目咨询 1.承接车载等终…

了解了spring mvc web容器中一个http请求的全过程,能给我们提升多少武力值

继上一篇文章什么&#xff0c;这年头还有人不知道404_cow__sky的博客-CSDN博客后&#xff0c;有些同学发现&#xff0c;学了之后有啥用&#xff0c;有什么实际场景可以用到吗&#xff1f;程序员就是这样&#xff0c;不习惯于纸上谈兵&#xff0c;给一个场景show me code才是最实…

免交互输入

here document 免交互 对文本内容进行操作&#xff1a; 标准输入的替代品。 语法格式 命令 <<标记 内容 标记 命令&#xff1a;linux 命令 注意事项&#xff1a; 1.标记可以使用的任意字符。(字母和数字&#xff0c;一般不适用特殊字符。以字母开EOF) 2.结尾的标记一…

PHP8中的魔术方法-PHP8知识详解

在PHP 8中&#xff0c;魔术方法是一种特殊的方法&#xff0c;它们以两个下划线&#xff08;__&#xff09;开头。魔术方法允许您定义类的行为&#xff0c;例如创建对象、调用其他方法或访问和修改类的属性。以下是一些常见的魔术方法&#xff1a; __construct(): 类的构造函数…

【LeetCode高频SQL50题-基础版】打卡第1天:第1~10题

文章目录 【LeetCode高频SQL50题-基础版】打卡第1天&#xff1a;第1~10题⛅前言 可回收且低脂的产品&#x1f512;题目&#x1f511;题解 寻找用户推荐人&#x1f512;题目&#x1f511;题解 大的国家&#x1f512;题目&#x1f511;题解 文章浏览I&#x1f512;题目&#x1f5…

【计算机组成 课程笔记】7.3 高速缓存 Cache

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 5 - 705-高速缓存的工作原理&#xff08;16-00--&#xff09;_哔哩哔哩_bilibili 在【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中提到&#xff0c;因为CPU和内存的速度差距越来…

R语言12篇文章带您深入了解限制立方条图(Restricted cubic spline,RCS)

临床上&#xff0c;因变量和临床的结局有时候不是线性关系&#xff0c;而回归模型有一个重要的假设就是自变量和因变量呈线性关联&#xff0c;因此非线性关系模型用回归分析来拟合受到限制。因此&#xff0c;一个更好的解决方法是拟合自变量与因变量之间的非线性关系&#xff0…