首页 > 其他分享 >【计组实验】实验f2 一位全加器

【计组实验】实验f2 一位全加器

时间:2022-10-22 10:01:11浏览次数:58  
标签:STD f2 全加器 实验 adder LOGIC PORT

一、实验目标

测试全加器f_adder的功能,并做出仿真波形。

二、实验原理

全加器f_adder由两个半加器h_adder和一个或门or2a组成,先完成半加器和或门的VHDL代码,然后在全加器的VHDL代码中调用半加器和或门就可以实现全加器的功能。

真值表

image-20221022090905243

三、实验代码

或门 or2a

LIBRARY IEEE ;  --或门逻辑描述

 USE IEEE.STD_LOGIC_1164.ALL;

 ENTITY or2a IS

  PORT (a, b : IN STD_LOGIC; c : OUT STD_LOGIC );

 END ENTITY or2a ;

 ARCHITECTURE one OF or2a IS

  BEGIN

  c <= a OR b ;

 END ARCHITECTURE one ;

半加器 h_adder

LIBRARY IEEE;  --半加器描述(1):布尔方程描述方法

USE IEEE.STD_LOGIC_1164.ALL; 

ENTITY h_adder IS 

 PORT ( a, b : IN STD_LOGIC; 

​    co, so : OUT STD_LOGIC); 

END ENTITY h_adder;   

ARCHITECTURE fh1 OF h_adder IS 

BEGIN  

 so <= NOT(a XOR (NOT b)) ;  co <= a AND b ; 

END ARCHITECTURE fh1;

全加器 f_adder

LIBRARY IEEE;  --1位二进制全加器顶层设计描述

 USE IEEE.STD_LOGIC_1164.ALL;

 ENTITY f_adder IS

  PORT (ain, bin, cin : IN STD_LOGIC;

​       cout, sum : OUT STD_LOGIC);

 END ENTITY f_adder;

 ARCHITECTURE fd1 OF f_adder IS

  COMPONENT h_adder         --调用半加器声明语句

   PORT ( a, b : IN STD_LOGIC;

​      co, so : OUT STD_LOGIC);

  END COMPONENT;

  COMPONENT or2a

   PORT (a, b : IN STD_LOGIC;

​        c : OUT STD_LOGIC);

  END COMPONENT;

SIGNAL d, e, f : STD_LOGIC; --定义3个信号作为内部的连接线

 BEGIN

  u1 : h_adder PORT MAP(a=>ain, b=>bin, co=>d, so=>e); --例化语句

  u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f, so=>sum);

  u3 : or2a  PORT MAP(a=>d, b=>f, c=>cout);

 END ARCHITECTURE fd1;

四、实验过程

元件图

image-20221022090839954

可以看到,全加器f_adder就是由两个半加器h_adder和一个或门or2a组成的,符合上面全加器f_adder VHDL代码。

测试波形

image-20221022091026675

测试:共有三个输入a,b,c,我测试了三个输入的所有8种不同组合,通过判断cout,sum两个输出的波形可得符合全加器的真值表。

测试结果:测试波形符合一位全加器的真值表;当只有一个输入为高电平时,进位输出cout为低电平,结果输出sum为高电平;当任意两个输入为高电平时,进位输出cout为高电平,结果输出sum为低电平;当所有输入都为高电平时,进位输出cout和结果输出sum都为高电平。

五、实验总结

本次实验比上一次实验难度稍微大些,但有了上一次实验作为基础,在做本次实验是就不再是那种找不着头脑的状态。本次实验是实现和验证一位全加器,在实验中我学会了可以在用VHDL实现一种元器件时调用调用其他元器件,比如全加器就是通过调用了半加器和或门实现的。本次实验后,我加深了对VHDL语言的理解,同时也能更加熟练地使用Quartus了。

标签:STD,f2,全加器,实验,adder,LOGIC,PORT
From: https://www.cnblogs.com/blockche/p/16815415.html

相关文章

  • 实验6:开源控制器实践——RYU
    一、L2Switch和POX的Hub模块有何不同h1pingh3h1pingh2Hub和L2Switch模块都是洪泛转发,但L2Switch模块下发的流表无法查看,而Hub模块下发的流表可以查看。二......
  • Redis搭建Sentinel实验环境
    环境准备在物理机上启动3台物理机,IP地址分别为:192.168.56.4,192.168.56.5,192.168.56.6。1.确保3台虚拟机的网络是相互联通的。2.确保已经在3台虚拟机上安装了redis(本示例......
  • SpringBoot2.0上启动RPC框架RNF2.0已发布
    使用效果:用户访问客户端:GEThttp://localhost:8081/user/hello?name="张三来访"浏览器访问客户端:服务端接收情况:服务端负载注册服务:上面的实现就好比客户端只......
  • 实验2
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0......
  • 实验一:决策树算法实验
    实验一:决策树算法实验|博客班级|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-MachineLearning||----|----|----||作业要求|https://edu.cnblogs.com/......
  • 实验3 数组、指针与现代C++标准库
    一.实验结论:1.实验任务5:Info.hpp:#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{public:Info(){}Info(st......
  • 实验3
    task5#include<iostream>usingnamespacestd;#include<iomanip>classInfo{private:stringnickname,contact,city;intn;public:Info(string......
  • 实验2
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){inti,number;srand(time(0));for(i=0;i<=N;++i){......
  • 网络工程知识(二)VLAN的基础和配置:802.1q帧;Access、Trunk、Hybrid接口工作模式过程与配
    介绍-VLANVLAN(VirtualLocalAreaNetwork)即虚拟局域网,工作在数据链路层。交换机将通过:接口、MAC、基于子网、协议划分(IPv4和IPv6)、基于策略的方式划分VLAN的方式,将接......
  • 软件实验设计15
    实验15:职责链模式[实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10......