文章目录
实验环境
Quartus18.1
Intel DE2-115
一、认识半加器和全加器
1.半加器
半加器不考虑低位进位来的进位值,只有两个输入,两个输出。由一个与门和异或门构成.
真值表:
2.全加器
当多位数相加时,半加器可用于最低位求和,并给出进位数。第二位的相加有两个待加数和,还有一个来自前面低位送来的进位数。这三个数相加,得出本位和数(全加和数)和进位数。这种就是“全加器"
真值表:
二、输入原理图实现1位加法器
创建工程过程
启动 Quartus II 软件,选择File->New Project Wizard,在出现的界面下先Next,填写工程的路径和名称,然后接着Next,直到出现下面界面并进行相应操作。接着一路Next,直到Finish,完成工程的创建。
(一)半加器原理图输入
绘制过程实现
首先选择File->New,进入后选择Block Diagram/Schematic File
选择元件and2,xor,连接成以下电路图
保存文件,并编译
通过tool->Netlist Viewers->RTL Viewer,查看电路图
仿真实现
创建一个向量波形文件,选择菜单项 File→New->VWF
添加信号
编辑信号
功能仿真结果
通过仿真结果,可以发现得到的结果与真值表中是相吻合的。
(二)全加器原理图输入
利用半加器元件实现全加器
将设计项目设置为可调用的元件
在打开半加器原理图文件half_adder.bdf的情况下,选择菜中File中的Create/Update→CreateSymbolFilesforCurrentFile项,即可将当前文件h_adder.bdf变成一个元件符号存盘,以待在高层次设计中调用
绘制过程实现
首先选择File->New,进入后选择Block Diagram/Schematic File
选择元件half_adder,or2,添加输入输出,完成效果
保存文件,并编译
通过tool->Netlist Viewers->RTL Viewer,查看电路图
仿真实现
创建一个向量波形文件,选择菜单项 File→New->VWF
添加信号
编辑信号
功能仿真结果
通过仿真结果,可以发现得到的结果与真值表中是相吻合的。
三、Verilog实现1位加法器
-
创建Verilog文件
-
代码实现
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个SW作为输入信号,2个LED作为输出信号
原理图如下
-
下载
-
运行结果
扩展:4位全加器
将1位全加器的q与q1首尾相连,开头的输入进位接地,最后一个全加器的输出的进位表示是否溢出。按照上图连接,将实现4位全加器,并判断是否溢出。
使用VerilogHDL语言实现4位全加器的话,原理与上面一样。
代码如下:
module exp1_fulladder_4bits(
input [3:0] d1,
input [3:0] d0,
output [3:0] out,
output q
);
wire q1;
assign q1 = 1'b0;
wire [2:0] _q;
exp1_fulladder u_exp1_fulladder(
.d1 (d1[0]),
.d0 (d0[0]),
.q1 (q1),
.out (out[0]),
.q (_q[0])
);
exp1_fulladder u_exp1_fulladder_2(
.d1 (d1[1]),
.d0 (d0[1]),
.q1 (_q[0]),
.out (out[1]),
.q (_q[1])
);
exp1_fulladder u_exp1_fulladder_3(
.d1 (d1[2]),
.d0 (d0[2]),
.q1 (_q[1]),
.out (out[2]),
.q (_q[2])
);
exp1_fulladder u_exp1_fulladder_4(
.d1 (d1[3]),
.d0 (d0[3]),
.q1 (_q[2]),
.out (out[3]),
.q (q)
);
endmodule
实验总结
本次实验使用FPGA制作了全加器,并从1位全加器扩展到了4位。复习了前面学习的数电知识,以及更进一步地练习了verilog语法与fpga的使用。
另外发现,蓝色LED与白色LED的工作功率似乎比红,绿,黄三色的LED大。在接上限流电阻的时候白灯与蓝灯会不亮。