因为在FPGA下搭建一个软核,可以将串行算法的优势和并行快速优势结合,对于一个FW工程师来说,将会大有裨益。
下面我们从零开始学习其使用方式,以Vivado下的使用为例。
MicroBlaze的创建使用,一共分成8步;
1.新建一个Vivado工程;
2.使用集成IP工具生成MicroBlazeIP核;
3.编译成功后,生成输出Products;
4.创建top-level wrapper,并且将模块加入到RTL项目中;
5.综合实现后,启动Vitis进行C语言编程;
6.编辑功能实现;
7.使用Updateemem合并步骤6产生的文件ELF
8.下载到目标板中。
开始新建一个工程:
新建完工程后,选择如下MicroBlaze,
点击Run Block Automation.
选择16kB其它默认参数,以后再仔细探究。
生成后,添加GPIOIP核,进行自动布线,然后根据自己的开发板,选择输入时钟和复位管脚,记得设置一i西安GPIO的输出宽度,默认是32位。
然后右击,选择Validate Design ,提示如下成功后,
在Source下右击,选择Generate Output Products如下:
生成输出文件后,要继续在Source下右击选择Generate HDL Wrapper,生成BD快的Verilog模块。
然后进行管脚分配,选择Layout下的I/O Planning,
选择完端口后,点击生成bit,然后工具自动完成整个过程。等待。。。
成功后,File->Export->Export Hardware。
接下来,新建SDK的工程,在SDK里面点击 File -> New -> New Application Projec
将testperiph.c中的内容删除,改写如下:
#include <stdio.h>
#include "xparameters.h"
#include "xil_cache.h"
#include "xgpio.h"
#include "gpio_header.h"
#define LED_CHANNEL 1
XGpio GpioOutput; /* The driver instance for GPIO Device configured as O/P */
XGpio GpioInput;
void delay(u32 ms)
{
volatile u32 Delay1=0;
volatile u32 Delay2=0;
for (Delay1 = 0; Delay1 < ms; Delay1++)
{
for (Delay2 = 0; Delay2 < 8332; Delay2++);
}
}
int main ()
{
int Status;
int cunt=0;
Xil_ICacheEnable();
Xil_DCacheEnable();
Status = XGpio_Initialize(&GpioOutput, XPAR_AXI_GPIO_0_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
XGpio_SetDataDirection(&GpioOutput, LED_CHANNEL, 0x0);
XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0);
while(1)
{
if(cunt==8)
cunt=0;
XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL ,0xf0);
delay(500);
XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL ,0x0f);
delay(500);
cunt++;
}
Xil_DCacheDisable();
Xil_ICacheDisable();
return 0;
}
出自:MicroBlaze控制LED入门【史上最详细】_cuifuxiang的博客-CSDN博客_microblaze详细教程
然后下载到FPGA可实现LED的点亮。后续继续详细解读代码。谢谢。