当前位置: 首页 > news >正文

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

一、配置环境

1、Quartus 18.1安装教程

软件:Quartus版本:Quartus 18.1
语言:英文大小:5.78G
安装环境:Win11/Win10/Win8/Win7硬件要求:CPU@2.0GHz 内存@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硬件要求:CPU@2.0GHz 内存@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 标准
clkPIN_Y250MHz 时钟Input3.3-V LVTTL
A[0]PIN_AB28拨码开关 SW0Input3.3-V LVTTL
A[1]PIN_AC28拨码开关 SW1Input3.3-V LVTTL
A[2]PIN_AC27拨码开关 SW2Input3.3-V LVTTL
A[3]PIN_AD27拨码开关 SW3Input3.3-V LVTTL
B[0]PIN_AB26拨码开关 SW4Input3.3-V LVTTL
B[1]PIN_AD26拨码开关 SW5Input3.3-V LVTTL
B[2]PIN_AC26拨码开关 SW6Input3.3-V LVTTL
B[3]PIN_AB25拨码开关 SW7Input3.3-V LVTTL
Cin_rawPIN_M23按键 KEY0Input3.3-V LVTTL
Sum[0]PIN_G19LEDR0Output3.3-V LVTTL
Sum[1]PIN_F19LEDR1Output3.3-V LVTTL
Sum[2]PIN_E19LEDR2Output3.3-V LVTTL
Sum[3]PIN_F21LEDR3Output3.3-V LVTTL
CoutPIN_F18LEDR4Output3.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=0011B=0101Cin=0Sum=1000Cout=0SW3-SW0: 0011;SW7-SW4: 0101;KEY0弹起 → LEDR3亮,其余灭;LEDR4灭。
    A=1111B=0001Cin=0Sum=0000Cout=1SW3-SW0: 1111;SW7-SW4: 0001;KEY0弹起 → LEDR0-LEDR3全灭;LEDR4亮。
    A=1010B=0101Cin=1Sum=0000Cout=1SW3-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_AB28SW0
    in[1]PIN_AC28SW1
    in[2]PIN_AC27SW2
    out[0]PIN_G19LEDR0
    out[1]PIN_F19LEDR1
    out[2]PIN_E19LEDR2
    out[3]PIN_F21LEDR3
    out[4]PIN_F18LEDR4
    out[5]PIN_E18LEDR5
    out[6]PIN_J19LEDR6
    out[7]PIN_H19LEDR7

    保存引脚分配。

    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)现象
    00011111110LED0 亮,其余灭
    00111111101LED1 亮,其余灭
    01011111011LED2 亮,其余灭
    01111110111LED3 亮,其余灭
    10011101111LED4 亮,其余灭
    10111011111LED5 亮,其余灭
    11010111111LED6 亮,其余灭
    11101111111LED7 亮,其余灭

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

    相关文章:

  1. linux中使用firewall命令操作端口
  2. C++ Windows下屏幕截图
  3. DeepSeek-R1国产化系统gpu驱动+cuda+ollama+webui可视化离线私有化部署
  4. 【Python】——使用python实现GUI图书管理系统:Tkinter+SQLite实战
  5. 大模型工程师学习日记(十):基于 LangChain 构建向量存储和查询 Qdrant
  6. LearnOpenGL——高级光照(中)
  7. Kali CentOs 7代理
  8. 【JavaEE】-- 多线程(初阶)4
  9. 投入与专注
  10. 【Pandas】pandas Series replace
  11. 【Python/Pytorch】-- 创建3090Ti显卡所需环境
  12. 【芯片设计】AI芯片前端设计工程师面试记录·20250303
  13. Django:文件上传时报错in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.
  14. 魔百盒CM311-1a_YST_晶晨S905L3A芯片_2+8G_安卓9.0_免拆卡刷固件包
  15. 不同类型光谱相机的技术差异比较
  16. WPF-Avalonia-ReactiveUI-路由实践
  17. 【商城实战(1)】启航:从0到1搭建电商帝国的第一步
  18. Rust编程实战:Rust实现简单的Web服务,单线程性能问题
  19. 第八篇《九变篇》
  20. android13打基础: 控件alertdialog
  21. 山东做网站三五/关键词优化seo费用
  22. 新网站应该怎么做seo/关键词排名怎么做上首页
  23. 上海web网站建设/厦门seo关键词优化
  24. 服务周到的上海网站建设公/网络推广优化服务
  25. 学做美食饮品网站/国外免费舆情网站有哪些软件
  26. 外贸网页制作公司哪家好/游戏优化大师有用吗