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.mzph.cn/news/896903.shtml

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

相关文章

中间件专栏之MySQL篇——MySQL事务原理、锁机制分析

MySQL的事务性也是其重要特性之一。 什么是事务:事务的本质是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是 一个不可分割的工作单位。 目的:事务的目的在于将数据库从一种一致性状态转…

机器学习的三个基本要素

机器学习的基本要素包括模型、学习准则(策略)和优化算法三个部分。机器学习方法之间的不同,主要来自其模型、学习准则(策略)、优化算法的不同。 模型 机器学习首要考虑的问题是学习什么样的模型(Model&am…

集成方案 | Docusign 能与哪些应用程序集成?

如何实现 Docusign 与多种系统平台之间的高效集成? 在企业跨境签约场景中,员工常常需要在电子签系统与办公应用(如钉钉、企业微信)、CRM、ERP 等系统之间来回切换,手动上传合同、下载签署文件并同步数据。这种繁琐的操…

2025华为OD机试真题目录【E卷+A卷+B卷+C卷+D卷】持续收录中...

摘要 本专栏提供2025最新最全的华为OD机试真题库(EABCD卷),包括100分和200分题型。题目包含题目描述、输入描述、用例、备注和解题思路、多种语言解法(Java/JS/Py/C/C)。希望小伙伴们认真学习、顺利通过。 声明 本专…

广域互联网关键技术详解(GRE/LSTP/IPsec/NAT/SAC/SPR)

《广域互联网关键技术详解》属于博主的“广域网”专栏,若想成为HCIE,对于广域网相关的知识需要非常了解,更多关于广域网的内容博主会更新在“广域网”专栏里,请持续关注! 一.前言 广域互联技术纷杂多样,不…

AF3 _correct_post_merged_feats函数解读

AlphaFold3 msa_pairing 模块的 _correct_post_merged_feats 函数用于对合并后的特征进行修正,确保它们符合预期的格式和要求。这包括可能的对特征值进行调整或进一步的格式化,确保合并后的 FeatureDict 适合于后续模型的输入。 主要作用是: 在多链蛋白质 MSA(多序列比对)…

Docker 学习(三)——数据管理

容器中的管理数据主要有两种方式: 数据卷 (Data Volumes): 容器内数据直接映射到本地主机环境; 数据 卷容器( Data Volume Containers): 使用特定容器维护数据卷 1.数据卷 数据卷…

基于SSM+Vue+uniapp的考研交流(带商城)小程序+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

2025-03-04 学习记录--C/C++-PTA 练习5-3 字符金字塔

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、解题步骤 ⭐️ 第1步、把字符和一个空格看作整体,即"G_"; 第2步、外…

DeepSeek集成到VScode工具,让编程更高效

DeepSeek与VScode的强强联合,为编程效率树立了新标杆。 DeepSeek,一款卓越的代码搜索引擎,以其精准的索引和高速的检索能力,助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后,开发者无需离开熟悉的编辑…

前端-css(预编译器sass)

1.sass(scss->sass第三代) Sass3 -> Scss(Sassy CSS),SCSS(Sassy CSS) 是 CSS 语法的扩展. 2.scss注释 Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会 被完整输出到编译后的 CSS 文件中,而后者则不会 3.scss定义变量 …

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用? 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…

Android 获取jks的SHA1值:java.io.IOException: Invalid keystore format

命令生成 keytool -list -v -keystore 全路径.jks -alias 别名 -storepass 密码 -keypass 密码 1、遇到 的问题: 通过快捷键 ‘win r’ 启动的小黑框运行上面的命令会出现下面这个错误keytool 错误: java.io.IOException: Invalid keystore format 2、解决问题 …

掌握 ElasticSearch 聚合查询:Aggregations 入门与实战

掌握 ElasticSearch 聚合查询:Aggregations 入门与实战 一、引言 (Introduction)二、数据准备 (Data Preparation)2.1 创建索引 (Create Index)2.2 批量导入数据 (Bulk Import Data) 三、聚合查询基础 (Aggregation Basics)3.1 什么是聚合查询?(What are…

Microsoft.Office.Interop.Excel 的简单操作

Microsoft.Office.Interop.Excel 的简单操作 1、安装 Microsoft.Office.Interop.Excel2、声明引用 Microsoft.Office.Interop.Excel3、简单的新建 EXCEL 操作代码4、将 DataGridView 表数据写到 EXCEL 操作代码5、将 EXCEL 表数据读取到 C# 数据表 DataTable 操作代码 1、安装 …

LLM 对话框组件 | 字节青训营前端开发项目

系统介绍 LLM对话框项目系统介绍 一、项目概述 选题背景随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著进展,其中对话系统(Dialog System)作为NLP的重要应用方向,正逐渐渗透到人们的日常生活中。从智能客服到语音助手,从智能家居到在线教育,对话系统以…

k8s命名空间和资源配额

在现代的云计算环境中,容器化技术已成为主流。而 Kubernetes(简称 k8s)作为一项开源的容器编排系统,广泛应用于各类场景。本文将详细介绍关于 k8s 中的命名空间和资源配额,帮助你更好地理解和管理你的集群资源。 k8s …

从统计学视角看机器学习的训练与推理

从统计学视角看机器学习的训练与推理 目录 引言:统计学与机器学习的奇妙缘分训练与推理:你得先学会“看数据”再“用数据”最大似然估计(MLE):从直觉到数学证明 3.1 伯努利分布的MLE3.2 单变量高斯分布的MLE3.3 多元…

AI赋能企业协作4-NL2Sql技术路线

1.1 对话即服务的一点思考 在数智化转型的过程中,基于即时通信(IM)的协作平台正悄然成为企业智能化转型的“新基建”。协作平台天然具备高频交互、实时协同和场景化落地的特性,仿佛是为对话式AI量身定制的试验场——员工在熟悉的聊…

批量提取 Word 文档中的页面

如何将 Word 文档中的页面提取出来形成一个新的文档呢?比如将 Word 文档中的第一页提取出来、将 Word 文档中的最后一页提取出来、再或者将 Word 文档中的中间几页提取出来等等。人工的处理肯定非常的麻烦,需要新建 Word 文档,然后将内容复制…