Microblaze工程实例:生成一个可以输出双浮点数的工程配置全过程

前面已经有一篇博客介绍了MB的基本情况,这里将深入介绍MB的设置,最终实现可以用printf打印出双浮点数并操作BRAM。首先创建Block Design,如下图:

然后跳出新的界面,中间有个加号,添加MicroBlaze,然后双击,按下图分别对CPU架构、性能、调试功能、总线等进行配置:





其中AXI数据接口是与外围接口交互的总线,之后所有模块都挂在这个总线上。然后选择Run Block Automation添加内存,如下图所示:


然后按照下面配置,注意,内存比较足够大才能够使用printf函数打印出双浮点数:


配置后将会生成下图的各模块,之后将时钟按照自己板子的要求进行配置,也可以修改各模块的名字。


然后依次添加AXI UARTlite、BRAM(包括了AXI控制器和Block memory generator)、GPIO等,还可以直接添加AXI-Lite接口(右键选择Create Interface Port,选择协议),从而和自己写的支持AXI-Lite协议的模块进行交互,最后如下图所示,此时点击Run Connection Automation就可以完成自动布线的功能了。



然后选择保存,然后如下图选择菜单栏Tools的Validate Design检查整个block设计是否有问题。


如果没有问题,那么就可以生成CPU顶层文件调用,如下图所示:


这样就生成了顶层HDL文件,可以被其他模块调用。

当工程综合后,点击菜单栏File/Export/Export Hardware生成hdf文件,生成成功后,就可以在菜单栏File/Launch SDK上点击 启动SDK。


在启动SDK后,生成新的工程,如下图所示,选择File/Application Project


然后输入工程名,再点击Next,选择工程模板,这里推荐选择Hello World模板,如下图:


在编写代码过程中,操作BRAM等模块可以按照官方提供的高级API函数,也可以直接使用Xil_Out32和Xil_In32等函数进行操作,例如:

value = Xil_In32(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR+addr*4);

Xil_Out32(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR+addr*4, Value);

其中XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR是存储器的基地址,需要注意的是,由于AXI协议都是32比特4个字节进行操作,所以地址后两位是用来选择操作对应地址32比特的4个字节。

GPIO的基地址是XPAR_GPIO_0_DEVICE_ID,AXI接口的基地址是XPAR_(接口名)_BASEADDR。

该工程可以直接用printf函数打印出双浮点数。

另外,如果运行代码时申请内存空间失败(比较推荐使用静态变量和全局变量的方法,避免内存泄漏),可能是堆内存分配太小了,可以配置堆内存变大,打开lscript.ld,设置Heap Size的数值即可,如下图:


完成代码后,可以选择直接运行或者调试模式,如下图:


选择直接运行


选择调试模式

转自: https://blog.csdn.net/truecrab/article/details/80219866

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值