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

发布于:2025-03-05 ⋅ 阅读:(101) ⋅ 点赞:(0)

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 位二进制数以及一个进位输入进行相加,产生一个和输出以及一个进位输出。其逻辑关系可以通过真值表来描述:

输入 输入 输入 输出 输出
a b cin sum cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

从真值表中可以分析出,和输出(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. 真值表

A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1

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辅助分析,都得到了及时解决。


网站公告

今日签到

点亮在社区的每一天
去签到