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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM