目录

  • 前言
  • 一、理解全加器
  • 1、半加器
  • 2、1位全加器
  • 二、通过原理图实现1位全加器
  • 1、创建工程
  • 2、半加器原理图设计
  • 1、设计原理图
  • 2、仿真实现
  • 3、全加器原理图设计
  • 1、将设计项目设置为可调用的元件
  • 2、原理图绘制
  • 3、仿真实现
  • 三、通过Verilog编程实现1位全加器
  • 1、创建Verilog文件
  • 2、代码实现
  • 3、仿真实现
  • 四、通过Verilog编程实现四位全加器
  • 1、代码实现
  • 2、仿真实现
  • 五、总结
  • 六、参考资料


前言

本篇博客主要是基于Quartus软件件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。

一、理解全加器

1、半加器

1、定义:

半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路。

2、真值表:

A,B表示二进制数,C表示半加进位,S表示半加和

FPGA加速cnn这种_ci

2、1位全加器

1、真值表:

Ain表示被加数,Bin表示加数,Cin表示低位进位,Cout表示高位进位,Sum表示本位和

FPGA加速cnn这种_ci_02

二、通过原理图实现1位全加器

1、创建工程

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

FPGA加速cnn这种_FPGA加速cnn这种_03

2、半加器原理图设计

1、设计原理图

首先选择File->New,进入后选择Block Diagram/Schematic File

FPGA加速cnn这种_ci_04


选择元件,分别添加and2和xor。

FPGA加速cnn这种_fpga开发_05


添加输入输出,完成设计原理图

FPGA加速cnn这种_Verilog_06


保存文件,并编译

通过tool->Netlist Viewers->RTL Viewer,查看电路图

FPGA加速cnn这种_ci_07

2、仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

FPGA加速cnn这种_原理图_08


添加信号

FPGA加速cnn这种_ci_09


编辑信号

FPGA加速cnn这种_原理图_10


保存文件并启动仿真:

功能仿真结果

FPGA加速cnn这种_Verilog_11


时序仿真结果

FPGA加速cnn这种_fpga开发_12


通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

3、全加器原理图设计

1、将设计项目设置为可调用的元件

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

FPGA加速cnn这种_FPGA加速cnn这种_13

2、原理图绘制

首先选择File->New,进入后选择Block Diagram/Schematic File

然后选择元件:

加入adder和or2

FPGA加速cnn这种_Verilog_14


添加输入输出,完成效果

FPGA加速cnn这种_Verilog_15


保存文件,并编译

通过tool->Netlist Viewers->RTL Viewer,查看电路图

FPGA加速cnn这种_原理图_16

3、仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

FPGA加速cnn这种_ci_17


添加信号

FPGA加速cnn这种_ci_18


编辑信号

FPGA加速cnn这种_原理图_19


保存文件并启动仿真

功能仿真结果

FPGA加速cnn这种_fpga开发_20


时序仿真结果

FPGA加速cnn这种_ci_21


通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

三、通过Verilog编程实现1位全加器

1、创建Verilog文件

FPGA加速cnn这种_fpga开发_22

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,查看电路图

FPGA加速cnn这种_ci_23

3、仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

FPGA加速cnn这种_Verilog_24


添加信号

FPGA加速cnn这种_fpga开发_25


编辑信号

FPGA加速cnn这种_Verilog_26


保存文件并启动仿真

功能仿真结果

FPGA加速cnn这种_fpga开发_27


时序仿真结果

FPGA加速cnn这种_FPGA加速cnn这种_28


通过仿真结果,可以发现得到的结果与真值表中是相吻合的。

四、通过Verilog编程实现四位全加器

由于我们已经实现1位全加器的完成后,可以根据多个1位全加器的级联实现多位全加器。
因此我们还能采用Verilog编程实现4位全加器。

1、代码实现

module adder4 (cout,sum,ina,inb,cin);
  input  [3:0] ina,inb;
  input cin;
  output [3:0] sum;
  output cout;

  assign {cout,sum} = ina + inb + cin;
  endmodule

保存并编译文件

通过tool->Netlist Viewers->RTL Viewer,查看电路图

FPGA加速cnn这种_ci_29

2、仿真实现

创建一个向量波形文件,选择菜单项 File→New->VWF

添加信号,步骤与上文一样

FPGA加速cnn这种_ci_30


编辑信号

FPGA加速cnn这种_ci_31


功能仿真

FPGA加速cnn这种_Verilog_32


时序仿真

FPGA加速cnn这种_Verilog_33

五、总结

此次学习主要是FPGA的编程入门,学习了全加器的基本原理和理论。并且基于Quartus软件分别使用了原理图设计和Verilog编程来设计最基本的1位全加器,在此基础上,我们可以根据多个1位全加器的级联来设计多位全加器,虽然通过这种方法我们可以更深入的理解其原理,但是这种使用原理图设计的方法在元件较多的测试里面显得十分繁琐,因此我建议使用Verilog编程的方法来实现多位全加器。

六、参考资料

FPGA——1位全加器的实现