【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.mzph.cn/news/195790.shtml

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

相关文章

内存是如何工作的

一、什么是内存 从外观上辨识&#xff0c;它就是内存条&#xff1b;从硬件上讲&#xff0c;它叫RAM&#xff0c;翻译过来叫随机存储器。英文全称&#xff1a;Random Access Memory。它也叫主存&#xff0c;是与CPU直接交换数据的内部存储器。其特点是读写速度快&#xff0c;不…

java开发之个微机器人的实现

简要描述&#xff1a; 二次登录 请求URL&#xff1a; http://域名地址/secondLogin 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wcId…

【每日一题】从二叉搜索树到更大和树

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;中序遍历的反序方法二&#xff1a;后缀数组 写在最后 Tag 【中序遍历】【二叉树】【2023-12-04】 题目来源 1038. 从二叉搜索树到更大和树 题目解读 在二叉搜索树中&#xff0c;将每一个节点的值替换成树中大于等于该…

根文件系统lib库添加与初步测试

一. 简介 我们在编译 busybox源码时&#xff0c;选择的是动态编译&#xff0c;所以&#xff0c;制作生成的 根文件系统中/bin或 /sbin目录下软件运行时会调用到一些库文件的。库文件就是交叉编译器的库文件。 前面我们编译 busybox源码时&#xff0c;选择动态编译&#xff0…

NPS内网穿透教程

1.简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协议&#xff08;访问内网网站、本地支付接口调试、ssh访问、远程桌面&#xff0c;内网dns解析等等……&#xff09;&#xff0c;此外还支持内网ht…

安卓1.0明显是基于linux内核开发的,安卓1.0是不是linux套壳?

安卓1.0明显是基于linux内核开发的&#xff0c;安卓1.0是不是linux套壳&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「安卓开发资料从专业入门到高级教程工具包」&#xff0c;点个关注&…

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer

大数据集群增加数据盘&#xff0c;平衡数据盘HDFS Disk Balancer 官网&#xff1a;https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.jsonhdfs diskbalancer -q…

IDEA2023找不到 Allow parallel run

我的idea版本&#xff1a;2023.1.4 第一步&#xff1a;点击Edit Configrations 第二步&#xff1a;点击Modify options 第三步&#xff1a;勾选Allow multiple instances 最后点击Apply应用一下 ok,问题解决&#xff01;

SSM项目实战-登录验证成功并路由到首页面,Vue3+Vite+Axios+Element-Plus技术

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/sysUser.js import request from "../util/request.js";export const login (…

Mysql日志

文章目录 1. 日志类型2. bin log2.1 写入机制2.2 binlog与redolog对比2.3 两阶段提交 3. 中继日志 1. 日志类型 这 6 类日志分别为&#xff1a; 慢查询日志&#xff1a; 记录所有执行时间超过long_query_time的所有查询&#xff0c;方便我们对查询进行优化。 通用查询日志&am…

在sCrypt网站上铭刻Ordinals

sCrypt发布了一个新的Ordinals铭刻工具&#xff0c;连接Panda Wallet后即可使用。你可以观看我们录制的视频教程&#xff0c;获得更多细节。 铭刻工具同时支持BSV主网&#xff08;mainnet&#xff09;和测试网&#xff08;testnet&#xff09;&#xff0c;你可以在我们的官方网…

手写VUE后台管理系统8 - 配置404NotFound路由

设置404页面 配置路由404页面 配置路由 这里配置了两个路由&#xff0c;一个是主页&#xff0c;另外一个则匹配任意路由显示为404页面。因为只配置了两个路由&#xff0c;如果路径没有匹配到主页&#xff0c;则会被自动导向到404页面&#xff0c;这样就可以实现整站统一的404页…

「Linux」使用C语言制作简易Shell

&#x1f4bb;文章目录 &#x1f4c4;前言简易shell实现shell的概念系统环境变量shell的结构定义内建命令完整代码 &#x1f4d3;总结 &#x1f4c4;前言 对于很多学习后端的同学来讲&#xff0c;学习了C语言&#xff0c;发现除了能写出那个经典的“hello world”以外&#xff…

142873-41-4脂质过氧化抑制剂1-星戈瑞

142873-41-4脂质过氧化抑制剂1 英文名称&#xff1a;Lipid peroxidation inhibitor 1 中文名称&#xff1a;脂质过氧化抑制剂 化学名称&#xff1a;2,4,6,7-四甲基-2-[(4-苯基哌啶-1-基)甲基]-3H-1-苯并呋喃-5-胺 CAS&#xff1a;142873-41-4 外观&#xff1a;固体粉末 分…

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式 特点: 电源电压降到 1.8V 时仍能正常工作交越失真小 静态电流小可作桥式或立体声式功放应用外围元件少通道分离度高 开机和关机无冲击噪声软限幅

RT-Thread 内存管理

在计算机系统中&#xff0c;通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机存储器&#xff09;&#xff0c;可以把它理解为电脑…

微信公众号端在线客服系统源码 聊天记录云端实时保存 附带完整的搭建教程

随着社交媒体的普及&#xff0c;越来越多的用户通过微信公众号与企业进行沟通。因此&#xff0c;开发一款基于微信公众号的在线客服系统&#xff0c;可以帮助企业更好地服务用户&#xff0c;提高客户满意度。同时&#xff0c;为了解决聊天记录的存储和管理问题&#xff0c;我们…

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见?

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「安卓开发资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;…

2023.12.4 GIT的概念和组成

目录 1.git的介绍 2.git的历史 开发者&#xff1a;Linus Torvalds Linux的创始人 3.git和svn的对比 svn:集中式管理 git:分布式管理 4.git管理的组成结构 1.git的介绍 git是项目版本管理工具,能自动的将多个版本进行管理存储,类似于快照,多个人共享版本 git的诞生:分布式…

行为型剩余的模式

1.中介者模式 package com.jmj.pattern.mediator;public abstract class Mediator {public abstract void constact(String message,Person person); }package com.jmj.pattern.mediator;public class MediatorStructure extends Mediator{private HouseOwner houseOwner;priva…