VHDL 一位全加器
VHDL(VHSIC 硬件描述语言)是一种基于文本的硬件描述语言,用于描述数字电路的行为。该语言广泛应用于数字电路设计、仿真、测试和验证。
一、设计目的
本实验的目的是熟悉 Quartus II 的 VHDL 文本设计流程,全过程,学习组合电路的设计、仿真和测试。通过设计一位全加器,掌握 VHDL 语言的使用,了解数字电路的设计和实现过程。
二、设计内容
本实验的设计内容是设计一位全加器,包括半加器和或门的设计。半加器是指将两个二进制数相加的电路,而或门是指将两个二进制数进行逻辑或运算的电路。通过组合半加器和或门,实现一位全加器的设计。
三、程序设计原理
半加器的设计原理是采用布尔方程描述方法或真值表描述方法。布尔方程描述方法是通过布尔代数式来描述电路的行为,而真值表描述方法是通过真值表来描述电路的行为。在本实验中,我们采用布尔方程描述方法来设计半加器。
半加器的布尔方程描述为:
so <= NOT(a xor (not b));
co <= a and b;
其中,so 是半加器的输出,co 是半加器的进位输入,a 和 b 是半加器的输入。
四、源程序
本实验的源程序包括三个部分:半加器、或门和一位全加器。
半加器的源程序为:
```vhdl
LIBRARY IEEE;
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;
```
或门的源程序为:
```vhdl
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;
```
一位全加器的源程序为:
```vhdl
LIBRARY IEEE;
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;
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;
```
五、调试过程
本实验的调试过程包括七个步骤:
1. 创建一个 Quartus II 工程,并新建一个 VHDL 文件,实现一位全加器电路。
2. 进行编译前设置,包括 FPGA 目标芯片、配置器件的工作方式、配置器件和编程方式、目标器件闲置引脚状态等的配置。
3. 进行全程编译。
4. 新建一个波形文件,进行仿真分析,手动增加激励,验证功能,仿真时序图如下图。
5. 参照 DE2 平台的引脚分配表分配引脚,用 SW2~SW0 作为输入 ain bin cin,DE2 平台上的 LEDR0 输出 sum, LEDR1 输出 cout。
6. 编译工程,完成后下载到 FPGA 中。
7. 拨动波段开关并观察 LED 灯的显示,以验证设计的功能是否正确,经检验,电路正确,整理仪器。
六、遇到的问题及解决方法
在实验过程中,我们遇到了两个问题:
1. 对管脚的配置不熟悉,导致管脚配置错误。通过老师指导以后,我们改正错误,正确配置了管脚。
2. 对实验软件不够熟悉,特别是功能上的实现。我们只能通过不断练习来熟悉。