探索 Terasic DE10-Nano 上的 HPS 和 FPGA
本教程将通过命令行、内存映射 I/O、原理图和 Verilog HDL 四种不同方法来控制 Cyclone V 器件上的现场可编程门阵列 (FPGA) 的 LED。
获取新的 Intel® 物联网开发者套件,这是一个完整的软硬件解决方案,可让开发人员使用 Intel® Galileo 和 Intel® Edison 板创建令人兴奋的新解决方案。请访问 Intel® 物联网开发者专区。
引言
Terasic DE-10 Nano 是一款包含 Cyclone* V 器件的开发套件。Cyclone V 包含一个硬处理器系统 (HPS) 和现场可编程门阵列 (FPGA),以及丰富的板载外设,可用于创建有趣的应用程序。使用此系统最基本的操作之一就是控制物理连接到 FPGA 的 LED。本教程将通过命令行、内存映射 I/O、原理图和 Verilog HDL 四种不同方法来控制 LED。无论您是应用程序开发人员、固件工程师、硬件工程师还是爱好者,总有一种方法适合您。
必备组件
DE-10 Nano 有大量的规格说明书、用户指南、工具和其他信息可供使用。建议仔细阅读这些文档以深入了解系统。本教程中,请先下载并安装以下软件:
01:Intel® Quartus® Prime 软件套件 Lite 版(适用于 Cyclone V)- http://dl.altera.com/?edition=lite
02:安装 EDS(带 DS-5)- http://dl.altera.com/soceds/
03:安装 Putty(Windows* 用户)- http://www.putty.org/
04:安装 WinScp(Windows 用户)- https://winscp.net/eng/download.php
05:安装 RNDIS 以太网通过 USB 驱动程序(Windows 用户)– 请参阅 Terasic DE10 Nano 快速入门指南第 3 部分
06:下载 DE-10 Nano 资源 - http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046&PartNo=4
方法 #1 - 命令行
开箱即用,DE-10 Nano HPS 已预先配置为启动 Linux* 镜像,FPGA 已预先配置了黄金硬件参考设计 (GHRD)。这意味着您拥有一个完整的系统,只需为板卡通电即可立即开始探索。使用 DE-10 Nano HPS 控制 LED 的最基本方法是通过文件系统。这种方法非常适合那些想要做一些基本事情并在文件系统级别工作的脚本编写者。这可以通过串行终端轻松演示。首先,请执行以下操作:
01:将 Mini-B USB 线从主机连接到 DE10 Nano USB UART(板卡右侧)
02:打开串行终端程序
03:以 115200 波特率连接
04:以 root 用户登录,无需密码
05:打开 LED
echo 1 > /sys/class/leds/fpga_led0/brightness
06:关闭 LED
echo 0 > /sys/class/leds/fpga_led0/brightness
方法 #2 – 基于 C 的应用程序
另一种通过 HPS 控制 LED 的方法是更底层地开发一个 Linux 应用程序,该应用程序访问 FPGA 暴露的、控制 LED 的 SDRAM 中的内存映射区域。HPS 可以使用连接到并行 I/O (LED_PIO) 区域的轻量级 HPS2FPGA AXI 桥 (LWFPGASLAVES) 来访问此区域。基于 C 的应用程序会将此区域映射到用户应用程序空间,每 500 毫秒切换一次所有 8 个 LED,持续几次,然后取消映射该区域并退出。我们将使用 Eclipse DS-5 IDE 开发此应用程序。首先,请执行以下操作:
01:打开 Eclipse DS-5
02:创建新项目
02a:文件->新建->C 项目->Hello World 项目
02b:输入项目名称
02c:选择 GCC 4.x [arm-linux-gnueabihf) 工具链
02d:点击完成
03:删除生成的 Hello World 代码
04:添加预处理器包含 & 定义
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define ALT_LWFPGASLVS_OFST 0xFF200000
#define LED_PIO_BASE 0x3000
#define LED_PIO_SPAN 0x10
05:添加 main()
函数
int main(void)
{
unsigned long *led_pio;
int fd;
int i;
fd = open("/dev/mem", (O_RDWR | O_SYNC));
//Map LED_PIO Physical Address to Virtual Address Space
led_pio = mmap( NULL, LED_PIO_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, (ALT_LWFPGASLVS_OFST + LED_PIO_BASE) );
//Toggle all LEDs every 500ms a few times
for (i=0; i < 10; i++)
{
*led_pio ^= 0xFF; //Bit0=LED0 … Bit7=LED7
usleep(1000*500);
}
//Unmap
munmap(led_pio, LED_PIO_SPAN);
close(fd);
return(0);
}
06:构建项目
项目->构建项目
07:测试应用程序
06a:将 micro USB 线从主机连接到 DE10 Nano USB OTG 端口
06b:使用 scp 将应用程序传输到 DE10 Nano,目标为 root@192.168.7.1
06c:从串行终端运行应用程序:./<applicationName>
方法 #3 & #4 - 原理图和 Verilog HDL
到目前为止,我们已经通过命令行和基于 C 的应用程序从 HPS 控制连接到 FPGA 的 LED。现在,让我们讨论仅使用 FPGA 逻辑直接控制 LED。在此设计中,当按下/释放按钮时,将分别打开/关闭 2 个 LED。应注意的是,按钮是上拉的,LED 是高电平有效的,因此使用反相器来获得按下/释放按钮时的所需行为。我们将使用基于原理图的方法来创建控制第一个 LED 的逻辑,并使用 Verilog HDL 方法来创建控制第二个 LED 的类似逻辑。我们将使用 Intel® Quartus® Prime 软件套件 Lite 版软件创建设计。要开始项目,请执行以下操作:
01:打开 Quartus Prime Lite
02:创建新项目
02a:文件->新建->新建 Quartus Prime 项目->下一步
02b:输入项目名称->下一步->空项目
02c:点击下一步
02c:名称过滤器->5CSEBA6U23I7->完成
03:创建新的原理图文件
03a:文件->新建->块图/原理图文件
04:添加 LED 输出引脚
04a:右键单击->插入符号->基元->引脚->输出
04b:右键单击->插入符号->基元->引脚->输出
04c:右键单击输出引脚->属性->名称=led_0
04d:右键单击输出引脚->属性->名称=led_1
05:添加按钮输入引脚
05a:右键单击->插入符号->基元->引脚->输入
05b:右键单击输入引脚->属性->名称=pushButton
06:添加反相器
06a:右键单击->插入符号->基元->逻辑->非
07:连接所有元件
07a:将 pushButton 连接到反相器输入
07b:将反相器输出连接到 led_0
08:创建新的 Verilog HDL 文件
08a:文件->新建->Verilog HDL 文件
08b:输入 Verilog 代码
module inverter (
input in,
output out
);
assign out = !in;
endmodule
08c:保存文件
08d:更新符号
文件->创建/更新->从当前文件创建符号
08e:将 Verilog 模块添加到顶层原理图
右键单击->插入符号->inverter->点击确定
08f:将 pushButton 输入连接到反相器输入
08g:将反相器输出连接到 led1 输出引脚
09:将输入和输出分配到物理 FPGA 引脚
09a:处理->开始->开始分析和综合
09b:分配->引脚规划器
led0->位置=PIN_W15, I/O 标准=3.3-V LVTTL
led1->位置=PIN_AA24, I/O 标准=3.3-V LVTTL
pushButton->位置=PIN_AH17
10:编译项目
10a:开始->开始编译
11:对 FPGA 进行编程
11a:将 mini USB 线连接到 JTAG USB Blaster 端口(靠近 HDMI 连接器和蓝色 LED)
11b:点击工具->编程器
11c:点击硬件设置->当前选定的硬件->DE-SoC
11d:点击自动检测->5CSEBA6
11e:点击 5CSEBA6U23 芯片图片
11f:点击更改文件-><项目目录>\output_files\yourFile.sof
11g:点击编程/配置复选框
11h:点击开始按钮
12:测试设计
12a:按下并按住右侧按钮,led0 和 led1 将点亮
12b:释放按钮,LED 将熄灭
摘要
DE-10 Nano 在其功能、各种工具、编程方法和文档方面为工程师提供了很多选择。本教程展示了四种利用 HPS 和 FPGA 并使用可用工具控制 LED 的方法。当您开始使用 DE-10 Nano 进行下一个项目时,可以进一步拓展所有这些概念。
关于作者
Mike Rylee 是 Intel Corporation 的一名软件工程师,在开发嵌入式系统以及 Android*、Windows*、iOS* 和 Mac* 的应用程序方面拥有丰富的经验。他目前从事物联网项目。
注意事项
本文档不授予任何知识产权的许可(明示或暗示,禁止反言或以其他方式)。
英特尔不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性以及非侵权性的默示保证,以及在履行过程、交易过程或商业惯例中产生的任何保证。
本文档包含有关正在开发中的产品、服务和/或流程的信息。此处提供的所有信息如有更改,恕不另行通知。请联系您的英特尔代表以获取最新的预测、时间表、规格和路线图。
所描述的产品和服务可能包含称为勘误的缺陷或错误,这可能导致与公布的规格不符。当前的已特性化勘误可应要求提供。
可以通过致电 1-800-548-4725 或访问 www.intel.com/design/literature.htm 获取包含订购号并在本文档中引用的文件的副本。
Intel、Intel 标识和 Intel RealSense 是英特尔公司在美国和/或其他国家的商标。
*其他名称和品牌可能被声明为他方财产
**此示例源代码根据英特尔示例源代码许可协议发布
© 2017 Intel Corporation。