在Block Design中查找IP時輸入Microblaze,就會發現下面幾種IP,我們常規使用的就是第一個IP,是一個可以自定義外設的軟核,但是第三個MicroBlaze MCS到底是個啥,我們接下來詳解。
MicroBlaze 微控制器系統 (MCS)是一個 MicroBlaze 實例。MCS 是一個集成的 MicroBlaze 解決方案,在單個模塊中包含本地存儲器、UART、定時器和 GPIO。MCS 旨在減少邏輯資源和程序存儲器的占用空間。MCS 可以使用三級或五級管道,具體取決于優化是針對面積還是性能。
MCS 的優勢之一是,與使用 MicroBlaze 和分立IP創建等效系統相比,MCS 能夠實現進一步優化。
MCS 和 MicroBlaze 之間的主要區別如下表所示。
MCS 為我們想要與 GPIO 交互和 UART 接口使用提供了出色的解決方案。
MCS 解決方案提供以下功能:
UART – 具有可配置的波特率、停止位和中斷或輪詢模式。
固定間隔定時器 (FIT) – 四個具有 32 位的固定內部定時器。每個 FIT 均提供專用輸出,可生成 50% 占空比輸出。
周期間隔定時器 (PIT) – 四個周期間隔定時器,可在運行時更改。
中斷 – IO 模塊的中斷控制器還可以處理外部中斷。
GPIO – 四個通用輸出和四個通用輸入GPIO。
為了探索 MCS,創建一個針對 Arty S7 的項目。項目打開后,可以將 MCS 添加到BD中,并且可以將 GPIO 輸出連接到 Arty S7 上提供的按鈕、開關、LED 和 RGB LED。
在此示例中,代碼讀取 DIP 開關并以一秒循環驅動 LED。
#include#include"platform.h" #include"xil_printf.h" #include"xiomodule.h" #include"xparameters.h" #include"xil_printf.h" intmain() { XIOModuleIOModule; XIOModule_Config*IOCfgPtr=IOModule.CfgPtr; u32switches; init_platform(); print("MicroBlazeMCS "); XIOModule_Initialize(&IOModule,XPAR_IOMODULE_0_NUM_INSTANCES); while(1){ switches=XIOModule_DiscreteRead(&IOModule,1); usleep(1000000); xil_printf("DIPSwitches%x ",switches); XIOModule_DiscreteWrite(&IOModule,3,switches); } cleanup_platform(); return0; }
由于 MCS 不提供從外部存儲器運行的能力,因此由 Vitis 生成并包含應用程序的 ELF 文件必須與 Vivado 中的比特流合并。這也能確保了 MCS 應用程序在 FPGA 配置完成后立即開始運行。
當然,當我們開發這些應用程序時,我們希望應用程序適合用于 MCS 的 BRAM。我們還希望確保不會在 MCS 定義階段分配過多的 BRAM 。
當我們在 Vitis 中編譯程序時,我們可以在控制臺中看到已編譯程序的字節大小。
我們可以使用此值來確保最佳的 BRAM 大小。
審核編輯:劉清
-
微控制器
+關注
關注
48文章
7566瀏覽量
151604 -
存儲器
+關注
關注
38文章
7512瀏覽量
163980 -
mcs
+關注
關注
0文章
73瀏覽量
24811 -
UART接口
+關注
關注
0文章
124瀏覽量
15315 -
中斷控制器
+關注
關注
0文章
59瀏覽量
9469 -
Vivado
+關注
關注
19文章
813瀏覽量
66648
原文標題:【Vivado那些事兒】MicroBlaze MCS 和 MicroBlaze區別
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論