【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路


Ⅰ. 前置知识

0x00 并行加法器和减法器

如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能,可以通过将加法器和减法器以 N 个并行连接的方式,创建一个执行 N 位加法和减法运算的电路。

4 位二进制并行加法器

4 位二进制并行减法器

换句话说,4 位二进制并行加法器可以执行两个 4 位二进制数之间的加法运算,而 4 位二进制并行减法器可以执行两个 4 位二进制数之间的减法运算。如上图所示,4 位二进制并行加法器由四个并联的 1 位全加法器组成,而 4 位二进制并行减法器由四个并联的 1 位全减法器组成。

计算方法如下:

被加数和加数的各位能同时并行到达各位的输入端,而各位全加器的进位输入则是按照由低位向高位逐级串行传递的,各进位形成一个进位链。由于每一位相加的和都与本位进位输入有关,所以,最高位必须等到各低位全部相加完成并送来进位信号之后才能产生运算结果。显然,这种加法器运算速度较慢,而且位数越多,速度就越低。为了提高加法器的运算速度,必须设法减小或去除由于进位信号逐级传送所花的时间,使各位的进位直接由加数和被加数来决定,而不需依赖低位进位。根据这一思想设计的加法器称为超前进位(又称先行进位)二进制并行加法器。

0x01 超前进位(Look ahead carry)

超前进位是一种用于减少纹波进位链电路运算延迟的运算方法。在多位的加法运算中,原本是将进位转移到下一位的加法运算中,并按顺序进行计算,但通过求解所有位的进位表达式并进行计算,就可以一次性计算出每一位的进位,而无需转移前一位的进位,从而减少了门通过的延迟。下图显示了使用超前进位法计算 4 位加法运算的进位。

Look Ahead Carry (4bit Adder)

4bit Look-ahead Adder

Ⅱ. 实现 4 位二进制并行加法器

0x00 实现要求

解释 4 位二进制并行加法器的结果和仿真过程

0x01 代码和仿真代码

💬 Design source:

`timescale 1ns / 1psmodule BPA(input Cin,input A0,input A1,input A2,input A3,input B0,input B1,input B2,input B3,output C1,output C2,output C3,output C4,output S0,output S1,output S2,output S3);assign S0 = (A0^B0)^Cin;
assign C1 = (Cin&(A0^B0)) | (A0&B0);assign S1 = (A1^B1)^C1;
assign C2 = (C1&(A1^B1)) | (A1&B1);assign S2 = (A2^B2)^C2;
assign C3 = (C2&(A2^B2)) | (A2&B2);assign S3 = (A3^B3)^C3;
assign C4 = (C3&(A3^B3)) | (A3&B3);endmodule

💬 Testbench:

`timescale 1ns / 1psmodule BPA_tb;
reg Cin,A0,A1,A2,A3,B0,B1,B2,B3;
wire C1,C2,C3,C4,S0,S1,S2,S3;BPA u_BPA (.Cin(Cin ),.A0(A0 ),.A1(A1 ),.A2(A2 ),.A3(A3 ),.B0(B0 ),.B1(B1 ),.B2(B2 ),.B3(B3 ),.C1(C1 ),.C2(C2 ),.C3(C3 ),.C4(C4 ),.S0(S0 ),.S1(S1 ),.S2(S2 ),.S3(S3 )
);initial beginCin = 1'b0;A0 = 1'b0;A1 = 1'b0;A2 = 1'b0;A3 = 1'b0;B0 = 1'b0;B1 = 1'b0;B2 = 1'b0;B3 = 1'b0;
endalways@(Cin or A0 or A1 or A2 or A3 or B0 or B1 or B2 or B3) beginCin <= #10 ~Cin;A0 <= #20 ~A0;A1 <= #40 ~A1;A2 <= #80 ~A2;A3 <= #160 ~A3;B0 <= #320 ~B0;B1 <= #640 ~B1;B2 <= #1280 ~B2;B3 <= #2560 ~B3;
endinitial begin#5120$finish;
endendmodule

0x02 仿真结果

0x03 Schematic 图

📜 Schematic:

4 位二进制并行加法器是四个并行的 1 位全加法器,这意味着对每个位数执行一次加法器运算,然后将得到的和值传递给结果,并将进位值传递给下一位数加法器的进位。

Ⅲ. 实现 4 位二进制并行减法器

0x00 实现要求

解释 4 位二进制并行减法器的结果和仿真过程。

0x01 代码和仿真代码

💬 Design source:

`timescale 1ns / 1psmodule BPS(input bin,input A0,input A1,input A2,input A3,input B0,input B1,input B2,input B3,output b1,output b2,output b3,output b4,output D0,output D1,output D2,output D3);assign D0 = (A0^B0)^bin;
assign b1 = ((~(A0^B0))&bin) | ((~A0)&B0);assign D1 = (A1^B1)^b1;
assign b2 = ((~(A1^B1))&b1) | ((~A1)&B1);assign D2 = (A2^B2)^b2;
assign b3 = ((~(A2^B2))&b2) | ((~A2)&B2);assign D3 = (A3^B3)^b3;
assign b4 = ((~(A3^B3))&b3) | ((~A3)&B3);endmodule

💬 Testbench:

`timescale 1ns / 1psmodule BPS_tb;
reg bin,A0,A1,A2,A3,B0,B1,B2,B3;
wire b1,b2,b3,b4,D0,D1,D2,D3;BPS u_BPS (.A0(A0 ),.A1(A1 ),.A2(A2 ),.A3(A3 ),.B0(B0 ),.B1(B1 ),.B2(B2 ),.B3(B3 ),.bin(bin ),.b1(b1 ),.b2(b2 ),.b3(b3 ),.b4(b4 ),.D0(D0 ),.D1(D1 ),.D2(D2 ),.D3(D3 )
);initial beginbin = 1'b0;A0 = 1'b0;A1 = 1'b0;A2 = 1'b0;A3 = 1'b0;B0 = 1'b0;B1 = 1'b0;B2 = 1'b0;B3 = 1'b0;
endalways@(bin or A0 or A1 or A2 or A3 or B0 or B1 or B2 or B3) beginbin = #10 ~bin;A0 <= #20 ~A0;A1 <= #40 ~A1;A2 <= #80 ~A2;A3 <= #160 ~A3;B0 <= #320 ~B0;B1 <= #640 ~B1;B2 <= #1280 ~B2;B3 <= #2560 ~B3;
endinitial begin#5120$finish;
endendmodule

0x02 仿真结果

🚩 运行结果如下:

0x03 Schematic 图 

📜 Schematic:

4 位二进制并行减法器是四个并行的 1 位全减法器,这意味着对每个位数执行一次减法器运算,然后将所得差值传递给结果,并将借出值传递给下一个位数减法器的借入值。

📌 [ 笔者 ]   floyd
📃 [ 更新 ]   2023.12.3
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue学习笔记(八)——Vue组件-进阶(插槽、自定义指令)

一、Vue组件进阶 1.1 动态组件 多个组件使用同一个挂载点&#xff0c;并动态切换 效果如下: 1. 准备被切换的 - UserName.vue / UserInfo.vue 2个组件 2. 引入到UseDynamic.vue注册 3. 准备变量来承载要显示的"组件名" 4. 设置挂载点<component>&#xf…

Elasticsearch:对时间序列数据流进行降采样(downsampling)

降采样提供了一种通过以降低的粒度存储时间序列数据来减少时间序列数据占用的方法。 指标&#xff08;metrics&#xff09;解决方案收集大量随时间增长的时间序列数据。 随着数据老化&#xff0c;它与系统当前状态的相关性越来越小。 降采样过程将固定时间间隔内的文档汇总为单…

VC++调试QT源码

环境&#xff1a;vs2017 qt 5.14.2 1&#xff1a;首先我们需要选择我们的源码路径 右键解决方案-》属性-》通用属性-》调试源文件-》在窗口内添加QT下载时的源码**.src文件夹**&#xff0c;这里最好把源码 D:\software\QT\path\5.14.2\Src 源文件里面的Src文件做一个备份出来…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

MFC 绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线.

MFC 绘制三种不同圆形以及绘制正弦函数曲线 本文使用visual Studio MFC 平台实现绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线. 关于基础工程的创建请参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-vis…

百度收录批量查询工具,免费SEO优化排名工具

拥有一个在搜索引擎中得到良好收录的网站对于个人和企业都至关重要。而百度&#xff0c;作为中国最大的搜索引擎&#xff0c;其收录情况直接影响着网站的曝光度和流量。 百度搜索引擎是中文用户获取信息的重要途径之一。而在这个竞争激烈的网络环境中&#xff0c;了解自己网站…

重启路由器可以解决N多问题?

为什么重启始终是路由器问题的首要解决方案? 在日常的工作学习工作中,不起眼的路由器是一种相对简单的设备,但这仍然是我们谈论的计算机。 这种廉价的塑料外壳装有 CPU、随机存取存储器 (RAM)、只读存储器 (ROM) 和许多其他组件。 该硬件运行预装的软件(或固件)来管理连接…

vue之mixin混入

vue之mixin混入 mixin是什么&#xff1f; 官方的解释&#xff1a; 混入 (mixin) 提供了一种非常灵活的方式&#xff0c;来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时&#xff0c;所有混入对象的选项将被“混合”进入该组件本身的…

严蔚敏数据结构题集 p18(2.25——2.30)(c语言代码实现)

目录 2.25假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。试对顺序表编写求C的算法。 2.26要求同2.25题。是对单链表编写求C的算法 2.…

[架构之路-256]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件系统不同层次的复用与软件系统向越来越复杂的方向聚合

目录 前言&#xff1a; 一、CPU寄存器级的复用&#xff1a;CPU寄存器 二、指令级复用&#xff1a;二进制指令 三、过程级复用&#xff1a;汇编语言 四、函数级复用&#xff1a;C语言 五、对象级复用&#xff1a;C, Java, Python 六、组件级复用 七、服务级复用 八、微…

Swift下如何使用#if条件编译

一、OC使用条件编译 OC中可以使用宏定义&#xff0c;再使用条件编译 #define USER_CUSTOM使用 #if USER_CUSTOM //其他代码 #endif二、Swift使用条件编译 Swift 不像ObjectC一样&#xff0c;通过定义一个变量&#xff0c;然后使用**#if #endif** 方法。swift需要设置一下才能…

2 文本分类入门:TextCNN

论文链接&#xff1a;https://arxiv.org/pdf/1408.5882.pdf TextCNN 是一种用于文本分类的卷积神经网络模型。它在卷积神经网络的基础上进行了一些修改&#xff0c;以适应文本数据的特点。 TextCNN 的主要思想是使用一维卷积层来提取文本中的局部特征&#xff0c;并通过池化操…

搭建Appium工具环境

1、安装Java Development Kit&#xff08;JDK&#xff09; 前往Oracle官网下载JDK。 在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到最新版本的JDK。根据操作系统选择适合的版本&#xff0c;并根据指示下载安装程序。 安装JDK。运行下载的安…

Unittest单元测试之unittest用例执行顺序

unittest用例执行顺序 当在一个测试类或多个测试模块下&#xff0c;用例数量较多时&#xff0c;unittest在执行用例 &#xff08;test_xxx&#xff09;时&#xff0c;并不是按从上到下的顺序执行&#xff0c;有特定的顺序。 unittest框架默认根据ACSII码的顺序加载测试用例&a…

从薛定谔的猫——量子理论基础

在介绍量子理论基础之前&#xff0c;先介绍一下薛定谔的猫的故事&#xff0c;这个故事可能大多数朋友并不陌生&#xff0c;下面首先回顾一下&#xff1a; 薛定谔的猫是一个在量子力学中用来说明量子叠加态和测量结果的思维实验。这个思维实验最早由物理学家Erwin Schrdinger在1…

【技术干货】宇视IPC音频问题解决步骤

近期技术人员从宇视官网下载sdk进行二次开发时&#xff0c;在启动实时直播&#xff0c;并通过回调函数拿到流数据&#xff0c;发现没有音频流数据。 通过下面的数据发现&#xff0c;codeType此字段一直是28&#xff0c;代表的是H.264数据&#xff0c;但未没发现有音频的数据包…

【Altera】Cyclone10 FPGA DDR3使用

目录 开发板 硬件 框图 原理图 测试工具 DDR IP核配置 调试及遇到的问题 读写仲裁时序 问题1.拉高read后&#xff0c;wait一直没反应 问题2.DDR校正不过的一个可能性 延伸学习 开发板 Intel官方提供c10的开发套件&#xff1a;Intel Cyclone 10 GX FPGA Development …

替代升级虚拟化 | ZStack Cloud云平台助力中节能镇江公司核心业务上云

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

Selenium——isDisplayed()、isEnabled()、isSelected()

判断页面是否存在某元素 Selenium没有直接提供判断是否存在的方法&#xff0c;可以使用findElements返回的数量判断&#xff1b;或者判断findElement是否抛出异常 webDriver.findElements(By.xpath("(//div[classel-button-group]//button)[1]")).size()isDisplaye…

mysql-日期和时间函数

1.获取日期、时间 SELECT CURDATE(),CURTIME(),NOW(),UTC_DATE(),UTC_TIME() FROM dual; 2.日期与时间戳的转换 SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),FROM_UNIXTIME(UNIX_TIMESTAMP()) FROM dual; 3.获取月份、星期、星期数、天数等函数 SELECT YEAR(CURDATE()),MON…