1

我实际上正在研究我在我的 FPGA 中实现的 MicroBlaze 微控制器系统。但我想了解这个 MCU 是如何工作的。让我们考虑这个框图:

MicroBlaze MCS 框图

我们可以看到处理器通过 2 条 32 位总线连接到 BRAM 模块中。这些总线之一是 ILMB(指令本地内存总线),另一个是 DLMB(数据本地内存总线)。我们可以看到两者都连接到 BRAM 模块的不同端口。所以我的问题是:在哈佛架构中,程序指令和随机存取存储器不应该分开吗?当我们使用 Xilinx IP 内核生成器生成系统时,我们放入的内存大小是程序指令的大小、RAM 还是两者兼而有之?

内存大小?

我搜索了 xparameters.h 头文件中的定义,以找到 ILMB 和 DLMB 的内存中的地址,我发现两者的地址范围相同。

#define XPAR_DLMB_CNTLR_BASEADDR 0x00000000
#define XPAR_DLMB_CNTLR_HIGHADDR 0x00003FFF

#define XPAR_ILMB_CNTLR_BASEADDR 0x00000000
#define XPAR_ILMB_CNTLR_HIGHADDR 0x00003FFF

指令和数据都在同一个地址引用的事实让我感到困惑。有人能告诉我哪里错了吗?

4

1 回答 1

0

在这种情况下,ILMB 和 DLMB 总线共享相同的物理内存空间。这同样适用于内存大小参数。默认情况下,Mircoblaze 系统配置为共享数据和指令内存空间。

但事实上有 2 条独立的总线允许您将系统配置为具有驻留在完全不同的地址空间(或物理设备)中的数据和指令。例如,ILMB 可以配置为在 ROM 存储器上寻址,并且数据可以访问完全不同的 RAM 存储器硬件块。

Microblaze 是高度可配置的 CPU,单独的内存总线是在极少数情况下需要配置的配置点之一。大多数情况下,它们共享 BRAM 存储器的相同地址空间。

于 2017-04-09T06:37:44.700 回答