因為在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的點亮。后續繼續詳細解讀代碼。謝謝。