CH05 FPGA设计Verilog基础笔记(五)
FPGA程序的固化和下载
1、 概述
在上一例点亮流水灯的基础上,进行改动并将此程序固化到FLASH或SD卡中,实现上电就可启动流水灯程序。
2、 固化
上一例通过JTAG先下载bit流文件,在下载elf文件,最后点击Run As来运行程序。JTAG的方法是通过TCL脚本来初始化PS,然后用JTAG 收发信息,用于在线调试。但是这样一断电,程序就会消失,掉电不保存。
如果需要板卡中程序掉电不丢失,则需要对程序进行固化。ZYNQ7000 SOC 芯片可以从FLASH启动,也可以从SD卡中启动。
SD固化:将镜像文件拷贝到SD卡中,设置拨码开关,使系统从SD模式启动。那么每次断电后,系统都会从SD启动。
QSPI FLASH固化:设置拨码开关,将镜像文件烧录到FLASH中,使系统从QSPI-FLASH模式启动,那么每次断电重启后,系统都会从FLASH启动。
3、 固化的流程
Step1:Create a Vivado Project ---> Step 2:Create the Hardware System using IP Integrator
---> Step 3:Export the Design to the SDK ---> Step 4:Create the Boot Images and Test
---> Step 5:Prepare for the Multi-Applications Boot ---> Step 6:Create the SD Card Image and Test
---> Step 7:Create the QSPI Application and Image ---> Step 8:Test the QSPI Multi-Applications
4、 固化需要的文件
1) FSBL.elf
2) .bit
3) .elf
以上三个文件最终可以得到BOOT.bin
5、 ZYNQ从SD卡的启动过程
zynq和大多数arm启动过程一样,启动过程也分为3个阶段,这三个阶段分别称之为阶段0、阶段1、阶段2。
阶段0:即传统的BootROM过程。ZYNQ芯片ROM里面固化了一段不可修改的程序,只要ZYNQ一上电,这段程序就会执行。它将对ZYNQ的NAND、NOR、SD等基本外设控制器进行初始化。把SD卡这类易失性存储器初始化后,就会把其中的程序拷贝到ZYNQ的OCM(on-chip memory)。这个被拷贝到片上RAM执行的程序就是我们今天要制作的---BOOT.bin。
阶段1:BOOT.bin加载到OCM上开始执行。BOOT.bin由fsbl.elf+该工程.bit+该工程.elf构成。阶段1要做的就是:首先配置PS部分,PS完成初始化后,回去配置PL部分,最后去执行加载阶段2的代码。
阶段2:这一阶段是可选的,主要是为了完成Linux系统启动过程。
6、 BOOT.bin制作过程
首先创建IP核并进行配置。
配置以下几个部分:
1)MIO QSPI FLASH这里选择默认,MIO1-6与原理图相对应
2)IO=》SD0->CD MIO47(原理图对应)
UART1 MIO48-49(原理图对应)
bank0 选择3.3V,bank1选择1.8v(由由图可知,bank0->QSPI 、QMOD;
bank1->UART、Ethernet、USB_OTG、SD_CARD、Push Buttons)
3)QSPI Clock 设置为125Mhz
DDR memory part 我的板子是ZYNQ 7010A所以我这选择 MT41K256M 16 RE-125
最后点击OK就配置完成IP核了。
1) 点击配置好的IP核,将其生成顶层文件
将顶层文件中的模块接口和接口代码复制到run_led.v文件中。然后生成bit文件。
将bit文件导入SDK中,运行SDK文件。在SDK中创建zynq.fsbl文件。
然后Create Boot Image产生Boot.bin文件。