FPGA基础入门篇(三)——程序的固化和下载
本系列博客采用ZYNQ 7000系列的开发板。使用的是vivado 2017.4 Xinlinx的软件, 本章也可只使用其他开发板,后续主要以ZYNQ嵌入式SOC学习为主。
FPGA程序的固化和下载基于上次的流水灯实验进行固化和下载。
一、
原理图:
XC7020-2CLG400内部soc接口
- 固化流程
SD固化:将镜像文件你拷贝至SD卡,设置拨码开关,使系统从SD模式启动。那么断电重启后,系统都会从SD模式启动。
QSPI-FLASH 固化:将镜像文件你拷贝至FLASH,设置拨码开关,使系统从QSPI-FLASH 启动。那么断电重启后,系统都会从FLASH启动。 - 固化准备
如果要固化ZYNQ的程序,需要为这个程序做一个镜像文件。
a. PL部分需要bit文件。PS部分需要elf文件。还需要把这两个文件安置好,还需要FSBL.elf文件
需要三个文件:
FSBL.elf
.bit
.elf
即:BOOT.bin = FSBL.elf + .bit + .elf 。
关键是FSBL.elf的制作生成。我们可以SDK生成。
二、 BOOT.bin制作过程
-
创建工程
打开之前的已经写好并且编译下载好的流水灯工程
在此基础上添加 Block Design.
按如下操作:
输入ZYNQ并回车找到自己的芯片。等待创建IP,可以看到最后已经创建了ZYNQ CPU IP.
双击ZYNQ,可以看到下面的配置界面。
-
修改MIO接口配置
如果不是配套的开发板,请参考自己的原理图进行查看
a. 首先修改bank电压。
bank1电压为1.8V, 对应原理图中的bank501.
bank0电压为3.3V, 对应原理图中的bank500.
b. 配置QSPI Flash 接口
c. 配置SDIO接口(TF卡)
d. 配置串口
e. 时钟配置
CPU时钟,开发板为33.33333M,默认设置
DDR 采用默认设置。
CPU默认的主频为默认667M,对于不同速度的CPU,等级是不一样的。
QSPI改到125M,否则无法加载到FLASH.
f. 修改DDR
根据不同型号来设置。
g. 去掉默认的GP接口
h. 操作完以上步骤即可以保存设置,并run block automation
可以看到右图配置好接口后的ZYNQ.
注:如果需要修改的地方,双击ZYNQ芯片会出现配置,设置完成后重新保存。即可。 -
source窗口中可以看到已经创建好的bd文件,修改我们的flow_led的程序,增加ZYNQ IP接口调用部分来调用BD。
a. 右键bd文件,创建一个顶层文件。
b. 利用上面自动产生的system_wrapper.v文件。将其中的模块调用复制到我们的flow_led中实现调用。
c. 赋值模块接口到我们的folw_led中的接口中,并修改为逗号。
以下的io 定义是不需要自己定义的,都是ARM自带的功能,可以直接从顶层文件中复制过来。也不需要进行约束。
d. 保存后可以看到flow-led下有bd文件。
e. 然后删除顶层文件
这个过程其实是将arm的部分添加到FPGA的部分中。只是arm的接口之类不需要我们自己定义。(arm的IO是固定的不需要重新分配管脚),也不需要修改管脚约束。
f. 最后编译生成bit文件。
右上角显示编译过程,需要等待几分钟。
-
导入SDK中。
上面生成了bit文件,需要导入到硬件。建立SDK工程。
a. 在file工具栏中选择export hardware
b. 勾选 include bitstream
c. 然后在file的选择launch SDK
d. 等待导入完成,如下图。
e. 在SDK中的file中选择>new>application project
f. 工程名命名为HelloWorld.
g. 再新建一个应用工程
h. 选中hellowworld工程(要做固化的工程)右键选择creat boot image
窗口中出现上面三个文件。FSBL.elf, flow_led.bit, HelloWorld.elf 三个文件
i. 直接creat image 即可完成boot.bin制作,此文件作为SD卡启动文件和SPI启动文件。
可以看到生成BOOT.bin文件。 -
QSPI-FLASH的启动。
a. 系统时钟,用于配置dector的速度。
在设备管理器中修改,新建系统环境变,修改后需要重启电脑,让环境变量生效。
b. 修改FSBL中的main.c文件的内容,由于我们使用的vivado软件为2017.4版本。
将开发板的开关模式调到QSPI启动模式,开发板通电。
c. 打开program flash memory
将镜像文件和FSBL文件找到,然后program。
完成后,重新让开发板通电,可以看到流水灯正常运行。