microblaze软核处理器及其ip核调用

一、microblaze软核处理器简介

MicroBlaze™ CPU 是嵌入式、可修改预置 32 位 RISC 微处理器配置系列。利用没有成本、基于 Eclipse 的 Xilinx 软件开发套件,系统设计人员可在没有任何 FPGA 经验的情况下,使用所选的评估套件立即启动 MicroBlaze 处理器的开发。MicroBlaze 处理器符合大量不同应用的需求,这些应用包括工业、医疗、汽车、消费类以及通信市场等。

MicroBlaze 处理器还包含三个用于模拟类似处理器类型的预置配置。

  • 微控制器:适合运行裸机代码
  • 实时处理器:RTOS 上的确定性实时处理
  • 应用处理器:支持嵌入式 Linux 功能

二、microblaze ip核配置说明

microblaze软核处理器及其ip核调用_第1张图片

当把鼠标放在选项上时,会出现一个提示,会告诉你它有什么作用。下面详细介绍这些选项。

---Select implemention to optimize area(with lower instruction throughput):使能面积优化功能。如果选了这个,implementation就会优化面积,尤其是减少流水线数量,从5条减少到3条。(推荐:建议在资源比较紧张的架构,如Artix-7,使能这个选项。然而,如果对性能有敏感的要求,就不要选这个选项,因为一些指令需要额外的时钟周期去执行。另外,对于MMU, Branch Target Cache, Instruction Cache Streams, Instruction Cache Victims, Data Cache Victims, ACE是不能进行面积优化的。

---Enable MicroBlaze Debug Module Interface:使能调试功能。用Xilinx Microprocessor Debugger来下载、调试程序。(推荐:除非面积资源奇缺,否则不要禁止这个功能。

---Use Instruction and Data Caches:当执行放在LMB之外的程序的时候,可以使用指令缓存来改善性能。指令缓存有如下特点:....当使用外部存储时,激活这个选项可以明显地改善性能,即使这个缓存很小。

---Enable Exceptions:当使用一个支持异常的操作系统时,需要激活这个选项。或者在一个单独的程序中添加异常回调函数。

---Use Memory Management:当使用一个支持虚拟内存保护的操作系统时(如Linux),需要激活。(当你使能面积优化或者堆栈保护功能时,内存管理单元是不可见的,自动禁止

---Enable Discrete Ports:使能软核上的独立端口。

microblaze软核处理器及其ip核调用_第2张图片

1、指令(Instructions)

---使能桶型移位器(Enable Barrel Shifter):使能软核中的筒形移位器硬件。激活这个参数,就可以使用如下指令(bsrl,bsra,...)使能这个可以提高应用的性能,但是会增大软核的尺寸。如果激活,编译器会自动使用筒形移位器指令。

---使能浮点单元(Enable Floating Point Unit):使能一个单精度浮点单元(FPU)。使用FPU可以明显地提高应用的单精度浮点性能,同时也会增大软核的尺寸。

---使能整形乘法器(Enable Integer Multiplier):使能一个整形乘法器硬件。若激活,则可以在给MUL32赋值时,使用mul和muli指令。当给MUL64赋值时,使用mulh,mulhu,mulhsu指令。这个参数可以设置为NONE,可以把MUL或者DSP48释放,用作其他用途。这样做对软核的面积影响很小。当使用这个选项,编译器自动使用mul指令。

---使能整形除法器(Enable Integer Divider):使能一个整形除法器硬件。若激活,可以使用idiv,iduvu指令。使能这个选项可以提高应用中的除法性能,但是增大了软核的尺寸。当使用这个选项,编译器自动使用idiv指令。

---使能额外机器状态寄存器指令(Enable Additional Machine Status Register Instructions):若激活,则可以读写MSR,使用msrset和msrclr命令。可以提高访问MSR的性能。

---使能模式比较器(Enable Pattern Comparator):如激活,则可以使用模式匹配指令pcmpbf,pcmpeq,pcmpne。模式匹配字节查找指令(pattern comparator byte find, pcmpbf)返回找到的第一个字节的位置,提高字符串和模式匹配操作的效率。若使能,SDK库会自动使用这个指令。pcmfeq和pcmpne指令根据两个字是否相同,返回1或者0。这些指令会提高setting flags的效率,编译器会自动使用它们。激活这个选项还可以count leading zeros指令,clz。clz指令能提高优先级编码的效率。

---使能保留的加载/保存和交换指令(Enable Reserved Load/Store and Swap Instructions):lbur,lhur,lwr,sbr,shr,swr,swapb,和swaph。这些指令能够以相对的字节序来读写数据,交换指令能交换字节或者半个字长。当用little-endian的MicroBlaze访问big-endian的网络时,可以提高效率。

---使能额外的流命令(Enable Additional Stream Instructions):当使用AXI4-Stream链接时,提供额外的功能。这包括动态访问指令GETD和PUTD,这两个指令用寄存器来选择接口。(重要:一定要激活流异常功能,才能使用这些指令,而且知道选择一个流链接)

2、优化

选择Implementation来优化面积(当指令吞吐量很低时):这个选项和欢迎页的选项功能相同。...

3、容错

---使能容错功能(Enable Fault Tolerance Support)

三、

一个简单的Microblaze系统:
1. Microblaze核
2. 时钟产生模块、重置信号产生模块
3. LMB模块 局部存储模块,分为ILMB(指令)和DLMB(数据)
该模块用来作为CPU的内存,可以分成指令和数据两块内存,也可以共享一块内存
现假设指令和数据内存控制器是分开的,那么LMB模块由如下几个模块组成
两个LMB总线模块,两个LMB内存控制器,一个BRAM模块
其中LMB内存控制器的 SLMB Adrress Decode Mask指定了内存哪一位作为LMB解码器需要考虑地址解码的位,比如0x010,那么第5位就是被看作是否进行地址解码的位数

MicroBlaze可以直接操作GPIO、BRAM等模块而不使用API接口,使用"xil_io.h"头文件的如下函数:
Xil_Out32(REG_ADDR, Value);
Value = Xil_In32(REG_ADDR, Value);

Xilinx提供了xil_printf函数,比起printf函数少了浮点数的支持,程序小很多
在Xilinx提供UART调试窗口(相当于串口调试助手):https://blog.csdn.net/lzy272942518/article/details/46681963

关于双浮点数:

MB可以处理双浮点数,但是MB硬件本身不支持双浮点数,它是在软件上模拟双浮点数,如果要用printf输出双浮点数,那么MB需要更大的内存,但是可以不需要Cache。

与FPGA的通信:

可以使用BRAM,GPIO、AXI协议和FPGA通信,支持异步通信。

 

 


原文:https://blog.csdn.net/truecrab/article/details/79776437 
 

你可能感兴趣的:(FPGA常用接口)