FPGA——1位全加器的实现

一、认识全加器

(一)半加器

  1. 半加器的定义
    半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路。
  2. 半加器的真值表
    A,B表示二进制数,C表示半加进位,S表示半加和
    ABCS
    0000
    0101
    1001
    1110
  3. 输出表达式
    S = A ˉ B + A B ˉ = A ⊕ B {S=\bar{A}B+A\bar{B}=A\oplus B} S=AˉB+ABˉ=AB
    C = A B {C=AB} C=AB
  4. 逻辑电路图
    在这里插入图片描述

(二)1位全加器

  1. 1位全加器的真值表
    Ain表示被加数,Bin表示加数,Cin表示低位进位,Cout表示高位进位,Sum表示本位和
    AinBinCinCoutSum
    00000
    00101
    01001
    01110
    10001
    10110
    11010
    11111
  2. 输出表达式
    S u m = A i n ⊕ B i n ⊕ C i n {Sum=Ain\oplus Bin \oplus Cin} Sum=AinBinCin
    C o u t = ( A i n ⊕ B i n ) ⋅ C i n + A i n B i n = ( A i n & B i n ) ∣ ( B i n & C i n ) ∣ ( A i n & C i n ) {Cout=(Ain \oplus Bin)\cdot Cin+AinBin=(Ain\& Bin)|(Bin\& Cin)|(Ain\& Cin)} Cout=(AinBin)Cin+AinBin=(Ain&Bin)(Bin&Cin)(Ain&Cin)
  3. 逻辑图
    在这里插入图片描述

二、输入原理图实现1位加法器

创建工程过程
启动 Quartus II 软件,选择File->New Project Wizard,在出现的界面下先Next,填写工程的路径和名称,然后接着Next,直到出现下面界面并进行相应操作。接着一路Next,直到Finish,完成工程的创建。
在这里插入图片描述

(一)半加器原理图输入

  1. 绘制过程实现
    首先选择File->New,进入后选择Block Diagram/Schematic File
    在这里插入图片描述
    选择元件
    在这里插入图片描述
    添加输入输出,完成效果
    在这里插入图片描述
    保存文件,并编译
    通过tool->Netlist Viewers->RTL Viewer,查看电路图
    在这里插入图片描述
  2. 仿真实现
    创建一个向量波形文件,选择菜单项 File→New->VWF
    在这里插入图片描述
    添加信号
    在这里插入图片描述
    编辑信号
    在这里插入图片描述
    保存文件并启动功能仿真,出现错误,进行仿真配置,选择tool->launch simulation library complier
    在这里插入图片描述
    功能仿真结果
    在这里插入图片描述
    时序仿真结果
    在这里插入图片描述
    通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

(二)全加器原理图输入

利用半加器元件实现全加器

  1. 将设计项目设置为可调用的元件
    在打开半加器原理图文件half_adder.bdf的情况下,选择菜中File中的Create/Update→CreateSymbolFilesforCurrentFile项,即可将当前文件h_adder.bdf变成一个元件符号存盘,以待在高层次设计中调用
    在这里插入图片描述

  2. 绘制过程实现
    首先选择File->New,进入后选择Block Diagram/Schematic File
    在这里插入图片描述
    选择元件
    在这里插入图片描述
    添加输入输出,完成效果
    在这里插入图片描述
    保存文件,并编译
    通过tool->Netlist Viewers->RTL Viewer,查看电路图
    在这里插入图片描述

  3. 仿真实现
    创建一个向量波形文件,选择菜单项 File→New->VWF
    在这里插入图片描述
    添加信号
    在这里插入图片描述
    编辑信号
    在这里插入图片描述
    保存文件并启动功能仿真,出现错误,进行仿真配置,选择tool->launch simulation library complier
    在这里插入图片描述
    功能仿真结果
    在这里插入图片描述
    时序仿真结果
    在这里插入图片描述
    通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

三、Verilog实现1位加法器

  1. 创建Verilog文件
    在这里插入图片描述
  2. 代码实现
    module full_adder(
    	//输入信号,ain表示被加数,bin表示加数,cin表示低位向高位的进位
    	input ain,bin,cin,
    	//输出信号,cout表示向高位的进位,sum表示本位的相加和
    	output reg cout,sum
    
    );
    reg s1,s2,s3;
    always @(ain or bin or cin) begin
    	sum=(ain^bin)^cin;//本位和输出表达式
    	s1=ain&cin;
    	s2=bin&cin;
    	s3=ain&bin;
    	cout=(s1|s2)|s3;//高位进位输出表达式
    end
    endmodule
    
    保存并编译文件
    通过tool->Netlist Viewers->RTL Viewer,查看电路图
    在这里插入图片描述
  3. 仿真实现
    创建一个向量波形文件,选择菜单项 File→New->VWF
    在这里插入图片描述
    添加信号
    在这里插入图片描述
    编辑信号
    在这里插入图片描述
    保存文件并启动功能仿真,出现错误,进行仿真配置,选择tool->launch simulation library complier
    在这里插入图片描述
    功能仿真结果
    在这里插入图片描述
    时序仿真结果
    在这里插入图片描述
    通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

四、下载测试

芯片引脚配置表
在这里插入图片描述
在这里插入图片描述

(一)输入原理图

  1. 将设计项目设置为顶层文件
    选中对应的设计文件
    在这里插入图片描述

  2. 配置引脚
    使用3个SW作为输入信号,2个LED作为输出信号
    在这里插入图片描述
    原理图如下
    在这里插入图片描述

  3. 下载
    在这里插入图片描述

  4. 结果效果
    通过拨动SW,观察LED的亮灭的效果,发现SW开表示1,关表示0,LED亮表示1,灭表示0。最终,验证的结果为跟其真值表相吻合。

(二)Verilog代码

  1. 配置引脚
    使用3个SW作为输入信号,2个LED作为输出信号
    在这里插入图片描述
  2. 下载
    在这里插入图片描述
  3. 结果效果
    通过拨动SW,观察LED的亮灭的效果,发现SW开表示1,关表示0,LED亮表示1,灭表示0。最终,验证的结果为跟其真值表相吻合。

1位全加器的实现完成后,可以根据多个1位全加器的级联实现多位全加器。

五、参考链接

Verilog全加器

  • 22
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值