版权声明:本文为博主原创文章,未经博主允许不得转载。
1、 问题描述:从Vivado生成了mb软核文件,并下载到板子上。从Vivado中打开SDK,运行helloworld程序,控制台无法打印输出。
解决方法1:.在SDK的Run配置选项中,需要在STDIO Connection中选中“Connect STDIOto Console”,并将Port设置为“JTAG UART”。
解决方法2:确定问题出现的位置:hw_platform ? Board Support Package ? software application ? 确定的方法是替换,换一个软核,换一个BSP,或者换一个应用程序。我遇到的情况错误定位在BSP,而且是"../hello_world_bsp/microblaze_0/lib/libxil.a"这个文件导致的,问题的原因出在,和硬件相关联的某个库配置错了。于是乎,用SDK分别打开两个BSP工程(一个能用,一个不能用;我没找到直接打开BSP工程的方法,而是从Vivado中导入的),打开“system.mss”文件,单击“Modify this BSP's Settings”,一对比,发现,在standalone视图下,stdin和stdout的值都是axi_uartlite_0(因为我在Vivado配置软核时,添加了Uart IP核),把它们的值改为“mdm_1”。问题解决。
额外收获:在Vivado的microBlaze设计中,模块性非常明显。
首先,在Vivado中,用设计IP核的方式设计microBlaze子系统,生成一个能烧进板子的bit文件。
然后在Vivado中,“Export Hardware”,即生成一个SDK可识别的硬件平台(本质上就是一个文件夹,文件里面包含一个文件,mb_subsystem_wrapper.hdf)。
从Vivado中打开SDK后,SDK读取mb_subsystem_wrapper.hdf文件,新建与硬件平台相关的文件夹。
然后新建BSP、应用程序。BSP的作用,是为应用程序提供一个访问硬件的接口,比如"xgpio.h"等。应用程序只需调用BSP中的.h文件,就可以访问到硬件。
2、 问题描述:无法下载bit文件,并且错误提示信息中提到某个路径,“.hw.xml”之类的。
解决方法:可以把这个文件删了,重新建立Device。有时候在SDK中也会突然出现无法下载之类的问题,重启SDK,也能解决问题。
3、 问题描述:MicroBlaze找不到时钟
解决方法:在Vivado的Block Design中,检查Clock,再检查Reset信号。最后可能的情况是,Reset在板子上一直使能,软核当然就不能被clock了。我遇到这个问题是在参考David's Blog,里面说到从官网下载Nexys4的约束文件,然后就对着做了,后来发现,这个约束文件是对应Nexys4 REV B版本的,而我的板子是REV C。修改了引脚分配之后,问题解决。