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

news2024/9/20 23:41:27
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 clock
        output wire LED         // LED ouput
);

// create a binary counter
reg [31:0] cnt;                 // 32-bit counter

initial begin

cnt <= 32'h00000000;            // start at zero

end

always @(posedge clk) begin

cnt <= cnt + 1;                 // count up

end

//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 全部设置完成
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 analyzed

create_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 this

set_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 的下拉项中选择 DE-SoC ,然后点击 Close
18 1-26 Cable 选择
7e. 点击 Auto Detect ,识别开发板的 JTAG 链。
1-27 自动侦测
选择 5CSEBA6 FPGA 器件。
19 1-28 器件选择
7f. 添加 .sof 文件
右键点击 5CSEBA6 器件的 File 栏,选择 Change File
1-29 Change File
7g. 导向 output_file 文件夹,选择 blink.sof ,然后点击 Open
20 1-30 选择 .sof 文件
这里的 blink.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.coloradmin.cn/o/1937001.html

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

相关文章

NVIDIA 完全过渡到开源 GPU 内核模块

目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt&#xff1a;基于 Ubuntu 和 Debian 的发行版dnf&#xff1a;Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper&#xff1a;SUSE …

​探讨元宇宙和VR虚拟现实之间的区别​

在数字时代&#xff0c;人们对虚拟现实的兴趣与日俱增。在虚拟现实技术的推动下&#xff0c;出现了两个概念&#xff1a;元宇宙和VR虚拟现实。虽然这两个概念都与虚拟现实有关&#xff0c;但它们有着不同的特点和用途。在本文中&#xff0c;我们将探讨元宇宙和VR虚拟现实之间的…

UNiapp 微信小程序渐变不生效

开始用的一直是这个&#xff0c;调试一直没问题&#xff0c;但是重新启动就没生效&#xff0c;经查询这个不适合小程序使用&#xff1a;不适合没生效 background-image:linear-gradient(to right, #33f38d8a,#6dd5ed00); 正确使用下面这个&#xff1a; 生效&#xff0c;适合…

JavaScript与DOM的奇妙探险:从入门到精通的实战笔记

文章目录 JavaScript基本说明特点两种使用方式在script中写使用script标签引入JS文件 数据类型介绍特殊值 运算符算数运算符赋值运算符逻辑运算符&#xff1a;![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bbf5c150699845af837d3c45c926e941.png)条件运算符 数组的…

通信协议_C#实现CAN通信

CAN协议 CAN&#xff08;Controller Area Network&#xff09;即控制器局域网络。特点&#xff1a; 多主网络&#xff1a;网络上的任何节点都可以主动发送数据&#xff0c;不需要一个固定的主节点。双绞线&#xff1a;使用双绞线作为通信介质&#xff0c;支持较远的通信距离。…

为Word文档注入魔法!Python批量替换多个文档的多个关键字,轻松搞定!

嘿&#xff0c;各位小伙伴们&#xff0c;大家好&#xff01;有没有想过&#xff0c;如何在多个Word文档中批量替换多个关键字&#xff1f;不用担心&#xff0c;今天我来教大家一招&#xff0c;用Python轻松搞定这个问题&#xff01;保证让你分分钟拥有处理文档的超级魔法~✨&am…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器&#xff0c;用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器&#xff0c;用 x0-x30 表示&#xff0c;和 v7 不一样…

AndroidStudio与手机进行无线调试

(一)、前提条件 一部手机一条USB数据线一部电脑手机和电脑连接到同一个 Wifi开启手机的USB调试功能开启手机的无线调试功能 (二)、操作步骤 1、 将手机和电脑用USB数据线连接 2、 打开 终端&#xff0c;输入 adb devices ,查看手机和电脑是否连接成功。如下图&#xff1a; 2、…

Mac电脑硬盘无法读取怎么办 Mac硬盘读取慢会导致电脑卡吗 Paragon NTFS 激活码

Mac电脑作为众多用户的工作与生活伙伴&#xff0c;其稳定性和效率至关重要。然而&#xff0c;当遭遇硬盘无法读取或读取速度缓慢的问题时&#xff0c;这无疑会给用户带来极大的不便&#xff0c;影响日常操作与数据访问。下面我们来看看Mac电脑硬盘无法读取怎么办&#xff0c;Ma…

Kotlin性能:runCatching、try-catch块、无异常处理耗时比较

Kotlin性能&#xff1a;runCatching、try-catch块、无异常处理耗时比较 fun main(args: Array<String>) {val a 1.1fval b 2.2fval n1 System.nanoTime()val m1 System.currentTimeMillis()runCatching {cal(a, b)}val n2 System.nanoTime()val m2 System.currentT…

python中format函数和f-string详解

Python 中的 format() 函数是一种字符串格式化的方法&#xff0c;通过花括号 {} 来定义占位符&#xff0c;并通过 format() 方法中的参数来替换这些占位符。这种方法非常灵活&#xff0c;可以处理多种数据类型&#xff0c;并且可以通过索引、关键字或者属性名来访问对象的属性。…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.3大数据与2.2.4区块链

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

实战项目:仿muduo库实现并发服务器

目录 项目初始与项目演示HTTP服务器基础认识Reactor模式基础认识单Reactor单线程模式认识单Reactor多线程模式认识多Reactor多线程模式认识 目标定位总体大模块划分server模块的管理思想Buffer子模块Socket子模块Channel子模块Connection子模块Acceptor子模块TimerQueue子模块P…

记录些Spring+题集(9)

在网络应用开发中&#xff0c;Cookie、Session 和 Token 是常见的用于管理用户状态和身份验证的机制。 Cookie、Session、Token 的区别 这三个概念的产生与 HTTP 是一种无状态协议密切相关。在 HTTP 中&#xff0c;每次客户端与服务器之间进行通信时&#xff0c;服务器无法直…

8月长沙学术会议:经济金融发展国际会议(ICEFD 2024)

经济金融发展国际会议&#xff08;ICEFD 2024&#xff09;将于2024年8月20-22日在长沙盛大举行。本次会议汇聚了国内外众多高校、科研机构、企业界及其他相关领域的专家学者&#xff0c;共同探讨经济金融发展的新趋势、新挑战和新机遇。 长沙&#xff0c;这座历史悠久的文化名…

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

Python爬虫(1) --基础知识

爬虫 爬虫是什么&#xff1f; spider 是一种模仿浏览器上网过程的一种程序&#xff0c;可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等

功能如图&#xff1a; docker部署 version: "3" services:excalidraw:image: dannicool/docker-wechatbot-webhook:latestcontainer_name: wechatbot-webhookdeploy:resources:limits:cpus: 0.15memory: 500Mreservations:cpus: 0.05memory: 80Mrestart: alwayspor…

数据结构_Map和Set

目录 一、搜索模型 二、Map 2.1 Map.Entry 2.2 Map 方法 2.3 Map 注意事项 三、Set 3.1 Set 方法 3.2 Set 注意事项 四、哈希表 4.1 哈希表 4.2 冲突 4.3 哈希函数设计 4.4 闭散列 4.5 开散列/哈希桶 总结 【搜索树】 二叉搜索树又称二叉排序树&#xff0c;它或…

P4-AI产品经理-九五小庞

从0开始做AI产品的完整工作方法 项目启动 项目实施 样本测试模型推荐引擎 构建DMP&#xff08;数据管理平台&#xff09; 项目上线