1、用于创建BOOT.bin需要的文件
(1)u-boot.elf:在Linux下编译后生成u-boot文件,再强制改名为u-boot.elf文件,得到之。
(2)zynq_fsbl_0.elf:在EDk下创建得到之。
(3)system.bit::在PlanAhead中生成的bit文件;该文件不是必须的,没有该文件时,相当于把Zynq只当ARM来用。
2、创建BOOT.bin文件
(1)只含有PS部分的设计
在SDk下,Xilinx Tools ->Craete Boot
Image得到如下图所示:
(2)同时包含有PS和PL设计
在(1)中所述生成的BOOT.bin文件不含有给PL部分配置的*.bit文件,即只是ARM部分的运行代码。要使PL部分也能运行,需要在创建BOOT.bin文件时,加入PL部分的设计生成system.bit文件
相比而言,由于(1)中生成的BOOT.bin文件没有PL部分的设计,也就无需对PL进行配置,所以启动时会快一些,而(2)中的BOOT.bin文件启动要慢一些,大概有30s~40s不等(依赖于system.bit文件的大小)。
步骤:1. 首先在vivado SDK中分别建立两个工程
注意:如上图所示,Core0 工程建立时选择ps7_cortexa9_0, Core1 工程建立时选择ps7_cortexa9_1
完成后如下图所示:
2.配置Core1即从核中的BSP文件
在下图中画圈处,配置:-DUSE_AMP=1
3 配置Core0和Core1的DDR空间分配
通过修改lscript.ld文件中的内容,可以改变在存储器中的执行位置,
因为ELF文件是加载到DDR中执行的,所以两个DDR地址不能重合
Core0的配置 :画圈处 栈空间也要分配,防止溢出
Core1配置
4 建立FSBL文件,并配置mian()文件
配置main() 跟第三步中的DDR空间配置有关
在FSBL的src中找到main.c文件打开,在里面添加下面一段代码,用于启动CPU1:
#define sev() __asm__("sev")
#define CPU1STARTADR 0xFFFFFFF0 //Core1 DDR配置中的SIZE大小
#define CPU1STARTMEM 0x10000000 //Core1 DDR配置中的起始地址
void StartCpu1(void)
{
#if 1
Xil_Out32(CPU1STARTADR, CPU1STARTMEM)
dmb()//waits until write has finished
sev()
#endif
}
将上面的代码在main()中添加到:
Load boot image的位置,将CPU1的启动函数,放置于此位置,改动后的代码段如下:
5 生成mcs文件和烧写mcs文件到QSPI Flash
单击‘Core1’,选择Xilinx Tools –>Create zynq boot image,选择Add,选择文件…/ Core1/Debug/ Core1.elf,点击打开。然后选择Core1.elf, Core0.elf在Core1.elf上面。然后在Output pach后面把boot.bin修改为Boot.mcs。然后点击 Create Image
选择Core0
选择文件生成存储地址
选择MCS
画圈处是添加的文件
顺序为:FSBL.elf.bit文件 Core0.elf Core1.elf
点击Create Image 生成.mcs文件
6 完成 *** 作 将 .MCS 文件烧写进板子里
bin文件用来烧写到SD卡,mcs文件用来烧写到QSPI flash中 ,
选择Xilinx Tools –>Program Flash,在Image File后面选择刚才生成的Boot.mcs文件,Offset为0x0,Flash Type为qsip_single。勾选Blank check after erase和Verify after flash。检查开发板上电和连线状况,然后点击Program
1、创建硬件工程
启动XPS,创建Lab3工程。因为PS系统和FPGA连接是采用AXI接口,因而选择内部互联类型(Interconnect Type) 为AXI。
选择设计平台为Zynq ZC702
到外设配置界面,系统会默认有GPIO_SW 和 LEDs_4bits 这两个外设,我们不需要,remove之
2、添加AXI GPIO外设
工程建立后,在IP Catalog中,找到General Purpose IO,找到 AXI GPIO,双击添加到系统中。
修改元件实例化名称为axi_LDs,这个名称就是将要实例化连接到PS的元件。将长度改为8,其他默认。
点开Bus Interfaces标签,可以看到系统汇总现在有PS(这里是processing_systems7_0) 、添加的外设axi_LDs 和AXI内部互联总线axi_interconnet_1。可以看到对于 axi_interconnet_1来说,PS是AXI主设备,外设是AXI从设备。
在Port标签,将IO_IF中的GPIO_IO_O(output)设置为External Ports,将Port名称改为LD。LD就是顶层对外的引脚名称
3、设定引脚约束
在project标签中,找到system.ucf约束文件,
将其内容改为
4、点击Generate BitStream,生成bitstream
如果没有错题,控制台会提示信息如下,表明成功生成了FPGA的配置bitstream文件
5、将硬件配置导入到SDK,启动SDK。这里需要将bitstream和BMM文件同时包括到SDK中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)