【入门】基于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 设计软件非常适合初学者,因为它可以免费下载而且不需要任何许可文
:安装文件较大(几千兆字节),而且需要花费很长时间才能下载和安装。为了最大
限度减少下载时间和所需的磁盘空间,我们建议您只下载本练习中所需的项目。取消选
中的“ 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

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值