全加器(多位)的实现

一,半加器

  1. 定义
    半加器(Half Adder)是一种用于执行二进制数相加的简单逻辑电路。它可以将两个输入位的和(Sum)和进位(Carry)计算出来。
    半加器有两个输入:A 和 B,分别代表要相加的两个二进制位。它的输出由两个部分组成:
    1.和(Sum):表示 A + B 的个位数结果。
    2.进位(Carry):表示 A + B 的十位数结果是否需要进位到下一位。

  2. 真值表
    在这里插入图片描述

  3. 逻辑表达式
    根据真值表可知,当 A 和 B 的输入都为 0 时,Sum 和 Carry 均为 0;当 A 和 B 的输入中有一个为 1 时,Sum 为 1,Carry 为 0;当 A 和 B 的输入都为 1 时,Sum 为 0,Carry 为 1。所以其逻辑表达式为:
    Sum = A ^ B
    Carry = A & B

  4. 逻辑电路

在这里插入图片描述

  1. Verilog代码实现
module half_adder(input   wire        a_in    ,input   wire        b_in    ,   output  wire         count   ,//进位output  wire         sum      //半加和数
);assign count = a_in & b_in;
assign sum   =  a_in ^ b_in;// assign = {count,sum} = a_in + b_in ;
endmodule
  1. tb文件
`timescale 1ns/1ns
module tb_half_adder();reg     in_a;
reg     in_b;
wire    count;
wire    sum;initial beginin_a = 0;in_b = 0;#10;repeat(100)beginin_a =($random);in_b =($random);#10;end#10;$stop;
endhalf_adder u_half_adder(.a_in    (in_a),.b_in    (in_b),   .count   (count),//进位.sum     (sum) //半加和数
);endmodule
  1. 仿真波形
    在这里插入图片描述

二,全加器

  1. 定义
    全加器(Full Adder)是一种用于执行二进制数相加的数字逻辑电路。与半加器相比,全加器能够处理两个输入位之间的进位,从而实现多位二进制数的相加运算。
    一个全加器有三个输入:A、B 和进位(Carry-In,通常用Cin表示),代表要相加的两个二进制位和上一位的进位。它的输出由两部分组成:
    1.和(Sum):表示 A + B + Cin 的个位数结果。
    2.进位(Carry-Out,通常用Cout表示):表示 A + B + Cin 的十位数结果是否需要进位到下一位。
  2. 真值表
    在这里插入图片描述
  3. 逻辑表达式
    全加器的逻辑表达式可以通过使用逻辑门(AND、XOR)来表示。以下是全加器的逻辑表达式:
    Sum = A ^ B ^ Cin
    Cout = (A ^ B)&Cin + A&B
  4. 逻辑电路(这里借用一下别人的图阿里嘎多)

在这里插入图片描述
由两个半加器组成全加器
在这里插入图片描述

  1. Verilog代码
module full_adder(input   wire    a_in,input   wire    b_in,input   wire    c_in,output  wire    count,output  wire    sum
);// reg  count_r;
// reg  sum_r;assign sum = a_in ^ b_in ^ c_in;
assign count = (a_in ^ b_in)&c_in | a_in&b_in;//{count , sum} = a_in + b_in + c_in
endmodule
  1. tb文件
module full_adder(input   wire    a_in,input   wire    b_in,input   wire    c_in,output  wire    count,output  wire    sum
);// reg  count_r;
// reg  sum_r;assign sum = a_in ^ b_in ^ c_in;
assign count = (a_in ^ b_in)&c_in | a_in&b_in;//{count , sum} = a_in + b_in + c_in
endmodule
  1. 仿真波形
    在这里插入图片描述

三,多位全加器

  1. 个人理解
    对于多位全加器我的理解是,相当于多位数的每一位都是一个全加器,所以对于多位全加器,就是相当于是多个全加器的连接。
  2. verilog代码实现(generate)
module N_adder #(parameter N = 2) (input       [N-1:0] a_in,input       [N-1:0] b_in,input               cin,output      [N-1:0] sum,output              count
);wire  [N:0]    c;genvar i;
generatefor (i = 0;i<N ; i=i+1) begin : adder_full_nfull_adder     full_adder_inst (.a_in   (a_in[i]),.b_in   (b_in[i]),.c_in    (c[i]),.sum    (sum[i]),.count  (c[i+1])
);end
endgenerateassign c[0] = cin;
assign count = c[N];endmodule
  1. tb文件
`timescale 1ns/1ns
module N_adder_tb ();
parameter N = 5;
reg         [N-1:0] a_in;
reg         [N-1:0] b_in;
reg                 cin;
wire        [N-1:0] sum;
wire                count;initial begincin = 1'b0;#5;repeat(20)begina_in =($random)%5;b_in =($random)%5;#(5);end#(10)$stop;
end
N_adder #(.N(N)) N_adder_inst (.a_in   (a_in),.b_in   (b_in),.cin    (cin),.sum    (sum),.count  (count)
);
endmodule
  1. 仿真波形
    在这里插入图片描述

四,总结

对于全加器,还是比较好理解的,主要是对组合逻辑的考察和理解,只要对组合逻辑有一定的理解我相信全加器还是比较好理解的。

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

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

相关文章

MySQL基础扎实——MySQL中有那些不同的表格

表格类型 在MySQL中&#xff0c;常见的表格类型有以下几种&#xff1a; MyISAM&#xff1a;是MySQL默认的表格类型&#xff0c;具有较高的性能和较小的存储空间占用。但是&#xff0c;MyISAM不支持事务、崩溃恢复和数据行级锁定。 InnoDB&#xff1a;是MySQL提供的一个更强大…

Redis实现分布式锁

文章目录 4、分布式锁4.1 、基本原理和实现方式对比4.2 、Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情况说明4.5 解决Redis分布式锁误删问题4.6 分布式锁的原子性问题4.7 Lua脚本解决多条命令原子性问题4.8 利用Java代码调用Lua脚本改造分布式锁…

MySQL | 常用命令示例

MySQL | 常用命令示例 一、启停MySQL数据库服务二、连接MySQL数据库三、创建和管理数据库四、创建和管理数据表五、数据备份和恢复六、查询与优化 MySQL是一款常用的关系型数据库管理系统&#xff0c;广泛应用于各个领域。在使用MySQL时&#xff0c;我们经常需要编写一些常用脚…

python多线程—终止子线程

总体思路 1、获取需要终止的子线程id 2、根据子线程id&#xff0c;终止子线程。 过程 获取子线程id&#xff1a; import threading Thread_id threading.get_ident() # 获取子线程的id值线程终止函数 def async_raise(Thread_id, exctype):"""raises th…

【数据结构】【王道408】——PPT截图与思维导图

自用视频PPT截图 视频网址王道B站链接 23考研 408新增考点&#xff1a; 并查集&#xff0c;红黑树 2023年408真题数据结构篇 408考纲解读 考纲变化 目录 第一章 绪论第二章 线性表顺序表单链表双链表循环链表静态链表差别 第三章 栈 队列 数组栈队列栈的应用数组 第四章 串第五…

软考A计划-系统集成项目管理工程师-项目质量管理-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【单链表OJ题:删除链表中等于给定值 val 的所有节点】

1.删除链表中等于给定值 val 的所有节点 题目来源 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 /*** Definition for singly-linked list.* struct ListNode {* int val;* s…

小程序UV:衡量用户规模与活跃度的重要指标

什么是UV UV是Unique Visitor&#xff08;独立访客&#xff09;的缩写&#xff0c;指的是在特定时间段内访问某个网站、应用或平台的独立用户数量。UV是根据设备、IP地址、Cookie等来识别不同的用户&#xff0c;对于相同的用户多次访问&#xff0c;只计算为一个UV。UV是衡量网…

c#栈应用之实现四则运算

前言&#xff1a;四则运算&#xff0c;大家都不陌生&#xff0c;在上小学的时候&#xff0c;数学中学到过的知识&#xff0c;那么如何在程序中实现呢&#xff1f;下面&#xff0c;我们就用程序来实现9(3-2)*(5-3)/4*3&#xff0c;这个算式的值。计算的时候&#xff0c;有一个规…

流数据湖平台Apache Paimon(一)概述

文章目录 第1章 概述1.1 简介1.2 核心特性1.3 基本概念1.3.1 Snapshot1.3.2 Partition1.3.3 Bucket1.3.4 Consistency Guarantees一致性保证 1.4 文件布局1.4.1 Snapshot Files1.4.2 Manifest Files1.4.3 Data Files1.4.4 LSM Trees 第1章 概述 1.1 简介 Flink 社区希望能够将…

RocketMQ重复消费的解决方案::分布式锁直击面试!

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

css实现有缺口的border

css实现有缺口的border 1.问题回溯2.css实现有缺口的border 1.问题回溯 通常会有那种两个div都有border重叠在一起就会有种加粗的效果。 div1,div2,div3都有个1px的border&#xff0c;箭头标记的地方是没有处理解决的&#xff0c;很明显看着是有加粗效果的。其实这种感觉把di…

【Java从入门到大牛】集合进阶上篇

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Java从入门到大牛 &#x1f320; 首发时间&#xff1a;2023年7月29日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43…

IntelliJ IDEA流行的构建工具——Gradle

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 如…

基于java SpringBoot和HTML的博客系统

随着网络技术渗透到社会生活的各个方面&#xff0c;传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网&#xff0c;可以在本地或异地进行通信&#xff0c;大大提高了通信和交换的灵活性。在当今高速发展的互联网时…

如何使用Python进行数据挖掘?

使用Python进行数据挖掘需要掌握以下几个关键步骤&#xff1a; 数据收集&#xff1a;首先&#xff0c;你需要获取你要进行数据挖掘的数据。可以从公共数据集、API、数据库等各种来源收集数据。 数据清洗&#xff1a;清洗数据是一个重要的步骤&#xff0c;它包括去除重复数据、…

【达哥讲网络】第3集:数据交换的垫基石——二层交换原理

专业的网络工程师在进行网络设计时&#xff0c;会事先规划好不同业务数据的转发路径&#xff0c;一方面是为了满足用户应用需求&#xff0c;另一方面是为了提高数据转发效率、充分利用各设备/各链路的硬件或带宽资源。在进行网络故障排除时&#xff0c;理顺各路数据的转发路径也…

K8s:K8s 20个常用命令汇总

写在前面 博文内容为节译整理&#xff0c;用于温习理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0…

【Oracle】session_cached_cursors和open_cursors的调整

在进行数据迁移&#xff0c;数据导入慢&#xff0c;经查询可能为session_cached_cursors和open_cursors配置异常导致&#xff0c;遂调整参数值 查看参数 -查看session_cached_cursors SQL> show parameter session_cached_cursors;查看使用情况 SELECT session_cached_c…

【Luogu】 P5176 公约数

题目链接 点击打开链接 题目解法 首先证明一个结论&#xff1a; ( i j , i k , j k ) ( i , j ) ( i , k ) ( j , k ) ( i , j , k ) (ij,ik,jk)\frac{(i,j)(i,k)(j,k)}{(i,j,k)} (ij,ik,jk)(i,j,k)(i,j)(i,k)(j,k)​ 考虑对于 i , j , k i,j,k i,j,k 的质因子 p p p 的次…