【Vivado那些事儿】MicroBlaze MCS 和 MicroBlaze区别
在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 <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xiomodule.h"
#include "xparameters.h"
#include "xil_printf.h"
int main()
{
XIOModule IOModule;
XIOModule_Config *IOCfgPtr = IOModule.CfgPtr;
u32 switches;
init_platform();
print("MicroBlaze MCS\n\r");
XIOModule_Initialize(&IOModule, XPAR_IOMODULE_0_NUM_INSTANCES);
while(1){
switches = XIOModule_DiscreteRead(&IOModule, 1);
usleep(1000000);
xil_printf("DIP Switches %x\n\r",switches);
XIOModule_DiscreteWrite(&IOModule,3,switches);
}
cleanup_platform();
return 0;
}
由于 MCS 不提供从外部存储器运行的能力,因此由 Vitis 生成并包含应用程序的 ELF 文件必须与 Vivado 中的比特流合并。这也能确保了 MCS 应用程序在 FPGA 配置完成后立即开始运行。
当然,当我们开发这些应用程序时,我们希望应用程序适合用于 MCS 的 BRAM。我们还希望确保不会在 MCS 定义阶段分配过多的 BRAM 。
当我们在 Vitis 中编译程序时,我们可以在控制台中看到已编译程序的字节大小。
我们可以使用此值来确保最佳的 BRAM 大小。
A seleção: 您好,请问我用的官方IP生成的例程跑测试文件,结果遇到txdata全零,ena,sop,eop都为低,rxdata开始全为不定态,ena,sop,eop都为低,接收部分状态机进入了wait_rx_aligned的状态,之前一个状态是gt_locked,但是按照手册,在gt_locked的状态内rx_core_busy_led应该拉高,但是在仿真中,信号并没有拉高,rx_aligned也一直为0,到现在没定位到问题在哪里,请问这是为啥啊
A seleção: 您好,请问我用的官方IP生成的例程跑测试文件,结果遇到txdata全零,ena,sop,eop都为低,rxdata开始全为不定态,ena,sop,eop都为低,接收部分状态机进入了wait_rx_aligned的状态,之前一个状态是gt_locked,但是按照手册,在gt_locked的状态内rx_core_busy_led应该拉高,但是在仿真中,信号并没有拉高,rx_aligned也一直为0,到现在没定位到问题在哪里,请问这是为啥啊
m0_71685185: 你好,想问下HDL报这个错是怎么回事啊,之前一直这么写的没事,到24题就出错了,报错是这样的: Error (12007): Top-level design entity "top_module" is undefined ,然后我又试着编译了一下之前没问题的,也报这个错
666ghj: 可以试试我写的这个:https://drawfa.lovexl.top/
qglobal: 感谢楼主,亲测有用,1分钟解决问题,赞