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

FPGA学习(一)——DE2-115开发板编程入级

FPGA学习(一)——DE2-115开发板编程入级

一、实验目的

通过 1 位全加器的详细设计,深入掌握原理图输入以及 Verilog 的两种设计方法,熟悉 Quartus II 13.0 软件的使用流程,以及在 Intel DE2-115 开发板上的硬件测试过程,提升对 FPGA 编程和数字电路设计的理解与实践能力。

二、实验环境

(一)软件环境

1. Quartus II 13.0

用于 FPGA 编程和设计的集成开发环境,提供原理图编辑、代码编写、编译、仿真等功能,是本次实验的核心软件工具。

2.USB Blaster 驱动程序

用于将编译后的 FPGA 配置文件下载到开发板上,实现硬件与软件的连接,进行实际的硬件测试。

(二)硬件环境

Intel DE2-115 开发板 :

搭载 Cyclone IV E 系列的 EP4CE11529C7 芯片
在这里插入图片描述

三、实验原理

(一) 1 位全加器原理

1 位全加器是一种基本的数字电路模块,用于对两个 1 位二进制数以及一个进位输入进行相加,产生一个和输出以及一个进位输出。其逻辑关系可以通过真值表来描述:

输入输入输入输出输出
abcinsumcout
00000
00110
01010
01101
10010
10101
11001
11111

从真值表中可以分析出,和输出(sum)是三个输入的异或运算结果,进位输出(cout)是输入的某些组合的或运算结果。具体逻辑表达式如下:

sum = a ⊕ b ⊕ cin

cout = (a & b) | (a & cin) | (b & cin)

为实现这个逻辑功能,可以采用两个半加器和一个或门连接而成。半加器用于对两个输入位进行相加,产生和与进位输出,全加器则在此基础上考虑了进位输入的影响。

verilog代码如下:

module full_adder (
    input a,
    input b,
    input cin,
    output sum,
    output cout
);
    assign sum = a ^ b ^ cin;
    assign cout = (a & b) | (a & cin) | (b & cin);
endmodule

(二) 四位全加器原理

1. 四位全加器概述

四位全加器由四位全加器构成,用于进行两个4位二进制数的相加。每个一位全加器处理一个数位,低位的进位输出连接到高位的进位输入。

结构图

              ┌─────┐     ┌─────┐     ┌─────┐     ┌─────┐
A3 ──────────│ FA  │─ Sum3│ FA  │─ Sum2│ FA  │─ Sum1│ FA  │─ Sum0
B3 ──────────│     │      │     │      │     │      │     │
Cin_prev ─────│ FA  │─ Cout│ FA  │─ Cout│ FA  │─ Cout│ FA  │─ Cout_next
              └─────┘     └─────┘     └─────┘     └─────┘
  • 输入:两个 4 位加数 A3A2A1A0 和 B3B2B1B0,以及进位输入 Cin_prev(通常初始为 0)。
  • 输出:4 位和 S3S2S1S0 和进位输出 Cout_next。

2. 工作原理

  • 最低位(第0位):加数 A0 和 B0 相加,初始进位 Cin_prev(通常为0)作为进位输入。产生和 Sum0 和进位 Cout0。
  • 中间位(第1位、第2位和第3位):加数 Ai(i=1,2,3)与 Bi(i=1,2,3)相加,加上来自低位的进位输出 Cout0,产生和 Sumi 和进位 Couti+1。
  • 最高位(第3位):加数 A3、B3 和进位 Cout2,产生和 Sum3 和进位 Cout3(作为整个加法器的进位输出)。

verilog代码如下:

module four_adder (  
    input [3:0] A, // 四位数 A  
    input [3:0] B, // 四位数 B  
    output reg [4:0] seg1
);     
    wire [4:0] sum;
	 assign sum = A + B;
    always@(*)
	 seg1 = sum;  
endmodule

(三) 3-8译码器原理

1. 基本概念

3-8 译码器是一种组合逻辑电路,用于将 3 位二进制输入地址代码转换为8个输出信号中的一个高电平有效信号。在数字系统中广泛用于控制信号的译码。

2. 输入与输出

  • 输入:3 位二进制输入(A、B、C),通常表示地址或选择信号。
  • 输出:8 个输出(Y0 到 Y7),每个对应输入的唯一组合。例如,输入 000 时 Y0 输出高电平,其他输出为低电平;输入 111 时 Y7 输出高电平。

3. 真值表

ABCY0Y1Y2Y3Y4Y5Y6Y7
00010000000
00101000000
01000100000
01100010000
10000001000
10100000100
11000000010
11100000001

4. 逻辑表达式

每个输出 ( Y_i ) 是输入 A、B、C 的组合逻辑函数。例如:

  • ( Y0 = \overline{A} \cdot \overline{B} \cdot \overline{C} )
  • ( Y1 = \overline{A} \cdot \overline{B} \cdot C )
  • ( Y2 = \overline{A} \cdot B \cdot \overline{C} )
  • ( Y3 = \overline{A} \cdot B \cdot C )
  • ( Y4 = A \cdot \overline{B} \cdot \overline{C} )
  • ( Y5 = A \cdot \overline{B} \cdot C )
  • ( Y6 = A \cdot B \cdot \overline{C} )
  • ( Y7 = A \cdot B \cdot C )

5. 电路结构

典型的设计使用门电路来实现这些逻辑表达式。例如,每个输出可以由一个与非门构成,其输入来自三个输入位(A、B、C)及其反相形式,具体如下:

  • ( Y0 = (A + B + C)’ )
  • ( Y1 = (A + B + \overline{C})’ )
  • ( Y2 = (A + \overline{B} + C)’ )
  • 等等。

verilog代码如下:

module decoder3_8 (  
    input [2:0] A,    // 3个按钮的输入  
    output reg [6:0] B // 7个led灯的输出 
);  

    always @(*) begin  
        case (A)  
            3'b000: B = 7'b0000000; 
            3'b001: B = 7'b0000001; 
            3'b010: B = 7'b0000010; 
            3'b011: B = 7'b0000100; 
            3'b100: B = 7'b0001000; 
            3'b101: B = 7'b0010000;  
            3'b110: B = 7'b0100000; 
            3'b111: B = 7'b1000000; 
            default: B = 7'b0000000; // 默认情况下,所有输出为0  
        endcase  
    end  

endmodule

四、实验步骤

新建工程

  1. 打开 Quartus II 13.0 软件,点击菜单栏中的 “File”->“New Project”,进入新建工程向导界面。
    在这里插入图片描述
  2. 在 “Project Name” 中输入工程名称, “4_bit_full_adder”和“decode3-8”,在 “Project Location” 中选择工程存放路径,如 “D:\Quartus\project1”,然后点击 “Next”。
    在这里插入图片描述

在这里插入图片描述

  1. 选择目标芯片,点击 “Family” 下拉菜单,选择 “Cyclone IV E” 系列,然后在芯片列表中找到并选中 “EP4CE11529C7”,点击 “Next”。
    在这里插入图片描述
  2. 点击“Next”和 “Finish” 完成工程创建。

新建文件

点击新建文件,选择Verilog HDL File

复制上文中的Verilog代码

将设计项目编译仿真

点击工具栏中的 “Compile” 按钮进行编译。

引脚绑定及硬件下载测试

  1. 引脚绑定 :根据 DE2-115 开发板的硬件电路连接情况,确定输入输出引脚与 FPGA 芯片引脚的对应关系。
    • 打开引脚绑定窗口,点击菜单栏中的 “Assignments”->“Pin Planner”。
    • 在引脚绑定窗口中,从左侧的 “Nodes” 列表中选择要绑定的输入输出引脚,如 “ain”,然后在右侧的 “Location” 列表中找到对应的 FPGA 引脚号,完成所有输入输出引脚的绑定。
    • 绑定完成后,点击 “File”->“Save” 保存引脚绑定设置,并再次点击 “Compile” 按钮进行编译,确保引脚绑定生效。
      在这里插入图片描述

在这里插入图片描述

  1. 硬件下载测试 :将 DE2-115 开发板接上电源,通过 USB 数据线将开发板与电脑连接。点击 Quartus II 主界面工具栏中的 “Programmer” 按钮,打开编程器窗口。
    • 在编程器窗口中,点击 “Hardware Setup” 按钮,选择 “USB Blaster” 作为下载硬件,点击 “OK” 进行连接。
    • 在 “File” 列表中,选择编译生成的 “.sof” 文件,点击 “Start” 按钮开始下载。下载过程中,观察进度条,当进度条达到 100% 时,表示下载成功。
    • 下载成功后,可以通过拨动开发板上的拨码开关输入不同的二进制数,观察 LED 灯的亮灭情况,验证全加器的硬件功能是否正确。

五、实验结果

硬件测试结果

在硬件测试过程中,通过拨动开发板上的拨码开关输入不同的二进制数,观察 LED 灯的亮灭情况,结果与预期一致。

演示视频

六、实验总结

通过本次实验,成功设计并实现了 1 位全加器,掌握了原理图输入以及 Verilog 的两种设计方法,熟悉了 Quartus II 软件的使用流程和 DE2-115 开发板的硬件测试过程。在实验过程中,遇到了一些问题,如原理图连接错误、引脚绑定错误等,通过仔细检查和使用AI辅助分析,都得到了及时解决。


http://www.kler.cn/a/572544.html

相关文章:

  • 【C#】检查已有窗口,防止重复打开
  • Fiddler抓取App接口-Andriod/IOS配置方法
  • FMEA工具的发展历程及芯片行业的采用方式介绍-——芯片电子行业适用性分析
  • Ajax动态加载 和 网页动态渲染 之间的区别及应用场景
  • NVIDIA(英伟达) GPU 芯片架构发展史
  • Java多线程与高并发专题——ConcurrentHahMap 在 Java7 和 8 有何不同?
  • React中实现页面切换的深度指南:从基础到高级实践
  • GPIO的简介
  • 深入理解JavaScript的执行机制
  • 机器学习4-PCA降维
  • 14、TCP连接如何确保可靠性【高频】
  • shell指令(三)及makefile
  • Docker 的应用场景
  • Spring Expression Language (SpEL)(详解)
  • 【每日学点HarmonyOS Next知识】tabs切换卡顿、输入框焦点、打开全新web、输入框密码类型、非法变量值
  • 当电脑JDK的位置被移动,如何修改IDEA中JDK被修改后的位置
  • 深入MiniQMT:实现远程下单的高效解决方案
  • 如何设计高并发分布式系统的唯一ID?主流方案深度解析与实战选型指南
  • RabbitMQ 2025/3/5
  • 优优绿能闯上市:业绩变脸,万帮新能源多次减持,实控人忙套现