65.9K
CodeProject 正在变化。 阅读更多。
Home

如何对你的第一个 FPGA 器件进行编程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (2投票s)

2017年4月11日

CPOL

8分钟阅读

viewsIcon

13291

本教程将向您展示如何创建“Hello World”的硬件等效版本:一个闪烁的LED。

获取新的Intel® IoT Developer Kit,这是一个完整的硬件和软件解决方案,使开发人员能够使用Intel® Galileo和Intel® Edison开发板创建令人兴奋的新解决方案。访问Intel® IoT开发者中心

本教程将向您展示如何创建“Hello World”的硬件等效版本:一个闪烁的LED。这是一个简单的练习,帮助您开始使用Intel® Quartus®软件进行FPGA开发。您将学习如何编译Verilog代码、进行引脚分配,然后对FPGA进行编程以闪烁开发板上的八个绿色用户LED之一。您将使用一个50 MHz的时钟输入(开发板上有一个振荡器驱动FPGA中的计数器)来创建一个计数器,并将一个板载LED分配给计数器的第n位。

级别:初学者

材质

硬件

Terasic DE10-Nano 套件

Terasic DE10-Nano开发板基于Intel® SoC FPGA,为创客、IoT开发者和教育工作者提供了一个可重构的硬件设计平台。您可以在这里购买套件。

软件

Intel® Quartus® Prime软件套件精简版

这里使用的FPGA设计软件非常适合初学者,因为它免费下载且无需许可证文件。您可以在这里下载该软件。

注意:安装文件非常大(几个GB)。如果您的磁盘空间不足,我们建议您只下载本次练习所需的文件。在提示选择要下载的文件时。选择“individual files”选项卡,然后勾选Quartus PrimeCyclone V device support

如果您已下载并安装了Intel® Quartus®软件,让我们开始创建一个项目吧!

注意:屏幕截图基于最新版本v16.1。使用早期或晚期版本的Intel® Quartus®软件时,用户体验可能会有所不同。

步骤1:创建Intel® Quartus®软件项目

步骤1.a:打开Intel® Quartus® Prime软件套件精简版。

步骤1.b:打开新建项目向导

步骤1.c:选择下一步

步骤1.d:目录、名称、顶层实体

选择一个目录来存放您的项目。在这里,我们将项目命名为“Blink”,并将其放在intelFPGA_lite文件夹下,但您可以将其放在任何您想放的地方。选择下一步

当提示创建目录时,选择

步骤1.e:项目类型

选择空项目,然后单击下一步

步骤1.f:添加文件

这里不添加任何文件。单击下一步

步骤1.g:系列、设备和开发板设置

选择以下选项:

系列Cyclone V

设备Cyclone V SE Base

设备名称5CSEBA6U23I7

点击**下一步**。

步骤1.h:EDA工具设置

跳过此部分。单击下一步

步骤1.i:摘要

点击**完成**。

将显示以下屏幕。

步骤2:创建HDL文件

硬件描述语言(HDL)

我们使用Verilog作为HDL。如果您熟悉C编程语言但对HDL编程不熟悉,Verilog与C类似,您需要在每个语句的末尾加上分号“;”。

步骤2.a:导航到“文件”选项卡(主窗口),然后选择新建

选择Verilog HDL File,然后单击OK

步骤2.b:选择文件 > 另存为。将文件名设置为“blink”。这是您的顶层文件名,必须与项目名称(blink)匹配。单击保存

步骤3:创建Verilog模块

步骤3.a:将此Verilog代码复制并粘贴到blink.v窗口中,然后保存文件。

// create module
module blink(clk, LED);
input clk;     // input clock 50MHz
output LED;

// create a binary counter
reg [31:0] cnt; //32 bit counter
initial cnt <= 0; // start count at zero 
always @(posedge clk) cnt <= cnt+1; // count up

//assign LED to nth bit of the counter
assign LED = cnt[24]; // Use the 25th bit of the counter to blink the LED at a few Hz
endmodule

步骤3.b:分析与合成

运行“分析与合成”(右键单击,然后单击开始)以对Verilog代码执行语法检查。

如果过程成功完成,则“分析与合成”旁边会显示绿色复选标记。如果出现错误,请检查您的语法,并确保其与上面提供的代码块完全匹配。请记住,Verilog与C类似,使用分号来结束语句。确保分号放置正确。

步骤4:选择引脚分配

步骤4.a:在顶部导航栏中,选择分配 > 引脚规划器

请注意,输入(clk)和输出(LED)已列在“节点名称”下。这是因为您已经运行了“分析与合成”。

步骤4.b:Terasic DE10-Nano用户手册的表3-8(第26页)显示了LED的引脚分配。选择8个绿色用户LED中的一个。表3-5显示了时钟输入的引脚分配。在本教程中,您将使用FPGA的50 MHz时钟输入。

位置列中输入引脚编号。其余列将自动填充数据(有些带有我们需要设置的默认值)。您需要更改的列是I/O标准、驱动强度和压摆率。对于I/O标准,默认值为2.5伏。更改为3.3-V LVTTL。驱动强度默认值为16ma(default),我们需要选择16ma。如果我们不专门设置它们,编译时会收到警告消息。此外,将压摆率从1(default)更改为1。您不需要为时钟设置压摆率。将其留空。

节点名称LocationI/O 标准驱动强度压摆率
LEDPIN_W153.3-V LVTTL16ma1
clkPIN_V113.3-V LVTTL16ma 

设置引脚位置

将输入(clk)和输出(LED)的驱动强度设置为16ma。将压摆率设置为1(仅适用于LED)。

关闭引脚规划器。

步骤5:创建SDC文件

在编译Verilog代码之前,您需要为设计提供时序约束。您将创建一个SDC(Synopsis Design Constraints)文件,其中包含命令,让Intel® Quartus®软件知道如何完成设计的时序。没有它,您将在编译流程中收到警告消息,因为Intel® Quartus®软件不知道如何完成设计的时序。

要创建blink.sdc并将其添加到blink文件目录中,请执行以下操作。

打开一个文本编辑器(记事本)并复制粘贴以下内容

# this is a comment
# 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]

现在将其另存为.sdc文件。将其放在blink文件目录中 – 与我们的Verilog文件(.v文件扩展名)所在的目录相同。

步骤6:编译Verilog代码

步骤6.a

右键单击编译,然后单击开始。由于只有几行代码,编译应该需要大约一分钟。

注意:要编译代码,您暂时不需要将Terasic DE10-Nano开发板连接到计算机。很快就要用了!(提示:拿出盒子里附带的迷你USB线)。

编译Verilog代码后,您就可以对FPGA进行编程了。

步骤7:编程FPGA

最后一步是对FPGA进行编程。为此,您需要通过USB Blaster端口将开发板连接到计算机。

注意:在对FPGA进行编程之前,请移除microSD卡。

步骤7.a:使用Terasic DE10-Nano套件附带的USB线(mini-b连接器)。将mini-b连接器插入Terasic DE10-Nano开发板上的USB Blaster端口,将Type-A端插入主机计算机的标准USB端口。

步骤7.b:打开开发板电源。

步骤7.c:右键单击以打开编程设备

步骤7.d:硬件设置

选择硬件设置

模式设置为JTAG。

在“当前选定的硬件”下拉菜单下,选择DE-SoC

单击关闭

步骤7.e:单击自动检测

选择设备5CSEBA6。这是FPGA设备。

步骤7.f:添加.sof文件。

右键单击FPGA设备的“文件”列,然后单击更改文件

步骤7.g:导航到output_files文件夹,选择blink.sof,然后单击打开

在这里,blink.sof是您的编程文件。SRAM对象文件(.sof文件)是包含配置SRAM基设备(我们的FPGA基于SRAM)数据的二进制文件,使用Intel® Quartus®软件的“编程设备”(也称为Programmer)。Programmer读取SOF文件并获取设备的编程比特流。

在“编程/配置”列中打勾,然后单击开始

步骤8:观察闪烁的LED

如果您的进度条显示100%(成功),请观察开发板上的LED闪烁。

后续步骤

现在您已经成功地让一个LED闪烁了,您可以通过使用计数器的不同位来修改LED的闪烁速率。1赫兹是1/秒(每秒周期数),以1 Hz闪烁意味着LED每秒闪烁一次。对于2 Hz,LED每秒闪烁两次。而0.25 Hz将使LED每4秒闪烁一次(慢闪)。要实现更慢的闪烁,请使用计数器的高位,要实现更快的闪烁,请使用低位(例如,cnt[22])。尝试不同的计数器位,看看会得到什么结果。

下面是一些快速的时钟和计数器数学计算,可以帮助您理解闪烁频率与所选时钟和计数器位之间的关系。

时钟和计数器数学

cnt[n],其中n = 计数器位

2^n;我们在Verilog代码示例中选择了n = 24
2^24 = 16,777,216

我们的时钟是50 MHZ或50,000,000

时钟 / 2^n = 每秒闪烁次数<br /> 50,000,000 / 16,777,216 = 2.9802

这大约是每秒3次闪烁。

额外资源

© . All rights reserved.