一、配置环境
1、Quartus 18.1安装教程
|----------------------------|----------------------------|
| 软件:Quartus | 版本:Quartus 18.1 |
| 语言:英文 | 大小:5.78G |
| 安装环境:Win11/Win10/Win8/Win7 | 硬件要求:[email protected] 内存@4G(或更高) |
| 下载通道①百度网盘丨64位下载链接: http://pan.baidu.com/s/1wYcHJkh2POLfLR7oohWzBw 提取码:h123 ||
软件介绍
Quartus 是一款综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
安装步骤
下载安装文件之后,点击文件中的setup,进入安装界面,稍等一会儿。


选择【I accept the agreement】,点击Next。


修改路径地址中的首字符C可更改软件的安装位置

后面直接点Next,进入安装,等待时间会比较长.
1.1创建 Quartus 项目
-
打开Quartus 软件。
-
点击
File -> New Project Wizard
。 -
设置项目路径和项目名称(例如**
four_bit_adder
**)。 -
选择目标器件:
-
在
Family
中选择**Cyclone IV E
**。 -
在
Device
中选择EP4CE115F29C7
(DE2-115 的 FPGA 型号)。
-
-
完成项目创建。





就欧克了
2、ModelSim安装教程
|----------------------------|----------------------------------------------|
| 软件:ModelSim | 版本:ModelSim-Intel FPGA Starter Edition 10.5b |
| 语言:英文 | 大小:1.11G |
| 安装环境:Win11/Win10/Win8/Win7 | 硬件要求:[email protected] 内存@4G(或更高) |
| 下载通道①百度网盘丨64位下载链接: http://pan.baidu.com/s/1wYcHJkh2POLfLR7oohWzBw 提取码:h123 ||
软件介绍
ModelSim 是一种功能强大的硬件描述语言 (HDL,Hardware Description Language) 仿真和验证工具,可以单独仿真,也可以联合Quartus/ViIvado等软件联合仿真,仿真速度快,广泛应用于数字电路设计和验证领域。
安装步骤
下载安装文件之后,点击exe文件进入安装

点击Next,

点击Next,

accept后,点击Next,

修改路径地址中的首字符C可更改软件的安装位置(如:将C改为D表示安装到D盘),点击Next

完成安装之后退出,即可使用。
二、实现4位全加器
1、项目创建
-
打开Quartus 软件。
-
点击
File -> New Project Wizard
。 -
设置项目路径和项目名称(例如**
four_bit_adder
**)。 -
选择目标器件:
-
在
Family
中选择**Cyclone IV E
**。 -
在
Device
中选择EP4CE115F29C7
(DE2-115 的 FPGA 型号)。
-
-
完成项目创建。





2. 编写 Verilog 代码
-
在 Quartus 中,点击
File -> New
,选择**Verilog HDL File
** ,然后点击OK
。 -
编写 4位全加器的 Verilog 代码。

4位全加器代码如下,
// 1-bit 全加器模块
module full_adder_1bit (
input A,
input B,
input Cin,
output Sum,
output Cout
);
assign Sum = A ^ B ^ Cin; // 和输出
assign Cout = (A & B) | (Cin & (A ^ B)); // 进位输出
endmodule
// 按键消抖模块
module debounce (
input clk, // 50MHz 时钟
input key_in, // 按键输入(KEY0)
output reg key_out // 消抖后的稳定信号
);
reg [19:0] counter; // 20ms 延时计数器(50MHz → 1_000_000 计数)
always @(posedge clk) begin
if (counter == 20'd1_000_000) begin
key_out <= key_in; // 采样稳定后的按键值
counter <= 0;
end else begin
counter <= counter + 1;
end
end
endmodule
// 4-bit 全加器顶层模块
module four_bit_adder (
input clk, // 时钟信号
input [3:0] A, // 输入 A(SW3-SW0)
input [3:0] B, // 输入 B(SW7-SW4)
input Cin_raw, // 原始按键输入(KEY0)
output [3:0] Sum, // 和输出(LEDR3-LEDR0)
output Cout // 进位输出(LEDR4)
);
wire Cin_stable;
debounce debounce_inst (
.clk(clk), // 时钟信号
.key_in(Cin_raw),
.key_out(Cin_stable)
);
wire [3:0] carry;
full_adder_1bit fa0 (A[0], B[0], Cin_stable, Sum[0], carry[0]);
full_adder_1bit fa1 (A[1], B[1], carry[0], Sum[1], carry[1]);
full_adder_1bit fa2 (A[2], B[2], carry[1], Sum[2], carry[2]);
full_adder_1bit fa3 (A[3], B[3], carry[2], Sum[3], carry[3]);
assign Cout = carry[3];
endmodule
3. 编译和综合
- 在 Quartus 中,点击
Processing -> Start Compilation
,开始编译。

左下角是编译过程,

编译结果如下,

4. 引脚分配
-
打开引脚分配工具:
- 点击**
Assignments -> Pin Planner
**。
- 点击**
-
根据 DE2-115 开发板的引脚定义,分配输入输出信号到具体的引脚。
-
**
Cout
**分配到另一个 LED(LEDR4)。 -
**
Sum[3:0]
**分配到 4 个 LED(LEDR3-LEDR0)。 -
**
Cin
**分配到一个按钮(KEY0)。 -
B[3:0]
分配到另外 4 个拨码开关(SW7-SW4)。 -
A[3:0]
分配到 4 个拨码开关(SW3-SW0)。
-

以下是具体的引脚分配表:
信号 | 引脚名称 | 硬件对应 | 方向 | I/O 标准 |
---|---|---|---|---|
clk |
PIN_Y2 |
50MHz 时钟 | Input | 3.3-V LVTTL |
A[0] |
PIN_AB28 |
拨码开关 SW0 | Input | 3.3-V LVTTL |
A[1] |
PIN_AC28 |
拨码开关 SW1 | Input | 3.3-V LVTTL |
A[2] |
PIN_AC27 |
拨码开关 SW2 | Input | 3.3-V LVTTL |
A[3] |
PIN_AD27 |
拨码开关 SW3 | Input | 3.3-V LVTTL |
B[0] |
PIN_AB26 |
拨码开关 SW4 | Input | 3.3-V LVTTL |
B[1] |
PIN_AD26 |
拨码开关 SW5 | Input | 3.3-V LVTTL |
B[2] |
PIN_AC26 |
拨码开关 SW6 | Input | 3.3-V LVTTL |
B[3] |
PIN_AB25 |
拨码开关 SW7 | Input | 3.3-V LVTTL |
Cin_raw |
PIN_M23 |
按键 KEY0 | Input | 3.3-V LVTTL |
Sum[0] |
PIN_G19 |
LEDR0 | Output | 3.3-V LVTTL |
Sum[1] |
PIN_F19 |
LEDR1 | Output | 3.3-V LVTTL |
Sum[2] |
PIN_E19 |
LEDR2 | Output | 3.3-V LVTTL |
Sum[3] |
PIN_F21 |
LEDR3 | Output | 3.3-V LVTTL |
Cout |
PIN_F18 |
LEDR4 | Output | 3.3-V LVTTL |
保存引脚分配。
5、4位全加器在DE2-115开发板的实现
下载程序到 FPGA
-
连接硬件:
-
使用 USB-Blaster 线连接 DE2-115 的 JTAG 接口。
-
打开开发板电源(电源开关位于右上角)。
-
-
打开编程工具:
- 点击 Tools -> Programmer。
-
配置编程文件:
-
点击 Add File ,选择生成的
.sof
文件(路径:output_files/four_bit_adder.sof
)。 -
确保 Program/Configure 选项被勾选。
-
-
下载程序:
- 点击 Start ,等待进度条完成并显示 Programming Succeeded。

DE2115开发板上实现4位全加器前的基础测试
基础测试
测试用例
输入组合 | 预期输出 | 硬件验证方法 |
---|---|---|
A=0011 , B=0101 , Cin=0 |
Sum=1000 , Cout=0 |
SW3-SW0: 0011;SW7-SW4: 0101;KEY0弹起 → LEDR3亮,其余灭;LEDR4灭。 |
A=1111 , B=0001 , Cin=0 |
Sum=0000 , Cout=1 |
SW3-SW0: 1111;SW7-SW4: 0001;KEY0弹起 → LEDR0-LEDR3全灭;LEDR4亮。 |
A=1010 , B=0101 , Cin=1 |
Sum=0000 , Cout=1 |
SW3-SW0: 1010;SW7-SW4: 0101;KEY0按下 → LEDR0-LEDR3全灭;LEDR4亮。 |
DE2115开发板上实现4位全加器
对于第一组组合在开发板上进行验证
DE2115实现4位全加器
三、实现3-8译码器
1、项目创建
-
打开Quartus 软件。
-
点击
File -> New Project Wizard
。 -
设置项目路径和项目名称(例如 decoder_3to8 )。
-
选择目标器件:
-
在
Family
中选择**Cyclone IV E
**。 -
在
Device
中选择EP4CE115F29C7
(DE2-115 的 FPGA 型号)。
-
-
完成项目创建。






2. 编写 Verilog 代码
在 Quartus 中,点击 Processing -> Start Compilation
,开始编译。

代码如下,
module decoder_3to8 (
input [2:0] in, // 3-bit input
output reg [7:0] out // 8-bit output
);
always @(*) begin
case (in)
3'b000: out = 8'b00000001;
3'b001: out = 8'b00000010;
3'b010: out = 8'b00000100;
3'b011: out = 8'b00001000;
3'b100: out = 8'b00010000;
3'b101: out = 8'b00100000;
3'b110: out = 8'b01000000;
3'b111: out = 8'b10000000;
default: out = 8'b00000000; // Default case
endcase
end
endmodule
3. 编译和综合
在 Quartus 中,点击 Processing -> Start Compilation
,开始编译。
如果没有语法错误,编译会成功完成。

编译结果如下,

4. 引脚分配
-
打开引脚分配工具:
- 点击
Assignments -> Pin Planner
。
- 点击
-
根据 DE2-115 开发板的引脚定义,分配输入输出信号到具体的引脚。
-
例如:
-
**
in[2:0]
**分配到 3 个拨码开关(SW2-SW0)。 -
out[7:0]
分配到 8 个 LED(LEDR7-LEDR0)。
-
-
以下是具体的引脚分配表:
信号 | 引脚名称 | 功能说明 |
---|---|---|
in[0] | PIN_AB28 | SW0 |
in[1] | PIN_AC28 | SW1 |
in[2] | PIN_AC27 | SW2 |
out[0] | PIN_G19 | LEDR0 |
out[1] | PIN_F19 | LEDR1 |
out[2] | PIN_E19 | LEDR2 |
out[3] | PIN_F21 | LEDR3 |
out[4] | PIN_F18 | LEDR4 |
out[5] | PIN_E18 | LEDR5 |
out[6] | PIN_J19 | LEDR6 |
out[7] | PIN_H19 | LEDR7 |
保存引脚分配。
5、3-8译码器在DE2-115开发板的实现
下载程序到 FPGA
-
连接硬件:
-
使用 USB-Blaster 线连接 DE2-115 的 JTAG 接口。
-
打开开发板电源(电源开关位于右上角)。
-
-
打开编程工具:
- 点击 Tools -> Programmer。
-
配置编程文件:
-
点击 Add File ,选择生成的
.sof
文件(路径:output_files/
decoder_3to8.sof
)。 -
确保 Program/Configure 选项被勾选。
-
-
下载程序:
- 点击 Start ,等待进度条完成并显示 Programming Succeeded。

功能验证
输入(SW2-SW0) | 预期输出(LEDR7-LEDR0) | 现象 |
---|---|---|
000 |
11111110 |
LED0 亮,其余灭 |
001 |
11111101 |
LED1 亮,其余灭 |
010 |
11111011 |
LED2 亮,其余灭 |
011 |
11110111 |
LED3 亮,其余灭 |
100 |
11101111 |
LED4 亮,其余灭 |
101 |
11011111 |
LED5 亮,其余灭 |
110 |
10111111 |
LED6 亮,其余灭 |
111 |
01111111 |
LED7 亮,其余灭 |
在DE2115开发板上完成功能验证,如下。
DE2115实现3-8译码器
四、心得体会
1、理论复习与实践结合
通过本次作业,我深刻体会到理论知识与实践操作的紧密关联。在复习组合逻辑电路设计时,我重新梳理了逻辑表达式化简(如卡诺图法、公式法)的重要性。
关键收获:
- 组合逻辑电路设计需从问题抽象出发,明确输入输出关系,再通过真值表、逻辑表达式进行优化。
2、Logisim与Verilog的对比
在对比Logisim与Verilog实现3-8译码器的过程中,我发现了以下差异:
设计方法:
Logisim:图形化界面设计,适合快速验证逻辑功能,但难以直接映射到硬件。
Verilog:基于硬件描述语言(HDL),通过代码生成RTL电路,可直接适配FPGA硬件。
仿真与实际硬件:
Logisim仿真结果仅验证逻辑正确性,而Verilog需考虑时序、信号传播延迟等实际硬件问题。
灵活性与扩展性:
Verilog支持参数化设计和模块化复用,更适合复杂系统开发。
3、DE2-115开发板实验
四位全加器实现
在开发板上实现四位全加器时,我遇到了以下挑战与解决方案:
-
挑战1:LED显示异常(全灭或错误亮起)。
-
原因:未考虑DE2-115的LED为低电平有效。
-
解决 :在代码中对输出信号取反(
assign Sum = ~sum_raw;
)。
-
-
挑战2:按键输入不稳定(抖动)。
- 解决 :添加消抖模块(
debounce
),通过延时采样稳定信号。
- 解决 :添加消抖模块(
3-8译码器实现
在3-8译码器实验中,我结合八段数码管实现了动态显示:
-
挑战:数码管显示需将二进制码转换为七段码。
- 解决:编写七段译码器模块,将3位输入映射到数码管段选信号。
4、经验总结
硬件设计的严谨性:
引脚分配、电平标准(如3.3V LVTTL)、信号方向需严格匹配开发板规格。实际硬件需考虑信号抖动、传播延迟等仿真中忽略的问题。
代码与硬件的协同:
Verilog代码需兼顾功能正确性和硬件适配性(如低电平有效、消抖处理)。