文章目录
- 一、概述
- 二、ip核的生成
特此说明:本文章转载于正点原子的microblaze教程
一、概述
MicroBlaze是Xilinx公司提供的一款32/64位软核嵌入式处理器,是一款高度灵活可配置的易用型处理器,它能够利用FPGA内部通用资源和相关IP核,实现可编程片上系统(SOPC)的设计。该处理器采用32位RISC(Reduced Insrtction System Computer)优化结构和Harvard总线结构,广泛适用于Spartan、Virtex和Artix等系列的FPGA。
MicroBlaze软核嵌入式处理器是高度可定制的IP核,支持70多个配置选项,有32个32位通用寄存器以及2个32位特殊寄存器—PC指针寄存器和MSR状态标志寄存器。另外MicroBlaze软核处理器还配有指令和数据缓存、浮点单元、内存管理单元和许多其他选项,从而大大提高其运算性能。MicroBlaze软核嵌入式处理器的所有指令字长都是32位,具有3个操作数和两种寻址模式,指令按功能可划分为:逻辑运算、算术运算、分支、存储器读/写和特殊指令等等。指令以并行流水线的方式执行,其流水线可分为取指、译码和执行。
MicroBlaze的框图如下所示,展示了固定的硬件特性模块和可配置选项,如指令和数据缓存。
图中MicroBlaze处理器的外部接口定义如下:
DPLB(Data Processor Local Bus): 数据接口,处理器本地总线。
DOPB(Data On-chip Peripheral Bus): 数据接口,片上外设总线,该接口实现CPU与片内外设的数据交换。
DLMB(Data Local Memory Bus): 数据接口,本地存储器总线,该总线为CPU与本地块存储器间的数据交换通道。
IPLB(Instruction Processor Local Bus): 指令接口,处理器本地总线。
IOPB(Instruction On-Chip Peripheral Bus): 指令接口,片上外设总线,CPU通过此总线读取外部存储器的程序代码。
ILMB(Instruction Local Memory Bus): 指令接口,本地存储器总线,该总线与内部块存储器相连,提供高速指令的提取。
MFSL0…15 (Fast Simple Link FSL master interface): FSL主设备数据接口,提供点对点的通信通道。
SFSL0…15 (Fast Simple Link FSL slave interface): FSL从接口,提供点对点的通信通道。
IXCL(Instruction side Xilinx Cache Link interface): 指令侧高速缓存链接接口。
DXCL(Data side Xilinx Cache Link interface): 数据侧高速缓存链接接口。
MicroBlaze 处理器通常用于如下图所示的三种预设配置之一:运行裸机应用程序的简单微控制器(Microcontroller);具有高速缓存和与运行嵌入式实时操作系统的实时处理器(Real-Time);最后是带有运行Linux 的内存管理单元的应用处理器(Application)。下表显示了在Artix-7 系列下的XC7A200T 芯片上这些配置的性能和利用率(如果是达芬奇Pro 开发板板载芯片XC7A35T,资源利用率会更大一些)。MicroBlaze 可以在所有Xilinx FPGA 中用作独立处理器,也可以在Zynq SoC 系统中用作协处理器。
二、ip核的生成
(1)使用 IP Integrator创建 Processing System
首先在Vivado界面左侧“Flow Nevagator”栏点击“Creat Block Design”,并在弹出提示框后,在“Design name”一栏将名称改为“system”点击“OK”,如下图所示
在生成的“Diagram”页面,我们点击“+”按钮(或快捷键Ctrl+I)添加IP核,在弹出的搜索框中输入“mic”,选择“MicroBlaze”并双击该IP核,生成的ip核界面如下所示:
(2)双击“microblaze_0”模块进入MicroBlaze的配置界面第一页“Welcome to Micro Blaze Configuration Wizard”,该页面提供模板选择和一般设置
Predefined Configurations: 配置模板,点击Select Configuration右侧的目录框我们能够看到多个模板选项(Minimum Area、Maximum Performance等),但本次试验不需要用到模板,因此保持默认选项“Current settings”就可以。
Select Processor Implementation: 选择32位或64位处理器。64位处理器将两个32位通用寄存器扩展为一个64位寄存器,提供处理64位数据的附加指令,并且可以使用最多64位地址寻址和最多4个EB指令和数据。一般情况使用32位处理器就可以了。
Select implementation optimization; 用于使能面积优化功能,打开其右侧的目录,我们可以看到有PERFORMANCE、AREA和FREQUENCY三个选项表示三种优化方式,其中AREA(区域)表示三级优化,速度最慢占用资源最少;FREQUENCY(频率)表示八级优化,速度最快占用资源最多;PERFORMANCE(性能)是五级优化,速度和资源占用量在AREA和FREQUENCY两者之间,本实验我们选择PERFORMANCE。
Enable MicroBlaze Debug Module Interface: 使能调试功能,一般情况下我们都开启该功能,只有在资源十分紧张的情况下才会禁止此功能。
Use Instruction and Data Caches: 使用指令和数据缓存。当使用外部存储时,激活这个选项可以明显地改善性能,由于本次实验我们使用的是本地存储,该选项对实验没影响,因此不选择。
Enable Exceptions: 异常功能的使能。
Enable Discrete Ports: 使能软核上的独立端口。
(3) 进入第二页General页面,General页面能够选择单元的选择和优化(通常情况下保持默认即可)。
使能桶型移位器(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指令。