BlockDesign时,MakeExternal命令,相当于一次实现了两个关联的命令,CreatePort和MakeConnect。
如果使用了AXI总线,那么必须在AddressEditor中,对每个Endpoint进行地址关联。右键选择AssignAddress即可。
注意:VIVADO里面,很多命令只能通过右键进行访问,而不能从主菜单中进行访问。
Export Hardware是必须的,不然无法把PS侧的硬件配置信息正确传递到SDK中。
LaunchSDK之后,就进入软件开发环境。
ExportHardware,会在project.sdk文件夹下,复制出一个xxx.hdf的文件,里面会包含xxx.bit的链接路径。
启动SDK时,SDK会在workspace中自动搜索HDF文件,并将其转换成一个HW文件夹,如果需要BIT文件,也会复制BIT文件到文件夹中。
如果workspace里有多个hw_platform,例如hw_platform_0,hw_platform_1,hw_platform_2,
那么需要在新建的工程指定究竟使用哪个hw_platform。
方法是,打开这个project->properties。
在properties for xxx project 界面中,
找到C Gerneral->path and symbols->includes->gnu C->include derectories。
点击hw_platform_0,修改成所需的hw_platform_2。
如果是helloworld工程,是不会使用到hw_platform的。只有FSBL工程,才会使用hw_platform。
由于使用了PL和PS交互,所以运行时,要在SDK中,用JTAG把BIT文件下载到PL,然后再下载ELF到PS,运行起来后,才能正常工作。
RunConfiguration中,可以配置是否额外加载PL侧的bit文件,这样,当PS运行时,同时PL也运行起来。用于PS和PL同时工作和交互的场景。
FSBL有长度限制,因为OCM只有192K的存储容量。所以,FSBL只做最少必要工作,然后把控制权交给SSBL。通常,SSBL是指UBOOT。SSBL是运行在DDR3里面的,所以理论上可以有512MB。
生成的Image,名字必须是boot.bin。
BIF文件,是一个对IMAGE文件的定义文件,本质上,是一个config文件。
BIF用来知道bootgen如何找到需要的bit文件和elf文件,并放在合适的位置。
BOOT.BIN才是打包后生成的IMAGE。如果是放在SD卡或者TF卡里,那么必须生成BIN文件,不能是MCS文件。相反,如果是放在QSPI里,那么必须生成MCS文件。当然,用BIN文件也可以烧写成功。
MCS文件的区别在于,它本质是一个HEX文本文件,但是它没有HEX的64KB的限制,可以很大,几十MB 都可以。
BOOT.BIN文件,是对以上三个文件的封装,附加额外信息,具有特定的排列格式。依次是,
(Header,[FSBL],datafile_bit,datafile_elf)。
BootROM执行末尾,跳过Header,到FSBL的地址上去执行FSBL。而FSBL在执行时,通过Header中的列表信息,找到要加载的DFBIT文件(datafile_bit),加载到PL侧。然后,找到要加载的DFELF文件,加载到DDR中。在FSBL的执行末尾,跳转到DFELF文件(datafile_elf)的起始地址,开始执行DFELF文件。此时,PS的控制权从FSBL移交给DFELF。
命令行形式生成BOOT.BIN,一方面是不打算启动SDK的情况下生成,另一方面,是给生产人员或者非软件人员使用。
需要如下必要工具和文件。
(I)BOOTGEN.exe,这个从安装SDK的目录下拷贝出来。
(II)makeboot.bat,这个用TXT编辑器编写。包含如下:
bootgen -image GUI2.bif -o i boot.mcs -w on
bootgen -image GUI2.bif -o i BOOT.BIN -w on
(III)boot.BIF,这个可以用TXT编辑器编写。包含如下:
the_ROM_image:
{
[bootloader]./zynq_fsbl.elf
./system.bit
./u-boot.elf
}
(IV)FSBL,DFBIT,DFELF.
连接上Cable后,可以xilinx->program FPGA ,在SDK里直接下载bit文件,也可以xilinx->program FLASH ,在SDK里直接下载MCS文件。烧写FLASH时,还要注意选择,是否基于合适的FSBL来烧写。