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

news2025/3/6 2:29:19

一、配置环境

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

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310303.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

    目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…

    run方法执行过程分析

    文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

    面试-----每日一题

    一、字节一面&#xff08;操作系统&#xff09; 什么是死锁&#xff1f;如何处理死锁问题&#xff1f; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通讯而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。…

    CentOS 7中安装Dify

    Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等&#xff0c;让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时&#xff0c;会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…

    qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系

    qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系 code review! 文章目录 qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系一.Qt关键的环境变量1.1.PATH1.2.LD_LIBRARY_PATH1.3.QML2_IMPORT_PATH二.若不手动设置这三个环境变量2.1.PATH 的默认路径2.2.LD_LIBRARY_…

    Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果

    Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果 目录 Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果 一、简单介绍 二、简单介绍 carousel_slider 三、安装 carousel_slider 四、简单案例实现 五、关键代码 一、简单介…

    【JavaScript—前端快速入门】JavaScript 对象与函数

    JavaScript 对象 1. JavaScripe 数组 创建数组的方式 使用 new 关键字创建 使用字面量方式创建 [常用] 注意&#xff0c;JavaScipt 不要求数组元素类型都相同&#xff1b; 数组操作 读&#xff1a;使用下标的方式访问数组元素&#xff08;从0开始) 保存代码&#xff0c;打开…

    java中的局部变量

    文章目录 一、定义二、作用域和作用位置三、声明周期和初始化四、内存管理五、Java内存区域划分六、例子 一、定义 在java中&#xff0c;局部变量指在方法、构造方法、代码块&#xff08;如{}包裹的语句块&#xff09;内部声明的变量 class work {{int a 10;}public work() {i…

    (IDE接入DeepSeek)简单了解DeepSeek接入辅助开发与本地部署建议

    重点&#xff1a;IDE接入DeepSeek是否收费 收费&#xff01; 本文章主要是为了给小白避雷&#xff0c;目前很多文章告诉大家怎么接入DeepSeek&#xff0c;但是并未告知大家是否收费。如果是想白嫖的&#xff0c;就可以不用去接入了。 一、引言 最近爆火的AI人工智能工具DeepSe…

    【算法学习之路】5.贪心算法

    贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳&#xff01;3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也写了几篇&#xff0c;题单正在更新&#xf…

    0x03 http协议和分层架构

    HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…

    智能合约安全指南 [特殊字符]️

    智能合约安全指南 &#x1f6e1;️ 1. 安全基础 1.1 常见漏洞类型 重入攻击整数溢出权限控制缺陷随机数漏洞前后运行攻击签名重放 1.2 安全开发原则 最小权限原则检查-生效-交互模式状态机安全失败保护机制 2. 重入攻击防护 2.1 基本防护模式 contract ReentrancyGuarde…

    【Python项目】基于Python的书籍售卖系统

    【Python项目】基于Python的书籍售卖系统 技术简介&#xff1a;采用Python技术、MYSQL数据库等实现。 系统简介&#xff1a;书籍售卖系统是一个基于B/S结构的在线图书销售平台&#xff0c;主要分为前台和后台两部分。前台系统功能模块分为&#xff08;1&#xff09;用户中心模…

    【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

    【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信&#xff08;未成功版&#xff09; 上次说基于UDP的打洞程序改了五版一直没有成功&#xff0c;要写一下问题所在&#xff0c;但是我后续又查询了一些资料&#xff0c;成功实现了&#xff0c;这次先写一下未成功的…

    (1)udp双向通信(2)udp实现文件复制(3)udp实现聊天室

    一.udp双向通信 1.fork进程实现双向通信 【1】head.h 【2】client客户端 &#xff08;1&#xff09;父进程从键盘获取字符串 &#xff08;2&#xff09;输入quit&#xff0c;发送结束子进程信号 &#xff08;3&#xff09;exit退出父进程 &#xff08;1&#xff09;子进程接受…

    c高级第五天

    1> 在终端提示输入一个成绩&#xff0c;通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash# 提示用户输入成绩 read -p "请输入成绩&#xff08;0-100&#xff09;&#xff1a;" score# 判断成…

    【JQuery—前端快速入门】JQuery 操作元素

    JQuery 操作元素 1. 获取/修改元素内容 三个简单的获取元素的方法&#xff1a; 这三个方法即可以获取元素的内容&#xff0c;又可以设置元素的内容. 有参数时&#xff0c;就进行元素的值设置&#xff0c;没有参数时&#xff0c;就进行元素内容的获取. 接下来&#xff0c;我们需…

    标签的ref属性 vue中为什么不用id标记标签

    标签的ref属性 vue中为什么不用id标记标签 假设有一对父子组件&#xff0c;如果父组件和子组件中存在id相同的标签&#xff0c;会产生冲突。通过id获取标签会获取到先加载那个标签。 标签的ref属性的用法 在父组件App中&#xff0c;引入了子组件Person。 并使用ref标记了Pe…

    7.1.1 计算机网络的组成

    文章目录 物理组成功能组成工作方式完整导图 物理组成 计算机网络是将分布在不同地域的计算机组织成系统&#xff0c;便于相互之间资源共享、传递信息。 计算机网络的物理组成包括硬件和软件。硬件中包含主机、前端处理器、连接设备、通信线路。软件中包含协议和应用软件。 功…

    IDEA 接入 Deepseek

    在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…