通过将程序固化到FPGA,可以做到断电不丢失程序,上电之后就自动启动程序的作用,整个固化步骤主要分为3步,一是修改约束文件,二是生成mcs或bin文件,三是将程序固化到开发板flash
生成固化文件之前,首先需要在约束文件内添加一段原语,添加这段原语的目的主要是为了生成的 bit 流文件转换成固化文件后能够适用于 4bit 位宽 SPI 通信的flash 器件(这里的4位宽以及SPI通信都是根据板载flash决定的)。
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS true [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE Yes [current_design]
将这段代码直接添加到约束文件最下方即可。
生成mcs文件有两种方法
方法1
Tools栏位内点击 Generate Memory Configuration File
format用于选择生成文件的类型,这里我们选择mcs
custom memory size(MB)选择flash的容量,根据自己的开发板确定,这里读说明书的时候要注意MB(MByte)和Mb(Mbit)的区别,MB与Mb相差8倍,MB * 8 = Mb
filename这里选择保存文件位置,注意这里选择文件夹是不行的,需要选择一个mcs文件或是手动添加一个/filename用于生成mcs文件
interface用于选择接口类型,也是根据自己的开发板flash说明书决定
load bitstream file勾选上后可以选择比特流文件
write checksum表示写校验
disable bit swapping表示禁止位交换
overwrite表示覆盖原文件
点击ok即可生成mcs文件。
方法2
直接在tcl命令行内输入以下内容
write_cfgmem -format mcs -size 16 -interface SPIx4 -loadbit {up 0x00000000 "C:/Software/Vivado2019.1/project/project_1/project_1.runs/impl_1/ctr.bit" } -checksum -force -disablebitswap -file "C:/Software/Vivado2019.1/project/project_1/project_1.runs/impl_1/ctr1."
实现的功能和方法1一样,不过是通过指令进行控制
成功之后会显示信息
现在回过头来看方法1,我们会发现配置界面最下方有个command栏后面跟的就是我们直接在tcl输入的内容,也就是说Generate Memory Configuration File的作用就是辅助我们生成命令行指令
生成bin文件也有两种方法
方法1
同生成mcs文件的方法1,在format栏内选择bin文件类型即可
方法2
点击setting
在bitstream页面勾选bin_file选项,点击apply后点击ok
勾选上之后,我们在生成bitstream的同时会生成bin文件,这里我们重新生成bitstream既可
固化程序需要我们先将开发板连接到电脑
如图,右击我们的芯片型号后选择add configuration memory device
这里需要根据自己开发板上的flash型号选择对应的,添加完flash后即可选择文件写入flash
然后添加mcs文件以及prm文件(prm文件随mcs文件同时生成,是一种日志文件)既可
bin文件的使用与mcs相同,只是不需要选择prm文件
至此,程序固化完成,断电后重新上电即可进行测试
当我们选择flash型号之后,我们就可以在开发板连接页面看见芯片型号下面多了一个flash的名称,此时,我们通过直接右击flash名称进行程序的固化,减少了选择flash型号的步骤
最后,如果我们想要擦除固化的程序,只需要在添加mcs/bin文件的页面内单独勾选erase即可