【入门教程一】基于DE2-115的My First FPGA 工程

1.1. 概述
这是一个简单的练习, 可以帮助初学者开始了解如何使用Intel Quartus 软件进行 FPGA 开发。
在本章节中,您将学习如何编译 Verilog 代码,进行引脚分配,创建时序约束,然后对 FPGA 进行编程,驱动开发板上8 个绿色 LED 的其中一个。您将使用一个 50MHz 的时钟输入(来自 板载晶振)来驱动计数器,并将LED 指定给其中一个计数器的输出位。
教程级别 : 初学者
1.2. 准备工作
◼ 硬件
⚫ Terasic DE2-115 套件
基于 Cyclone IV  FPGA 芯片。
作为扬名海内外的DE2开发板的升级款,DE2-115凭借功耗低、逻辑资源多、1存储器容量大、DSP功能、以及接口丰富等特性,可满足用户对多媒体、高品质图像处理、数字信号处理等各类开发要求,深受国内外高校师生的青睐。到目前为止,成千上万片的DE2-115已经在全球千余所名校实验室里“安家”,扮演着数字逻辑、EDA、数字系统设计等多项课程的“实力派网红”!主角儿,可谓是FPGA 教育界的新一代。
◼ 软件
⚫ Intel Quartus Prime 软件套件 Lite 版
此版本 FPGA 设计软件非常适合初学者,因为它可以免费下载而且不需要任何许可文
件。您可以通过链接:https://fpgasoftware.intel.com/?edition=lite 或者是 https://www.intel.com/content/www/us/en/software-kit/669444/intel-quartus-prime-lite-edition-design-software-version-17-1-for-windows.html 下载。
注 :安装文件较大(几千兆字节),而且需要花费很长时间才能下载和安装。为了最大
限度减少下载时间和所需的磁盘空间,我们建议您只下载本练习中所需的项目。取消选
中的“ Select All ” , 仅选择 Quartus Prime 和 Cyclone V device support 。如下图。
当下载并安装完 Intel Quartus 软件,您可以开始准备创建工程。
? 为什么 Intel Quartus 软件下载如此之大(请参考 1.5 章节的解释)
注 :本文档中的截图基于 v17.1 。使用较早版本或更高版本的 Intel Quartus 软件时,用 户体验可能有所差异。
1.3. 创建 FPGA 工程
步骤 1. 创建 Intel Quartus 软件工程
1a. 打开 Intel Quartus Prime 软件套件 Lite 版本
图 1-2 Intel Quartus Prime 软件窗口
4 1b. 打开 New Project Wizard
图 1-3 点击 New Project Wizard 按钮
1c. 在 Introduction 对话框下点击 Next
图 1-4 Introduction 对话框
5 1d. Directory , Name , Top-Level Entity
选择目录,用于存放工程。直接在桌面新建一个my_first_fpga的文件夹,并将工程路径指定到这个文件夹,工程名称和顶层实体都取名为my_first_fpga:
夹。点击 Next 。
图 1-5 工程位置明细
此工程目录用于本示例教程,但对于以后创建新的工程我们不做推荐。
? 以后的工程文件放在哪里 (请参考 1.5 章节的解释)
6 1e. 工程类型
继续选择Next,选择 Empty Project ,然后点击 Next 。
图 1-7 Project Type 对话框
1f. 添加文件
此处不必添加任何文件。点击 Next 。
图 1-8 Add Files 对话框
7 1g. Family, Device & Board Settings
注 :您可能需要展开窗口查看更多器件名称。
选择以下器件:
• Family : Cyclone IV E
• Device name : EP4CE115F29C7
注 :为了选择指定的器件,您需要点击向上 / 向下箭头,滚动器件支持清单直到 发现 EP4CE115F29C7 。或者您可以在 Name filter 框中输入器件名称,以缩小器 件清单。您也可能要展开 Name 区域查看整个器件名称。
图 1-9 Family 和 Device 对话框
点击 Next 。
1h. EDA Tool Settings
我们将使用默认的 EDA 工具和设置,所以不需要改变。点击 Next 。
8 图 1-10 EDA Tools 对话框
1i. Summary
点击 Finish 。
图 1-11 Summary 对话框
9 将显示以下窗口。
图 1-12 Your First Project 窗口
步骤 2. 创建 HDL 文件
硬件描述语言( HDL )
我们以 Verilog 作为 HDL 来使用。如果您熟悉 C 编程语言但对于 HDL 还是新 手,Verilog 与 C 相似。
2a. 前往 File 选项( Quartus 软件主窗口),点击 New 。选择 Verilog HDL File ,然 后点击 OK 。
图 1-13 选择 New Verilog HDL File
10 2b. 选择 File > Save As ,选择 my_first_fpga 作为文件名。这是顶层文件名(my_first_fpga.v)。点击 Save 。
图 1-14 保存 Verilog HDL 文件
步骤 3. 设计 Verilog 模块
3a. my_first_fpga.v 文件内容如下:
module my_first_fpga(input  wire clk,        // 50MHz input clockoutput wire LED         // LED ouput
);// create a binary counter
reg [31:0] cnt;                 // 32-bit counterinitial begincnt <= 32'h00000000;            // start at zeroendalways @(posedge clk) begincnt <= cnt + 1;                 // count upend//assign LED to 25th bit of the counter to blink the LED at a few Hz
assign LED = cnt[24];endmodule
拷贝如上代码到 my_first_fpga.v 文件中:
图 1-15 在文本编辑器中粘贴 Verilog HDL 代码
3b. Analysis & Synthesis
右键点击 Analysis & Synthesis ,然后点击 Start ,对 Verilog 代码执行语法检查和
综合。
或者直接点击Task窗格的Analysis & Synthesis如果您没有看到 Task 窗格,请到 View 菜单选择 Utility Windows ,然后选 择 Tasks 。
再或者直接点击如下如的按钮进行Analysis & Synthesis:
图 1-16 开始 Analysis & Synthesis
12 ? 在 Analysis & Synthesis 过程中发生了什么?(请参考 1.5 章节的解释)
如果该过程成功完成, Analysis & Synthesis 旁边将显示一个绿色勾型标记。如果在该过程
中提示有错误,请检查您的 Verilog 代码语法 , 确保与上述代码模块完全一致。
图 1-17 Analysis 完成
步骤 4. 选择引脚分配
4a. 在 Quartus 顶部导航栏,选择 Assignments > Pin Planner
图 1-18 Pin Planner 窗口
请注意, input (clk) 与 output (LED) 在 Node Name 下面已经列出,因为您已经运行
了 Analysis & Synthesis 。
图 1-19 Pin Planner Location 设置
4b. 依次点击每一个引脚,使 Location 列突出显示,然后输入以下表格中的 LED 和 clk 信号的引脚位置。其余列会自动填充数据(目前保持 默认值即可)。
图 1-20 Pin Planner 全部设置完成
其实上面表格的引脚分配信息来自DE2-115_v.x.x.x_SystemCD\DE2_115_schematic\de2-115_mb.pdf文件或者来自DE2-115_v.x.x.x_SystemCD\\DE2_115_user_manual\DE2_115_User_manual.pdf:
4f. 关闭 Pin Planner 。 Pin Planner 退出时会自动保存修改。
步骤 5. 创建 SDC 文件
编译 Verilog 代码之前,您需要为设计提供时序约束。您将创建 SDC(Synopsis
Design Constraints) 文件,其中包含有指示 Quartus 软件如何关闭设计中的时序的指
令。如果没有这个文件的话,您将在编译过程中遇到警告消息,因为 IntelQuartus
软件不知道如何关闭设计中的时序。
5a. 在 my_first_fpga  工程目录下创建 my_first_fpg.sdc 文件。与 Verilog 文件( .v 扩展文件)在同一
个目录下。将 如下 文件内容拷贝到 my_first_fpg.sdc 文件。
# inform quartus that the clk port brings a 50MHz clock into our design so
# that timing closure on our design can be analyzedcreate_clock -name clk -period "50MHz" [get_ports clk]# inform quartus that the LED output port has no critical timing requirements
# its a single output port driving an LED, there are no timing relationships
# that are critical for thisset_false_path -from * -to [get_ports LED]

15 5b. 保存 blink.sdc 文件。
? 什么是 SDC 文件,为什么需要它(请参考 1.5 章节的解释)
图 1-21 SDC 文件位置
5c. 现在把该 SDC 文件添加到 Intel Quartus 软件工程。选择 Project > Add/Remove
Files in Project . 在出现的 Settings 对话框中,点击 File name 文本框右侧的 “…”
浏览按钮。显示文件浏览对话框。选择 blink.sdc 文件,并点击 Open 按钮关闭
该对话框。这时候 blink.sdc 文件会在工程文件清单里,点击 OK 按钮关闭
Settings 对话框。
步骤 6. 编译 Verilog 代码
6a. 右键点击 Compile Design ,然后点击 Start . 这些工具会对设计进行综合、布局
布线、组合和执行时序分析。因为只有少数代码行,编译只需花几分钟就可完
成。
? 布局布线过程中发生了什么(请参考 1.5 章节的解释)
? Assembler 过程中发生了什么(请参考 1.5 章节的解释)
? 什么是时序分析(请参考 1.5 章节的解释)
16 图 1-22 编译设计
编译完成后,将会出现类似于如下的总结报告。
图 1-23 编译总结
编译完 Verilog 代码后,就可以对 FPGA 进行编程。
步骤 7. 对 FPGA 编程
最后一步就是对 FPGA 进行编程。
对 FPGA 进行编程,需要通过 USB Blaster 端口将开发板与电脑连接。
17 7a. 通过 USB Blaster  端口将开发板与电脑连接。
7b. 开发板连接电源 。
7c. 右键点击 Program Device (Open Programmer) 打开 Programmer 窗口。
图 1-24 打开 Quartus 软件的 Programmer 工具
7d. 选择 Hardware Setup 。
图 1-25 硬件设置
在 Currently selected hardware 的下拉项中选择 USB-Blaster[USB-0] ,然后点击 Close 。
图 1-26 Cable 选择
7e. 添加 .sof 文件
右键点击 EP4CE115F29 器件的 File 栏,选择 Change File 。
图 1-29 Change File
7g. 导向 output_file 文件夹,选择 my_first_fpga .sof ,然后点击 Open 。
20 图 1-30 选择 .sof 文件
这里的 my_first_fpga.sof 是配置文件, SRAM Object Files (.sof 文件 ) 是二进制文件包含
配置 SRAM-based 器件的数据,我们的 FPGA 是基于 SRAM 的。 Intel Quartus 软
件的 Program Device ( 也称为 Quartus Programmer) 查看 SOF 文件并为 FPGA 器
件获取下载的 bit stream 。
7h. 勾选 Program/Con fi gure ,然后点击 Start 。
图 1-31 开始编程
21 步骤 8. 观察闪烁的 LED
如果 Progress 进度显示 100% (Successful) , LED[0] 将闪烁。
图 1-32 编程成功
图 1-33 LED 闪烁
1.4. 拓展实验
◼ 更改闪烁频率
到此,您已经获得一个成功的 LED 闪烁工程,可以使用计数器的不同 bit 来修改 LED 的闪烁 22频率。 1HZ 即 1 次每秒( 1 秒一个周期),以 1HZ 的频率闪烁意味着 LED 每秒闪烁一次。 2HZ 就 是LED 每秒闪烁 2 次。 0.25HZ 就是指每 4 秒 LED 闪烁一次(慢闪)。使用计数器更高的 bit 获得 更慢的闪烁,使用低位的bit 可以获得更快闪烁(例如 cnt[22] )。测试不同的计数器位来观察 LED闪烁情况。
时钟和计数器公式
cnt[n] 其中 n 等于计数器位
2 𝑛 ; 在 verilog 示例代码中设置 n 为 24
2 24 = 16777216
时钟是 50MHZ 或 50 , 000 , 000HZ
Clock / 2 n 等于每秒闪烁次数
50,000,000 / 16,777,216 = 2.9802
大约每秒三次闪烁。
您需要做以下三点进行更改
1. 修改 Verilog 文件( blink.v ),在赋值语句中选择一个不同的计数器 bit
2. 重新编译设计
3. 重新为 FPGA 器件编程
◼ 添加更多 LED
试着将剩余的 7 个 LED 中的一个或多个连到其他计数器 bits, 每个 LED 以不同的频率闪烁。例 如,可以将一个新LED 连到计数器 bit23 ,会闪烁两次,和 bit 24 闪烁一样快。或者添加其余 全部7 个 LED ,每一个都连到特定的计数器 bit 。
您需要做以下几点进行更改:
1. 修改 verilog 代码
(a) 在模块定义中添加新的 LED
(b) 列出新的 LED ,作为输出
(c) 将每个新的 LED 赋给特定的计数器 bit ( cnt[n] )
? 我对硬件设计不熟悉,在哪能获取包含这些更改的 Verilog 代码?(请参考 1.5 章节的解
释)
2. 运行 Analysis & Synthesis
3. 用 Pin Planner 分配 LED 输出给引脚
23 确保设置合适的 I/O standard, current strength 和 slew rate 。 I/O 引脚与 LED 的连接如
下所示:
4. 重新编译设计
5. 重新对器件编程
1.5. 解释
为什么 Intel Quartus 下载量如此之大?
Intel Quartus 下载包含很多不同精密工具,用于创建自定义芯片设计,比如模拟 , 综合工具,
布局和布线引擎,时序分析仪和器件编程。几乎所有的这些功能都嵌入到 Intel Prime
Software 套件 FPGA 设计软件本身。下载也包括针对 Nios II soft CPU 的嵌入式软件设计
套件,以及一个或多个 FPGA 种类数据库 — 如本实例中的 Cyclone V FPGA 数据库。
以后的工程文件需要放在哪?
以下是在为工程选择目录时应该采取的一些指导 :
• 不要将工程放到 Intel Quartus 软件工具目录。新的 Intel Quartus 版本每 6 个月发布,
所以将它们放到具体版本的目录,会使得它们在每个新版本安装后会显得孤立。更坏
的情况是,如果您删除旧版本的工具,工程可能会丢失。
• 避免工程路径名称有空格,因为一些工具的目录路径不允许有空格。在路径名称中,
需要用下划线或连接符代替空格
• 使用您有读 / 取权限的路径作为目录。听起来很直观,但是有时候 IT 部门会限制管理
员权限。确保创建的文件夹不需要管理员权限。
在 analysis &synthesis 过程中发生了什么?
Analysis & Synthesis 过程:
24 • 检查设计文件的语法和语义错误。
• 执行 netlist extraction 构建一个集成了所有设计文件的数据库。
• 将硬件描述语言 (HDL) 代码综合到适合目标 FPGA 种类的硬件模块
什么是 SDC 文件?为什么需要他?
SDC 代表 Synopsys Design Constraints ,是一种行业标准格式,它定义了硬件 (silicon) 设计的
时序约束,例如器件的目标频率,以及外围设备的时序。 SDC 文件为 Intel Quartus 软件提
供了一种验证所生成的系统是否满足其计时要求的方法。
在 FPGA 的综合过程中, Intel Quartus 软件调用了一个名为 TimeQuest 的设计工具,它读取
时序约束文件,计算内部 FPGA 信号的时序,并将这些时序与 SDC 文件指定的时序要求进
行比较。此过程将会创建一个报告,该报告验证是否满足时序要求,并 / 或识别未能满足时
序要求并需要优化的信号。
布局布线过程中会发生什么?
fitter 将综合设计的逻辑布局布线到目标器件资源中。把它想象成一个布线器,上面陈列一
块印制电路板,用铜线把各种器件连接在一起。在这里,器件是逻辑资源 ( 例如查找表、寄
存器、内存、乘法器等 ) ,而 traces 是 FPGA 器件内的“导线”。
Assembler 过程中发生了什么?
Assembler 从一个成功的布局布线生成一个编程镜像,然后下载到 FPGA 器件。
什么是时序分析?
时序分析是对器件中的逻辑的时序进行综合、布局布线,以确保满足所有时序要求的过程。
目的是在满足所有时序约束的情况下实现“时序收敛”。
我对硬件设计不熟悉,我在哪能获得包含这些更改的 Verilog 代码?
就在这里:
1. // create module
2. module blink(
3. input wire clk, // 50MHz input clock
4. output wire [7:0] LED // array of 8 LEDs
5. );
6.
7. // create a binary counter
8. reg [31:0] cnt; //32 bit counter
9.
10. initial begin
11.
12. cnt <= 32’h00000000; // start count at zero
13.
14. end
15.
16. always @(posedge clk) begin
17.
18. cnt <= cnt+1; // count up
19.
20. end
21.
22. //assign LEDs to bits 28 through 21 of the counter
23.
24. assign LED = cnt[28:21];
25.
26. endmodule

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

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

相关文章

React 学习指南:从入门到精通

在前端开发的世界里&#xff0c;React 无疑是一颗璀璨的明星。如果你渴望掌握这一强大的前端框架&#xff0c;那么这篇学习指南将为你指明道路。 一、React 简介 React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发和维护。它以其高效的虚拟 DOM 机制、…

【Redis】主从复制分析-基础

1 主从节点运行数据的存储 在主从复制中, 对于主节点, 从节点就是自身的一个客户端, 所以和普通的客户端一样, 会被组织为一个 client 的结构体。 typedef struct client {// 省略 } client;同时无论是从节点, 还是主节点, 在运行中的数据都存放在一个 redisServer 的结构体中…

python批量图片重命名

为了使用Python将文件夹内的PNG图片重命名为递增数字加上13位时间戳的格式&#xff0c;你需要先确定几个关键点&#xff1a; 递增数字&#xff1a;你需要一个计数器来跟踪已经重命名的图片数量。时间戳&#xff1a;由于你需要的是13位的时间戳&#xff08;这通常是毫秒级的时间…

求职学习day8

7/21回顾&#xff1a; 用面试鸭的意义可能就在于将知识点用问答的形式具象化在脑海&#xff0c;不然可能只停留在听说过的感觉 7.21 玩了一天。一个很不好的信号。今天下午要试试把 mall 项目的代码运行过一遍。 项目运行问题&#xff1a; 问题 1 &#xff1a;两个门服务器…

搜维尔科技:人机交互学术应用概览

人机交互学术应用概览 搜维尔科技&#xff1a;人机交互学术应用概览

Numpy常见操作总结

NumPy 提供高效的多维数组对象 (ndarray) 用于大规模数据处理。它包含丰富的数学函数库&#xff0c;支持线性代数、傅里叶变换和随机数生成等操作。 以下代码内容包括对于数组对象的查看、数据处理等操作 import numpy as np# 创建一个二维和三维数组 array_e1 np.array([[1,…

有序充电在新型电力系统下的解决方案

摘要&#xff1a;近年来,新能源汽车的销量快速增长,相应的充电桩数量也急剧增加,这一现象可能会给电网和变压器造成负担,与此同时&#xff0c;新型电力系统下以光伏为主的分布式发电系统占比也在逐渐提高&#xff0c;新能源的不稳定性叠加充电需求的不确定性会给电网带来严峻的…

Unity发布XR中用于worldbuilding的全新电子书

通过身临其境的虚拟领域开始旅程&#xff0c;在维度之间传送&#xff0c;或将数字奇迹与现实世界融合——虚拟现实(VR)和混合现实(MR)的千万种可能性将邀请创作者把他们的想象力带入生活。 Unity发布的最新版综合指南将帮助有抱负的创作者和经验丰富的开发者深入研究和理解构建…

洛谷看不了别人主页怎么办

首先&#xff0c;我们先点进去 可以看到&#xff0c;看不了一点 那我们看向上方&#xff0c;就可以发现&#xff0c;我们那有个URL&#xff0c;选中 把光标插到n和/中间 把.cn删了&#xff0c;变成国际服 我们就可以看了 但是国际服还没搭建完&#xff0c;跳转的时候可能503&a…

融云 2024 ChinaJoy | 你有一个必逛的展位 @W4 馆 B786

惊喜闪现&#x1f447; 打开抖音搜索【融云】 关注融云官抖&#xff0c;可到展位领取好礼一份 更有惊喜内容不定时掉落~

Python从0到100(四十六):实现管理员登录及测试功能

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

“微软蓝屏”事件暴露了网络安全哪些问题?

网络安全的隐性威胁&#xff1a;从“微软蓝屏”事件看全球IT基础设施的脆弱性 ---------------------------------------------------------------------------------------------------------------------------- 一、事件回顾 近日&#xff0c;由微软视窗系统软件更新引发的…

Python设计模式:巧用元类创建单例模式!

✨ 内容&#xff1a; 今天我们来探讨一个高级且实用的Python概念——元类&#xff08;Metaclasses&#xff09;。元类是创建类的类&#xff0c;它们可以用来控制类的行为。通过本次练习&#xff0c;我们将学习如何使用元类来实现单例模式&#xff0c;确保某个类在整个程序中只…

Adobe Dimension(DN)安装包软件下载

目录 一、软件简介 二、软件下载 三、注意事项 四、软件功能 五、常用快捷键 快捷键&#xff1a; 一、软件简介 Adobe Dimension&#xff08;简称DN&#xff09;是Adobe公司推出的一款三维设计和渲染软件。与一般的3D绘图软件相比&#xff0c;DN在操作界面和功能上有所不…

每天一个数据分析题(四百四十三)- 标签与指标

标签系统有许多分类&#xff0c;从实现规则上可以分为三类&#xff1a;基于统计类的、基于规则类的、基于挖掘技术的&#xff0c;下面对于标签的分类错误的是&#xff08;&#xff09; A. APP的使用时长属于基于规则的标签 B. “交易活跃”标签属于基于规则的标签 C. 通过使…

国产JS库(js-tool-big-box)7月度总结

js-tool-big-box开发已经有3个月了&#xff0c;团队内的小伙伴进行了热烈的讨论&#xff0c;持续做了功能迭代。小伙伴们也做了艰苦卓绝的文档分享&#xff0c;有纯功能分享类的&#xff0c;有带有小故事的&#xff0c;有朋友们利用自己独自网站分发分享的。7月份快要结束了&am…

sip六大头域深度解析 - Max-Forwards头域

SIP&#xff08;Session Initiation Protocol&#xff0c;会话初始协议&#xff09;中的Max-Forwards头域是一个用于限制SIP请求消息在SIP网络中能够经过的实体&#xff08;如代理服务器、gateway&#xff09;的最大数目的头域。 基本概念 功能&#xff1a;Max-Forwards头域用…

FPGA DNA 获取 DNA_PORT

FPGA DNA DNA 是 FPGA 芯片的唯一标识&#xff0c; FPGA 都有一个独特的 ID &#xff0c;也就是 Device DNA &#xff0c;这个 ID 相当于我们的身份证&#xff0c;在 FPGA 芯片生产的时候就已经固定在芯片的 eFuse 寄存器中&#xff0c;具有不可修改的属性。在 xilinx 7series…

基于java 精品课程教学网站的设计与实现

1 引言 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;计算机被广泛应用于B/S系统环境。计算机的好处在于它能够进行信息管理。使用计算机进行信息控制&#xff0c;不仅提高了工作效率&#xff0c;而且大大的提高了安全性。 对于复杂的信息管理&…

算法——滑动窗口(day7)

904.水果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 根据题意我们可以看出给了我们两个篮子说明我们在开始采摘到结束的过程中只能有两种水果的种类&#xff0c;又要求让我们返回收集水果的最大数目&#xff0c;这不难让我们联想到题目…