1 概述
本实验完成 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.2 固化 download.bit 文件
连接好 JTAG,并且给开发板通电,右击选择 Program Flash
Download.bit 的加载地址从 0x00 开始
下载结束
5.3 固化 helloworld.elf 文件
选择 helloworld 工程,右击选择 Program Flash
以下 offset 的地址是 FLASH 中 hellowrold.elf 程序的起始地址,和 bootloader 程序中的 FLASH_IMAGE_BASEADDR 0x00500000 保持一致。设置好后,单击 Program
提示下载成功
5.4 断电重启开发板
首先打开串口
给开发板断电后通电
可以看到串口输出了启动打印过程,最后输出了“Hello World”
5.5 优化 bootloader 程序
在 bootloader.c 中,注释掉#define VERBOSE,之后重新编译
重新制作 download.bit,然后下载 downlaod.bit 方法和前面一样
固化完成后,重新上电串口打印输出如下
|