AMD MicroBlaze™ 提供 Boot Loader,比如 SREC Boot Loader。它能将代码从 QSPI Flash 搬移到目标存储器(多半是 DRAM)运行,使 MicroBlaze 运行大程序成为可能。
如果 MicroBlaze 的 Block Design 设计有问题,比如 Block Design 设计中把 DRAM 链接到了 DP(外设)端口,DRAM 不能正常运行程序,也会导致 Boot Loader 运行失败。建议在运行 Boot Loader 之前,先测试 DRAM 运行程序,是否正常。
Boot Loader 运行时,假设 MicroBlaze 刚退出复位,系统中所有设置处于复位之后的默认状态。如果 MicroBlaze 运行了其它程序,可能使 MicroBlaze 的状态改变,可能导致问题。比如有程序使能了定时器中断,会定时产生中断。如果 Boot Loader 在运行过程中,硬件产生了中断,而 Boot Loader 又不能处理,则可能导致系统进入异常状态。
因此,建议在 Boot Loader 中增加下列代码,关闭中断处理、关闭 Cache 等。
Xil_ExceptionDisable();
Xil_DCacheFlush( );
Xil_DCacheDisable();
Xil_ICacheDisable();
使用 Boot Loader 时,建议的调试步骤如下:
MicroBlaze 读 QSPI Flash ID 正常,读 QSPI Flash 数据正确,数据是 SREC 文件里的数据。
MicroBlaze 能正常执行 DRAM 里的程序。
烧写 SREC 文件到 QSPI Flash。
MicroBlaze 读 QSPI Flash 里的 SREC 文件的数据正确。
MicroBlaze 执行 load_exec()加载程序后,跳转前,Reset 地址、DRAM 里的程序数据正确。双击 Microblaze 的 ELF 文件,可以自动反汇编,可以看到机器码。对比内存中的机器码,和 ELF 文件中的机器码一致。
执行 laddr() 前,flush cache,关闭 Cache。
执行 laddr() 中的跳转指令((*laddr)();)时,可以机器码单步执行。
AMD 自适应 SOC 及 FPGA 中文技术支持社区