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后,生成新的工程,其中操作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的数值即可,如下图:


猜你喜欢

转载自blog.csdn.net/truecrab/article/details/80219866