MicroBlaze MCS 中的指令和数据是如何组织的?

How the instructions and data are organised in a MicroBlaze MCS?

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

MicroBlaze MCS block diagram

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

Memory size?

我搜索了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

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

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

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

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