Vivado下的MicroBlaze使用(一)
因為在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的點亮。後續繼續詳細解讀程式碼。謝謝。