【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

时间:2024-04-14 19:39:30

一、SoC FPGA 启动配置方式介绍

Intel Cyclone V SoC FPGA 支持在上电时根据启动设置引脚的电平状态选择从 EPCS 或者 HPS 中启动。一般的硬件板卡在设计时,都使用拨码开关来设置启动设置引脚的电平。具体是通过 EPCS 还是 HPS 启动,由一个 6 位拨码开关通过设置不同的值来决定。 下图所示为 AC501-SoC 开发板上的启动设置拨码开关。【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

Cyclone V SoC FPGA 有 5 位的启动设置引脚用于启动方式的设置,为MSEL0~MSEL4。这四个引脚的不同状态,会设定不同的启动方式,详细的启动方式与 MSEL 脚状态如下表所示:

配置方式 描述

配置方式 MSEL4…0 描述
AS 10010 FPGA从EPCS快速配置
AS 10011 FPGA从EPCS标准速度配置
FPPx32/CompressionEnabled /Fast POR 01010 FPGA 从 HPS 软件配置,在 U-Boot 阶段读取存储在 SD 卡上的 rbf 文件,然后配置 FPGA
FPPx16/CompressionDisable /Fast POR 00000 FPGA 从 HPS 软件配置,在 U-Boot 阶段读取存储在 SD 卡上的 rbf 文件,然后配置 FPGA

常见的基于 Intel Cyclone V SoC FPGA 器件的开发板都支持两种方式来配置 FPGA:

  • 1、使用 JTAG 编程:此种方式下, FPGA 的配置 bit 流文件直接被下载入Cyclone V SoC FPGA 中,下载之后 FPGA 就会按照该配置文件的信息运行。 但是一旦 FPGA 的供电被关闭了,配置信息也就丢失了
  • 2、使用 AS 方式: AS 方式全称为主动串行配置(Active Serialconfiguration), 此种方式下 FPGA 的配置 bit 流文件会被下载进串行配置器件(EPCS) 中, EPCS 是一种 SPI 接口的 Nor Flash 存储器,即使掉电之后,数据依然存在不会丢失。当开发板下次上电时,如果 MSEL 设置了从 EPCS 中启动,则 Cyclone V SoC FPGA 会自动从 EPCS 中加载配置数据。

一般的原厂或第三方合作厂商在设计硬件板卡时, 都直接在板卡上集成了对应的 USB Blaster II 下载调试电路,该电路实现了 USB 转 JTGA 协议的功能,使用该电路就能实现 PC 通过 JTAG 协议和 SoC FPGA 芯片通信的功能。而在 AC501-SoC 开发板上, 并未设计板载的 USB Blaster II 下载调试电路, 但是提供了标准的 IDC3-10 的 USB Blaster 接口, 使用时可以使用独立的 USB Blaster 设备, 通过该接口与 AC501-SoC 开发板上的 SoC FPGA 器件相连, 以支持 PC 使用 JTAG 协议连接 FPGA 和 HPS,并完成配置 bit 流的传输以及运行调试的功能。

和传统的单芯片纯 FPGA 方式不同, Cyclone V SoC FPGA 上的 JTAG 链同时连接了 FPGA 和 HPS。 因此在使用 JTAG 配置 FPGA 时过程也有一定的差别。 接下来以一个具体的例子分别讲解配置 sof 到 FPGA 中和烧写 jic 格式的配置文件到 EPCS 中的方法

二、USB Blaster 驱动安装

USBBlaster驱动是给FPGA下载程序时候用的,不安装的话会无法下载程序到FPGA。需要注意的是,安装USB Blaster之前,确保自己安装好了Quartus软件。

驱动安装参考梅哥:http://www.corecourse.cn/forum.php?mod=viewthread&tid=27738

注意,当USB Blaster 的USB一端连接上PC端后,理论上在设备管理器中就会更新出USB Blaster,无论下面哪种形式都可以:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
如果并没有出现上述两种图标,要么是线坏了(我的就是这种情况,多谢小庆帮忙解决!),要么就是USB Blaster坏了!

如果出现的是标黄的USB-Blaster,【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化说明是驱动没有安装好,这时可以右击USB-Blaster,选择其中的“更新驱动程序”
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

然后选择“浏览我的电脑以查找驱动程序(R)”

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
接着选择quartus安装目录下的drivers所在目录【注意一定是drivers所在目录】,并勾选下面的“包括子文件夹(I)”后,点击下一步,即可自自动安装。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
安装完毕后,如下图所示,单击关闭即可。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

而后再看设备管理器,会发现标黄的USB-Blaster会变成如下图所示

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

至此USB-Blaster的驱动安装完毕。

三、sof 文件生成与烧写

在sof文件烧写之前,还是有必要再回顾一下生成sof文件的方法,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

我们可以根据时间戳,判断sof文件是否是最新生成的

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

接下来便是下载sof文件,在下载 sof 时,对 FPGA 的启动方式设置无任何要求,任意一种状态都可以,因为 JTAG 模式配置 FPGA 的优先等级最高, 不受启动方式设置的影响。

打开一个 FPGA 工程,如本例以 FPGA 的 LED 测试工程“led”为例。(该工程位于:AC501-SoC开发板资料文件夹版\Demos\FPGA***意要将其拷贝到没有中文的目录下。)

在菜单栏中依次点击 Tools > Programmer 或直接点击 Programer 图标以打开下载界面,如下图所示。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

打开之后,软件可能会默认搜索到工程下的 led.sof 文件并添加进来了,如下图所示。如果没有添加也没有关系, 因为添加的内容我们后面操作时也会手动将其删除的。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

需要我们关注的是其中的USB-Blaster[USB-0]一栏是否正常显示,如果 Hardware Setup 一栏没有自动找到 USB Blaster,则可能需要检查以下两个方面

  • ①、USB Blaster 是否正常连接

    • 【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
  • ②、USB Blaster 驱动是否装好

    • 参考上面的 1.1 小节
  • ③、正常连接并且驱动已经安装好,但是没有选中,选中方法如下:

单击其中的【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化,然后双击下图中的USB-Blaster,双击完毕后该界面上方的 Currently selected hardware会显示,最后Close。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

close出来再看,会发现此时USB-Blaster[USB-0]便显示出来了!
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

如果 USB Blaster 就绪了, 此刻我们直接点击 Start 来下载添加的 sof 文件是会失败的,这是因为 JTAG 链上连接了 FPGA 和 HPS 两个设备,下载器不知道需要将文件下载到哪个设备中。首先点击左侧的 Auto Detect 按钮,以使用 JTAG 链检测其连接的设备型号。会提示同一个 JTAG ID 对应的多个设备, 根据我们使用的器件型号为 5CSEBA2, 因此选择第一个然后 OK, 如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

此时软件会提示自动检测到的设备和 Programer 中已经添加的设备不匹配,询问是否更新,点击 YES 更新即可, 如下图所示。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

更新完成后可以看到, Programer 窗口的下方展示了 JTAG 链上的设备关系, 如下图所示。 主要是 TDI 这个信号线, 首先进入 SOCVHPS 中, 然后从SOCVHPS 的 TDO 端口流出,进入 FPGA(5CSEBA2) 的 TDI 端口,再从FPGA 的 TDO 端口流出,回到 JTAG 接口的 TDO 信号上。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

选中 Device 一栏中的 5CSEBA2 项, 右键单击,在弹出的对话框中选择 Change File,然后找到该工程output_files目录下的 led.sof 文件并添加,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

选择后的显示效果如下图所示,同时此时led.cdf后面会显示一个*,表示修改了未保存,可以通过ctrl+s进行保存!

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
点击 sof 文件对应的 Program/Configure 复选框以选中(最后修改完毕后,别忘了保存led.cdf文件),然后点击 Start 按钮,就可以开始配置 sof 文件到 FPGA 中了,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

烧写成功后,右上角会显示Successful!

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

配置完成后, 可以看到开发板上的两个 FPGA_LED 灯分别闪烁,其中 FPGA_LED0 的闪烁频率是 FPGA_LED1的两倍。

四、jic 文件生成与烧写

通过以上方式,完成了 sof 文件下载到 FPGA 中的功能。但是此时下载的数据是保存在 FPGA 的 SRAM 中的,掉电之后数据就丢失了,为了能够实现FPGA 上电自动配置的功能,可以将配置数据 bit 文件转化为 jic 文件,烧写到 EPCS 存储器中,并设置 FPGA 从 EPCS 中启动,这样 FPGA 下次上电时就能够自动从 EPCS 中加载配置数据了, 无需再用 JTAG 下载。

接下来讲解 AC501-SoC 开发板上所用 Cyclone V SoC FPGA 器件的 jic 文件生成以及烧写方式。

当需要烧写 jic 文件到 epcs 中时,需要首先设置 FPGA 从 EPCS 中启动,即设置 MSEL[4…0]为 10010 ,即 FPGA从EPCS快速配置。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

同样还是打开一个设计好的 FPGA 工程,如 led,然后在菜单栏中依次点击 File > Convert Programming Files,如下图所示。

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

在打开的窗口中, 选择 Programming file type 为 JTAG Indirect ConfigurationFile(jic)、 Configuration device 为 EPCS16, 注意, 是 EPCS128, 不是EPCQ128, File name 设置一个有辨识度的名字,例如 led.jic,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

接着选中下方的 Flash Loader,然后点击右侧的 Add Device, 如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

在弹出的对话框中选择用户使用的开发板上使用的 FPGA 器件。例如对于AC501-SoC,应该选择 5CSEBA2。 而如果用户使用的是 DE10-Nano-SoC 开发板,则应该选择 5CSEBA6, 然后点击 OK,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

选中 SOF Data 选项,然后点击右侧的 Add File,添加 led.sof 并确认,如下图所示:
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

然后选择output_files文件夹下的led.sof文件,并单击Open。
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

添加好之后,点击右下角的 Generate 按钮, 就能生成 jic 文件了,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
在生成过程中,会弹出问你是否要覆盖led.jic文件,选择Yes即可!

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

生成完毕后,弹出如下图所示提示框,点击OK即可关闭,如下图所示:
【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

而后点击叉号关闭Convert Programming File窗口,如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

接着进行烧写,依然是先通过 Auto Detect 检测器件,然后选中 FPGA 器件右击以Change File,只是添加 File 的时候,选择刚刚 generate 好的 led.jic 文件。 勾选Program/Configure 选项,然后点击 Start,就能够完成烧写到 EPCS 的功能了。如下图所示:

【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
烧写完成后,给开发板重新上电, 可以看到开发板上的两个 FPGA_LED 灯分别闪烁,其中 FPGA_LED0 的闪烁频率是 FPGA_LED1的两倍,并且断电再上电后仍可以保持程序不丢失!