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

时间:2017-04-08 12:21:08

标签: vhdl xilinx xilinx-ise microblaze

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

MicroBlaze MCS block diagram

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

Memory size?

我搜索了xpar​​ameters.h头文件中的define,找到了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

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

1 个答案:

答案 0 :(得分:0)

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

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

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