首页 > 其他分享 >4位全加器的实现

4位全加器的实现

时间:2024-04-04 14:32:56浏览次数:23  
标签:输出 全加器 cout 实现 sum cin 进位

门电路

在这里插入图片描述

与门(AND)

只有当所有输入都为 1 时,输出才为 1,否则输出为 0

符号为“∧”。例如,当我们需要检测某个人的身份证号和密码是否都正确时,就可以使用与门电路

ABQ
000
010
100
111
或门(OR)

只要有一个输入为 1,输出就为 1,否则输出为 0。符号为“∨”

例如,当我们需要检测某个人是否拥有某个权限时,就可以使用或门电路

ABQ
000
011
101
111
非门(NOT)

只有一个输入,输出与输入相反。符号为“¬”

例如,当我们需要判断某个人是否为非法用户时,就可以使用非门电路

AQ
01
11
或非门(NOR)

当所有的输入都是0时,输出为1,其他情况输出为0

ABQ
001
010
100
110
异或门(XOR)

两个输入不同时,输出为1,否则输出为0

ABQ
000
011
101
110
与非门(NAND)

当所有的输入都是1时,输出为0,其他情况输出为1

ABQ
001
011
101
110

二进制加法

1001
+0101
进位0010
1110

从表格可知 异或门就是一个最简单的整数加法,但是还需要一个记录进位的门电路

半加器

半机器其实就是 异或门 + 与门而得到的。为了记录进位状态特地添加的
@w=600

全加器

半加器可以解决个位的加法问题,但是如果放到二位上来说,就不够用

二位用一个半加器不能计算完成的原因也很简单。因为二位除了一个加数和被加数之外,还需要加上来自个位的进位信号,一共需要三个数进行相加,才能得到结果

所以需要用两个半加器和一个或门,就能组成一个全加器
在这里插入图片描述

4位全加器

在这里插入图片描述

计算: 10(b1010) + 7(b0111) = 17(b10001)

图片中实现了对应的加法: 进位信号(Y4) . 累加值(s4) . 累加值(s3) . 累加值(s1) . 累加值(s0)

Verilog 实现 4位全加器

项目地址

加法器的实现

4位全加器代码

module adder4(a, b, cin, sum, cout);
  input [3:0] a, b;   // 4位输入a和b
  input cin;          // 进位
  output [3:0] sum;   // 4位输出和
  output cout;        // 进位输出

  wire [3:0] c;       // 中间进位变量

  full_adder fa0(a[0], b[0], cin, sum[0], c[0]);  // 第一位的全加器
  full_adder fa1(a[1], b[1], c[0], sum[1], c[1]); // 第二位的全加器
  full_adder fa2(a[2], b[2], c[1], sum[2], c[2]); // 第三位的全加器
  full_adder fa3(a[3], b[3], c[2], sum[3], cout); // 第四位的全加器
endmodule

module full_adder(a, b, cin, sum, cout);
  input a, b, cin; // 输入a, b, 进位cin
  output sum, cout; // 输出和sum和进位cout

  assign sum = a ^ b ^ cin; // 异或运算
  assign cout = (a & b) | (a & cin) | (b & cin); // 与、或运算
endmodule

测试文件

module adder4_tb;
  reg [3:0] a;
  reg [3:0] b;
  reg cin;
  wire [3:0] sum;
  wire cout;

  adder4 adder(a, b, cin, sum, cout);

  initial begin
    // 测试1:a=4'b0000, b=4'b0000, cin=0
    a = 4'b0000;
    b = 4'b0000;
    cin = 0;
    #10;
    $display("a=%b, b=%b, sum=%b, cout=%b", a, b, sum, cout);

    // 测试2:a=4'b1111, b=4'b1111, cin=0
    a = 4'b1111;
    b = 4'b1111;
    cin = 0;
    #10;
    $display("a=%b, b=%b, sum=%b, cout=%b", a, b, sum, cout);

    // 测试3:a=4'b1100, b=4'b1010, cin=1
    a = 4'b1100;
    b = 4'b1010;
    cin = 1;
    #10;
    $display("a=%b, b=%b, sum=%b, cout=%b", a, b, sum, cout);
  end
endmodule

测试结果

iverilog -o adder4 -y ./ adder4.v adder4_tb.v
vvp -n adder4 -lxt2
a=0000, b=0000, sum=0000, cout=0
a=1111, b=1111, sum=1110, cout=1
a=1100, b=1010, sum=0111, cout=1

标签:输出,全加器,cout,实现,sum,cin,进位
From: https://blog.csdn.net/weixin_40398522/article/details/137275881

相关文章

  • ShardingJDBC-5.3实现读写分离,构建主从MySQL数据库,Docker部署Mysql8.0
      最近在做一个项目需要搭建MySQL主从架构,采用ShardingJDBC5.3实现MySQL读写分离,本文记录一下搭建流程。基于Docker创建主从架构#创建主从数据库文件夹mkdir-p/usr/local/mysql/master1/confmkdir-p/usr/local/mysql/master1/datamkdir-p/usr/local/mysql/s......
  • php实现动态网站静态化
    用PHP实现:将动态网站整个网站静态化时用到(不光可以静态化PHP的网站,其他语言的也可以)1、站点目录下创建index.php文件:<?php//站点域名Sta::srart("https://域名");classSta{publicstatic$domain='';publicstaticfunctionsrart($domain){......
  • 利用python 实现微信自动回复
    全是干货,上代码#!/usr/bin/python3#-*-coding:utf-8-*-importpandasaspdimportnumpyasnpfromuiautomationimportWindowControl,MenuControl#绑定微信主窗口wx=WindowControl(Name='微信',#searchDepth=1)#切换窗口wx.SwitchToThi......
  • 【附源码】JAVA计算机毕业设计网站群知识交流平台的设计与实现(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术日益发展的今天,网络平台已经成为知识获取和交流的重要手段。特别是对于计算机科学与技术专业的学生而言,一个专注于毕业设计的网站群知识交流......
  • Golang实现一个聊天工具
    简介聊天工具作为实时通讯的必要工具,在现代互联网世界中扮演着重要的角色。本博客将指导如何使用Golang构建一个简单但功能完善的聊天工具,利用WebSocket技术实现即时通讯的功能。项目源码点击下载为什么选择GolangGolang是一种高效、简洁且并发性强的编程语言。......
  • 【智能排班系统】基于Redis的increment命令和lua脚本实现IP限流
    文章目录什么是IP限流?为什么需要IP限流?保护服务器资源防范恶意攻击与滥用提升用户体验IP限流方式:实现实现原理代码结构lua脚本为什么要使用lua脚本Ip限流工具类对所有接口进行限流IP限流请求过滤器SpringSecurity中配置过滤器对不经过SpringSecurity的过滤器的请求进......
  • SAP_MM模块-无价值物料管理实现思路
    无价值物料管理实现思路业务背景一:对于工具类的物料,本来想通过无物料号,收货时直接消耗在成本中心的方式来处理,这样,工程部和采购部都比较方便。但财务部提出这部分工具物料还需要进行库存管理,但不要求有库存价值,只是在规定时间内作库存盘点操作。思路1(不满足要求):无料号的费......
  • Android 13.0 系统限制上网系列之iptables用IOemNetd实现删除子链功能的实现
    1.前言在13.0的系统rom定制化开发中,对于限制系统上网功能中,在system中netd网络这块的产品开发中,会要求设置屏蔽ip地址之内的功能,liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现删除创建子链的相关功能2. 系统限制上网系列之iptables用IOemNetd实现删除创......
  • SpringBoot医院信管系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot大学生体质测试管理系统,项目源码请点击文章末尾联系我哦~目前有各类成......
  • JS实现简单的Vue,知乎上已获万赞
    compile解析domlassVue{constructor(options={}){…}proxyData(key){…}observer(data){…}compile(el){varnodes=el.childNodes;for(leti=0;i<nodes.length;i++){constnode=nodes[i];if(node.nodeType===3){vartext=node.textCon......