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

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

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

    相关文章

    Distilling the Knowledge in a Neural Network(提炼神经网络中的知识)

    蒸馏&#xff1a;把比较不纯净的水&#xff0c;通过加热&#xff0c;凝聚成水蒸气&#xff0c;然后再凝聚成纯净的蒸馏水。 知识蒸馏&#xff0c;也是把一个非常大的东西&#xff0c;蒸馏成一个小的&#xff0c;纯净的东西。 就是用大的教师网络&#xff0c;把知识传递给小的网…

    【AI论文】MedVLM-R1:通过强化学习激励视觉语言模型(VLMs)的医疗推理能力

    摘要&#xff1a;推理是推进医学影像分析的关键前沿领域&#xff0c;其中透明度和可信度对于赢得临床医生信任和获得监管批准起着核心作用。尽管医学视觉语言模型&#xff08;VLMs&#xff09;在放射学任务中展现出巨大潜力&#xff0c;但大多数现有VLM仅给出最终答案&#xff…

    M4 Mac mini运行DeepSeek-R1模型

    前言 最近DeepSeek大模型很火&#xff0c;实际工作中也有使用&#xff0c;很多人觉得需要很好的显卡才能跑起来&#xff0c;至少显存需要很高&#xff0c;但实际上一般的核显机器也能跑起来&#xff0c;只不过内存要求要大&#xff0c;对于个人而言&#xff0c;实际上Mac M芯片…

    Chart.js 电商数据可视化实战:构建企业级销售仪表盘(附完整源码)

    副标题:零配置开发多维度商业看板,掌握动态数据联动与性能调优 📝 文章摘要 本文通过 Chart.js 4.x 实现电商场景下的 多维度销售数据可视化看板,包含: ✅ 实时更新的柱状趋势图 ✅ 商品类目占比动态饼图 ✅ 企业级功能:自动刷新、响应式布局、内存管理 ✅ 生产环境最佳…

    【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题

    ???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

    高频面试题(含笔试高频算法整理)基本总结回顾5

    目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 &#xff08;一&#xff09;Java高频面试题整理 &#xff08;二&#xff09;JVM相关面试问题整理 &#xff08;三&#xff09;MySQL相关面试问题整理 &#xff08;四&#xff09;Redis相关面试…

    【数据挖掘】Pandas

    Pandas 是 Python 进行 数据挖掘 和 数据分析 的核心库之一&#xff0c;提供了强大的 数据清洗、预处理、转换、分析 和 可视化 功能。它通常与 NumPy、Matplotlib、Seaborn、Scikit-Learn 等库结合使用&#xff0c;帮助构建高效的数据挖掘流程。 &#x1f4cc; 1. 读取数据 P…

    Linux相关概念和易错知识点(33)(基于阻塞队列和环形队列的生产消费模型实现、sem的应用)

    目录 1.基于阻塞队列的生产消费模型 &#xff08;1&#xff09;生产消费模型实现的条件 &#xff08;2&#xff09;初始化模型 &#xff08;3&#xff09;生产和消费 &#xff08;3&#xff09;所有代码 ①test.cc ②myBlockQueue.hpp 2.基于环形的生产消费模型、sem的应…

    [SAP MM] 标准价格和移动平均价格

    在SAP MM模块中&#xff0c;移动平均价格与标准价格是两种重要的物料计价方式 1.标准价格(S价格) 以一个固定的价格表示物料在一段期间的价值 如果物料主数据维护了标准价格(S价格)&#xff0c;那么不论物料的采购订单价格与标准价格的差异有多大&#xff0c;都不会改变物料…

    计算机毕业设计Python+DeepSeek-R1大模型期货价格预测分析 期货价格数据分析可视化预测系 统 量化交易大数据 机器学习 深度学习

    温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

    【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)

    AIGC系列博文&#xff1a; 【AIGC系列】1&#xff1a;自编码器&#xff08;AutoEncoder, AE&#xff09; 【AIGC系列】2&#xff1a;DALLE 2模型介绍&#xff08;内含扩散模型介绍&#xff09; 【AIGC系列】3&#xff1a;Stable Diffusion模型原理介绍 【AIGC系列】4&#xff1…

    推进断裂力学:深入研究工程模拟中的 UMM

    揭秘高级断裂分析&#xff1a;UMM 在 Ansys Mechanical 中的作用 工程模拟已成为产品设计和开发中不可或缺的一部分&#xff0c;尤其是用于评估材料在各种条件下的行为和耐久性。该领域的前沿是断裂分析&#xff0c;它在确保从日常工具到桥梁和飞机等复杂结构的安全性和耐用性…

    dify绑定飞书多维表格

    dify 绑定飞书和绑定 notion 有差不多的过程&#xff0c;都需要套一层应用的壳子&#xff0c;而没有直接可以访问飞书文档的 API。本文记录如何在dify工具中使用新增多条记录工具。 创建飞书应用 在飞书开放平台创建一个应用&#xff0c;个人用户创建企业自建应用。 自定义应…

    C++ ++++++++++

    初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时&#xff0c;必须要指定出相应的数据类型&#xff0c;否则无法给变量分配内存 整型 sizeof关键字 浮点型&#xff08;实型&#xff09; 有效位数保留七位&#xff0c;带小数点。 这个是保…

    如何通过rust实现自己的web登录图片验证码

    在进行web系统开发时&#xff0c;为保障系统登录安全&#xff0c;登录页面中的验证码必不可少。在java中&#xff0c;我们可以利用相应的2D图像库快速生成图形验证码&#xff0c;而对于rust&#xff0c;我们没有合适的标准库进行图像验证码的生成。今天&#xff0c;我们通过使用…

    Python中文自然语言处理库SnowNLP

    SnowNLP 介绍 SnowNLP 是一个基于 Python 的中文自然语言处理库&#xff0c;专为处理中文文本而设计。它受到 TextBlob 的启发&#xff0c;但与 TextBlob 不同的是&#xff0c;SnowNLP 没有使用 NLTK&#xff0c;所有的算法都是自己实现的&#xff0c;并且自带了一些训练好的字…

    【网络】数据链路层(以太网帧格式、MTU、ARP)、NAT、内网穿透

    文章目录 1. 数据链路层2. 以太网帧格式3. MTU3.1 认识MTU3.2 MTU 对于 TCP 协议的影响 4. 局域网通信原理5. ARP协议5.1 基本概念5.2 原理5.3 ARP 数据报的格式 6. NAT技术7. 内网穿透8. 内网打洞9. 代理服务器9.1 正向代理9.2 反向代理9.3 NAT VS 代理服务器 10.网络总结 1. …

    【异常】—— 我与C++的不解之缘(二十四)

    一、异常是什么&#xff1f; 异常&#xff0c;这个十分陌生的名词&#xff1b; 试想一下&#xff0c;在我们之前写代码的过程中&#xff0c;程序运行出现了一些问题&#xff08;就比如AVL树更新平衡因子的过程中&#xff0c;平衡因子出现了不可能的现象&#xff0c;这说明这个…

    VSCode离线安装插件

    最近在其他电脑设备上部署vscode环境出现问题&#xff0c;在vscode里直接安装插件失败&#xff0c;软件提示如下&#xff1a;&#xff08;此前已经用此方法安装过中文插件&#xff09; 这里我们选择手动下载&#xff0c;会自动在浏览器中跳转到该插件的下载链接并自动下载插件&…

    服务端驱动UI架构解析:React Server Components与流式渲染的革命

    引言&#xff1a;重新定义前后端边界 Shopify采用React Server Components后&#xff0c;动态模块加载速度提升340%&#xff0c;客户端Bundle减少62%。Discord重构消息流服务&#xff0c;通过流式渲染使首屏TTI从4.2s降至1.1s。Vercel生产数据显示&#xff0c;混合渲染技术让L…