基于Smart Artix 的FPGA程序固化流程(固化至QSPI FLASH)

FPGA从JTAG 下载的二进制文件,断电后是丢失的,为了让程序断电重启后仍然可以工作,需要对程序进行固化,本文将演示,如何把代码固化到板子的QSPI FLASH 芯片上,让系统每次开机从FLASH 芯片加载程序启动

  • 此章节内容适用于Smart Artix 的主板 ,如是本站其他板子请看对应板子目录
  • 本文在 vivado2018.3版本上演示

本次实验目标:

将编译综合得到的FPGA二进制文件烧写到板载Flash中,实现上电自启动。

关于本次实验:

本次实验 基于Smart Artix 的FPGA实验一 用FPGA资源点亮一个LED(完整图文),包括VIVADO中项目的创建,和代码的编写都基于实验一,本文只重点介绍固化的流程

一、修改VIVADO的FLASH支持列表:(每个Vivado版本只需要操作一次)

Smart Artix 上使用的QSPI FLASH 型号是W25Q128JVSIQ, 这颗FLASH并不在VIVADO默认的FLASH支持列表之中,所以我们在开始固化前,先要对VIVADO的FLASH支持列表做下调整(vivado 安装后仅需要调整一次,以后就不用调整了)

找到vivado安装目录 下的 \版本号\data\xicom下的xicom_cfgmem_part_table.csv文件,(如我的Vivado 2018.3对应的目录是D:\Xilinx\Vivado\2018.3\data\xicom\xicom_cfgmem_part_table.csv)

用文本编辑器打开这个文件,在文件最后,复制下面的配置信息,保存即可,其中XXX需要修改成对应的行数+1

XXX,0,w25q128bv-spi-x1_x2_x4,- xa7a100t xa7a15t xa7a35t xa7a50t xa7a75t xc7a100t xc7a100ti xc7a100tl xc7a12t xc7a12ti xc7a12tl xc7a15t xc7a15ti xc7a15tl xc7a200t xc7a200ti xc7a200tl xc7a25t xc7a25ti xc7a25tl xc7a35t xc7a35ti xc7a35tl xc7a50t xc7a50ti xc7a50tl xc7a75t xc7a75ti xc7a75tl xq7a100t xq7a200t xq7a50t xc7k160t xc7k160ti xc7k160tl xc7k325t xc7k325ti xc7k325tl xc7k355t xc7k355ti xc7k355tl xc7k410t xc7k410ti xc7k410tl xc7k420t xc7k420ti xc7k420tl xc7k480t xc7k480ti xc7k480tl xc7k70t xc7k70tl xq7k325t xq7k325tl xq7k410t xq7k410tl xcku025 xcku035 xcku040 xcku060 xcku085 xcku095 xcku115 xqku040 xqku060 xqku095 xqku115 xc7s100 xc7s15 xc7s25 xc7s50 xc7s6 xc7s75 xcvu065 xcvu080 xcvu095 xcvu125 xcvu160 xcvu190 xcvu440,w25q128bv,spi,128,x1_x2_x4,,Winbond,,1,w25q128bv,w25q

(文本编辑器是自动换行的,所以你要找到上一条信息的对应号数,然后把XXX改成对应的行号+1,如这里就是713)

二、打开工程并完成固化操作

1 ) 打开我们要固化的Vivado工程(这里以实验一做演示)

2)在Vivado软件里找到Settings设置选项,进入,点击Bitstream选项,将 bin_file 勾上,点击 OK

3) 为了让我们的系统上电启动加载FLASH的时候可以更快,这里我们还需要在原先项目的XDC约束文件里(即管脚约束文件里)增加下面 FLASH的约束

# QSPI FLASH Constraints
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]

4) 之后重新综合一遍工程(这里假设之前已按实验一的流程完成过工程的编译和综合了)

5)用TYPE C数据线将板子的JTAG口和电脑连接,给板子通上电源后,点击 PROGRAM AND DEBUG 中的OPEN TARGET 下的Auto Connect 来连接板子

6) 在Hardware栏中右击FPGA器件(这里是XC7A50T),选择Add Configuration Memery Device。

7) 选择我们板载FLASH的芯片型号W25Q128,(如果没有请先按上文部分在vivado兼容性列表中添加内容)

8)添加完成后,Vivado会提示是否立即配置存储器。点击OK,进入配置存储器的界面,在这里我们选择刚刚综合完成的bin 文件(一般在工程的run目录下的impl文件夹下,如果存在多个impl文件夹,请找到bin生成时间是刚刚生成的那个)

之后点选APPLY + OK , 系统开始将二进制bin文件烧写到外部配置flash存储器中。

当系统弹出Flash programming completed successfully 代表固件烧录完成

三、重新上电验证

将Smart Artix 的主板断电(拔出USB 电源线),然后重新再插上,这时候我们可以看到板子的LED正在像实验一中那样每一秒钟闪烁一次, 证明我们的FPGA固化成功了。

(备注,板子上的Reset KEY 是负责编写程序时的复位使用的,该按键并不能实现FPGA芯片级的重启,即不能通过这个按键实现系统的FLASH重新加载功能)

四、关于再次固化

对已经设置并固化过的工程,下次固化就不需要再这么繁琐的操作了,我们只需要通过JTAG连接芯片后 ,芯片下面会存在我们之前设置的FLASH芯片,这时只需要右键这个FLASH芯片并点Program Configuration Memory Device就可以实现芯片的再次固化。(当然每个新工程还是需要重复上文的操作)

本章节的工程:

  • 本文的完整工程下载 : FLASH_BOOT(适用Smart Artix 50T)
  • VIVADO的版本:2018.3
  • 工程创建目录: E:\Smart_Artix\4_Code\FLASH_BOOT

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注