1 概述
前文,我们搭建了不含 DDR 的 microblaze 最小系统。这种系统使用 FPGA 内置的 BRAM 资源,而 BRAM 通常比较有限。这样当 CPU 的 SDK 程序规模大到一定程度,就放不下了。而使用 DDR 就不存在这个问题。当然使用 DDR 也会增加资源的消耗,尤其对于 MIG 核来说,这是一个软核,占用不少资源。
2 系统框图
一个 MicroBlaze 最小系统主要由四个部分组成:CPU、内存(BRAM 或者 DDR 等)和 UART,本实验在前一个实验基础上加入 DDR,这里需要使用到 MIG 核,MIG 核会比较占用 FPGA 资源,使用 DDR 可以让 Microbalze 获得更大的内存,用于存放数据或者代码。
3 基于图形化设计 SOC 系统
3.1 配置 Microblaze IP 核
本实验在前一个实现基础上进行开发。双击 Microblaze 核,勾选 Use Instruction and Data Caches
单击 Advanced 把 cache 修改下,因为我们这里不需要太高的 CPU 性能,因为我们的入门级开发板 BRAM 资源有限,如果对于高性能的应用可以增加 cache
配置完成后,可以看到 microblaze 多出了两个接口
3.2 添加 AXI-Interconnect IP
添加 1 个 axi-interconnect IP,互联到这两个接口
双击该 IP,修改设置如下
3.3 添加 MIG IP 核心
XILINX DDR 通过 MIG 控制,添加 MIG IP 核
双击 IP 配置,设置MIG 核
导入 DDR 的 IO 约束,这个文件也是我们从已经做好的工程导出的,直接导入可以提高效率,不同的板子文件名可能不一样注意下。
校对
既然可以导入,那么也可以通过 Save Pin Out 导出设置,这里就不再演示
MIG 核配置完成后
3.4 完成信号连线设计
连线的过程不再重复描述,如果有不清楚的也可以看对应的视频课程,完成 IP 之间的连线,并且引出 MIG DDR 接口
3.5 BD(block design)层次化功能
可以把带 DDR 的系统用层次化方法弄成一个带 DDR 的最小系统,全选所有 IP,右击选中创建层次化
取名可以自己取,这里设置 MinSoc
继续右击,选中 Regenerate Layout
现在看起来非常清爽了,端口只包含了时钟输入、串口、FLASH 和 DDR
3.6 地址空间分配
检查地址空间,分配下地址
4 搭建 Vitis-sdk 工程
创建 soc_base sdk platform 和 APP 工程。
4.1 创建 SDK Platform 工程
过程不再重复,如果不清楚的请看第一个 demo
4.2 创建 helloworld APP 工程
过程不再重复,如果不清楚的请看第一个 demo。
如下图右击 helloworld 工程,选择 Generate Linker Script
如下图设置,程序、数据、堆在的运行地址空间为 DDR 内存空间,当数据、代码、堆栈都放到 DDR,CPU 指令的读取速度会降低,当然也可以根据实际情况增加 Cache,把堆栈放到 BRAM 等,另外堆栈下面设置的 1KB,当具有中断的程序,可能存在较多的代码和需要需要压入堆栈,可能会导致堆栈不够,这个时候建议设置 4KB 以上。
之后重新编译下
5 实验演示
为了观察实现结果,需要打开串口
首选选中 Debug,出来 Vitis Serial Terminal,串口终端
设置正确的串口号
单击 OK 打开终端
选中 Design 切换界面
右击选中调试
双击 System Project Debug
选中 SystemDebug_hellowrld_sytem 单击 debug
输入结果如下,最小系统运行正常
|