文章目录

  • 前言
  • 什么是固化?
  • 二、具体实现步骤
  • 1.修改程序生成的bit流相关设置
  • 2.生成.mcs文件
  • 3.将.mcs文件烧录至FPGA

前言

本系列文章作为对特权同学《深入浅出玩转FPGA》课程学习的记录,对课程内容进行总结,并记录遇到的问题与解决办法,以此见证个人FPGA学习历程。
开发板:SF-AT7
软件平台:Vivado 2016.2



什么是固化?

.bit文件只是通过下载器烧录到FPGA中,而FPGA相当于RAM,下电后再上电,之前的程序就不存在了。如果希望代码掉电后不丢失,则需通过存储器配置文件将其固化在FPGA中,需要将代码存储在外部Flash中。通过JTAG下载器将.mcs文件下载到FPGA中,FPGA会将其固化到QSPI Flash中,下电再次上电后,FPGA会在flash中加载配置代码,执行程序。

二、具体实现步骤

1.修改程序生成的bit流相关设置

一般来说,FPGA共有四种配置模式:主串模式、主并模式、从串模式、从并模式。主从配置模式取决于配置时钟由谁产生,外部时钟设置即为从配置模式,FPGA内部时钟产生就是主配置模式。而串并模式取决于外部FLash的配置引脚数目,若4bit数据同时烧录就是串模式,若8bit、16bit同时烧录就是并模式,at7这款开发板对应的外部Flash是采用主串模式,主动配置模式下,FPGA产生的配置时钟CCLK的时钟频率是最保守的低频,可通过工具中的配置选项提高这个CCLK时钟的频率,缩短配置时间。因此我们要修改FPGA中CCLK时钟频率、位宽等设置。

  • 在Implement下打开open Implement Design,打开以后发现在【Program and Debug】出现【Bitstream settings】这一选项

vitis固化程序时出现memory write error at 0x2450 memory access stalled_导航栏

  • 点击【Bitstream Setting】,出现如下界面。configuration rate 是FPGA主动加载模式下的时钟频率,默认是3MHz,设置是要考虑外部memory是否支持高速的传输模式;同时要修改configuration 下SPI configuration下的【bus width】,因为QSPI Flash是采用4bit位宽传输数据,修改为【4bit】,下面的时钟沿改为【yes】,点击ok,配置完成。
    更改完配置后,要重新产生程序bit流,点击左侧导航栏中Generate Bitstream,一路ok即可重新开始编译,用编译完成后生成的.bit文件生成.mcs文件。

2.生成.mcs文件

【Generate Bitstream】编译完成后,在弹出的界面勾选【Generate Memory Configuration FIle】(也可在tools中打开),即用重新编译完成的bit流文件产生.mcs文件,对memory进行配置。

vitis固化程序时出现memory write error at 0x2450 memory access stalled_fpga开发_02

  • 第一步,修改Memory SIze 为4MB
  • 第二步,设置.mcs文件保存路径: …/at7.runs/impl_1/at7.mcs
  • 第三步,设置接口方式,QSPI Flash为SPI 4bit 串行接口,因此在Interface中选择【SPIx4】
  • 最后,勾选【load Bitstream FIle】导入.bit文件,在at7.runs/impl_1/目录下

3.将.mcs文件烧录至FPGA

固化操作仍然是在板级下载调试界面下进行,若没有应先进入板级调试界面,即点击【Open Hardware Manage】。

  • 首先退出Program Device,单击导航栏中【Program Device】弹出Program Device窗口,点击【cancel】,退出后发现Add Configuration Memory可点击。
  • vitis固化程序时出现memory write error at 0x2450 memory access stalled_Memory_03

  • 点击【Add Configuration Memory】,对外部Flash型号进行选择。
  • vitis固化程序时出现memory write error at 0x2450 memory access stalled_学习_04

  • 查看原理图,at7板子上使用的QSPI Flash是:【S25FL032】
  • vitis固化程序时出现memory write error at 0x2450 memory access stalled_fpga开发_05

  • 然后,选择【ok】,现在编译配置存储器设备
  • vitis固化程序时出现memory write error at 0x2450 memory access stalled_加载_06

  • 将刚才编译生成的.mcs与.prm文件导入
    【Erase】对QSPI Flash进行擦除操作
    【Program】编程操作
    【verify】验证烧录是否成功
    勾选Erase表示先对QSPI Flash进行擦除操作,在进行编程,verify验证是否烧录成功
  • vitis固化程序时出现memory write error at 0x2450 memory access stalled_fpga开发_07

  • 配置完成后断电后重启,发现原来实现的功能还在,说明FPGA上电后自动地在Flash中加载配置代码。