软件版本:vitis2021.1(vivado2021.1) 操作系统:WIN10 64bit 硬件平台:适用AMD-XILINX A7/K7/Z7/ZU/KU系列FPGA 1 概述前面学习了很多Microblaze软核的实验,但是最终我们是要固化到开发板运行的才有实际的工程价值。本实验完成SDK程序固化到FLASH,并且从FLASH启动。 2 系统框图3 基于图形化设计SOC系统本实验通过前面的实验完成,所以不再重复BD 图像化编程的过程,最小系统的层次化设计如下: 展开层次化后如下: 4 搭建Vitis-sdk工程创建soc_base sdk platform和APP工程。 4.1 创建SDK Platform工程过程不再重复,如果不清楚的请看第一个demo 4.2 创建helloworld APP工程过程不再重复,如果不清楚的请看第一个demo。 如下图右击helloworld工程,选择Generate Linker Script 如下图设置,程序、数据、堆在的运行地址空间为DDR内存空间,设置在DDR中代码执行效率会降低,根据实际情况可以把堆栈设置大一些,也可以在Microblaze IP核中,配置更大的cache和对性能就行优化 之后重新编译下 4.3 创建bootloader引导程序创建APP过程不再重复,到最后一页,选择SREC SPI Bootloader 创建完成后 右击工程选择Generate Linker Script 设置程序、数据、堆栈全部运行于BRAM,所以BRAM就不能太小,Bootloader也不能太大,bootloader启动把应用程序复制到DDR中运行 修改blconfig.h中的文件,FLASH_IMAGE_BASEADDR 0x00500000,这个是FLASH的地址,也就是bootloader程序从这个地址加载进来,后面我们会涉及如何下载程序到FLASH 修改后保存,右击编译工程 编译完成后产生bootloader.elf 5 固化测试5.1 产生download.bit首先要通过下载bit产生download.bit , download.bit包含了fpga部分的bit文件已经刚才产生的bootloader.elf文件部分。原理是包含microbalze的download.bit加载完成后,在bram中运行bootloader.elf程序,bootloader.elf文件程序从FLASH_IMAGE_BASEADDR 0x00500000设置的地址加载用户的应用程序,这里把应用程序加载到DDR中。 右击选择Program Device 单击Program 开发板可以不通电,因为我们主要为了产生download.bit,JTAG不接通开发板会报一个错误,可以不管,单击OK 控制台已经产生了download.bit文件
5.3 固化helloworld.elf文件选择helloworld工程,右击选择Program Flash 以下offset 的地址是FLASH中hellowrold.elf程序的起始地址,和bootloader程序中的FLASH_IMAGE_BASEADDR 0x00500000保持一致。设置好后,单击Program 提示下载成功 5.2 固化download.bit文件连接好JTAG,并且给开发板通电,右击选择Program Flash Download.bit的加载地址从0x00开始 下载结束 5.4 断电重启开发板首先打开串口 给开发板断电后通电 可以看到串口输出了启动打印过程,最后输出了"Hello World" 5.5 优化bootloader程序在bootloader.c中,注释掉#define VERBOSE,之后重新编译 重新制作download.bit,然后下载downlaod.bit方法和前面一样 固化完成后,重新上电串口打印输出如下
6本章小结本章节系统的学习了Microblaze的固化方法,方法具有通用性,在其他的Microblaze demo中也可以通过一样的方法实现程序固化。
|