DE2115实现4位全加器和3-8译码器(FPGA)

一、配置环境

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 项目

  1. 打开Quartus 软件。

  2. 点击 File -> New Project Wizard

  3. 设置项目路径和项目名称(例如**four_bit_adder**)。

  4. 选择目标器件:

    • Family 中选择**Cyclone IV E**。

    • Device 中选择 EP4CE115F29C7(DE2-115 的 FPGA 型号)。

  5. 完成项目创建。

就欧克了

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、项目创建

  1. 打开Quartus 软件。

  2. 点击 File -> New Project Wizard

  3. 设置项目路径和项目名称(例如**four_bit_adder**)。

  4. 选择目标器件:

    • Family 中选择**Cyclone IV E**。

    • Device 中选择 EP4CE115F29C7(DE2-115 的 FPGA 型号)。

  5. 完成项目创建。

2. 编写 Verilog 代码

  1. 在 Quartus 中,点击 File -> New ,选择**Verilog HDL File** ,然后点击 OK

  2. 编写 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. 编译和综合

  1. 在 Quartus 中,点击 Processing -> Start Compilation,开始编译。

左下角是编译过程,

编译结果如下,

4. 引脚分配

  1. 打开引脚分配工具:

    • 点击**Assignments -> Pin Planner**。
  2. 根据 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

  1. 连接硬件

    • 使用 USB-Blaster 线连接 DE2-115 的 JTAG 接口

    • 打开开发板电源(电源开关位于右上角)。

  2. 打开编程工具

    • 点击 Tools -> Programmer
  3. 配置编程文件

    • 点击 Add File ,选择生成的 .sof 文件(路径:output_files/four_bit_adder.sof)。

    • 确保 Program/Configure 选项被勾选。

  4. 下载程序

    • 点击 Start ,等待进度条完成并显示 Programming Succeeded

DE2115开发板上实现4位全加器前的基础测试

基础测试

基础测试-CSDN直播

测试用例

输入组合 预期输出 硬件验证方法
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位全加器

DE2115实现4位全加器-CSDN直播

三、实现3-8译码器

1、项目创建

  1. 打开Quartus 软件。

  2. 点击 File -> New Project Wizard

  3. 设置项目路径和项目名称(例如 decoder_3to8 )。

  4. 选择目标器件:

    • Family 中选择**Cyclone IV E**。

    • Device 中选择 EP4CE115F29C7(DE2-115 的 FPGA 型号)。

  5. 完成项目创建。

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. 引脚分配

  1. 打开引脚分配工具:

    • 点击 Assignments -> Pin Planner
  2. 根据 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

  1. 连接硬件

    • 使用 USB-Blaster 线连接 DE2-115 的 JTAG 接口

    • 打开开发板电源(电源开关位于右上角)。

  2. 打开编程工具

    • 点击 Tools -> Programmer
  3. 配置编程文件

    • 点击 Add File ,选择生成的 .sof 文件(路径:output_files/decoder_3to8.sof)。

    • 确保 Program/Configure 选项被勾选。

  4. 下载程序

    • 点击 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译码器

DE2115实现3-8译码器-CSDN直播

四、心得体会

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代码需兼顾功能正确性和硬件适配性(如低电平有效、消抖处理)。

相关推荐
教练、我想打篮球5 分钟前
04 基于 STM32 的时钟展示程序
stm32·单片机·嵌入式硬件
芯岭技术39 分钟前
普冉MS32C001单片机,国产32位单片机,芯片特性和功能介绍
单片机·嵌入式硬件
ThreeYear_s1 小时前
基于FPGA婴儿安全监护系统(蓝牙小程序监测)
fpga开发·小程序
吸纹鸽2 小时前
蓝桥杯FPGA赛道第二次模拟题代码
fpga开发·蓝桥杯
9527华安4 小时前
Altera系列FPGA实现图像视频采集转HDMI/LCD输出,提供4套Quartus工程源码和技术支持
fpga开发·ov5640·quartus·altera
156082072196 小时前
FPGA_Verilog实现QSPI驱动,完成FLASH程序固化
fpga开发
小昭dedug6 小时前
功能安全的关键——MCU锁步核技术全解析(含真实应用方案)
单片机·嵌入式硬件
负里557 小时前
STM32-模电
嵌入式硬件
BW.SU7 小时前
单片机 + 图像处理芯片 + TFT彩屏 指示灯控件
单片机·嵌入式硬件·人机交互·控件·触摸屏设计·指示灯·液晶屏
逼子格8 小时前
二极管钳位电路——Multisim电路仿真
嵌入式硬件·硬件工程·硬件工程师·滤波器·硬件工程师真题·钳位电路·二极管钳位电路