首先这是 Xilinx MicroBlaze 处理器的本地内存配置信息,具体分析如下:
一、配置详解
microblaze_0_local_memory/dlmb_bram_if_cntlr SLMB Mem 0x0000 0000 8K 0x0000_1FFF
1. 各部分含义:
-
microblaze_0_local_memory/dlmb_bram_if_cntlr-
MicroBlaze 实例名称:
microblaze_0 -
内存类型:
local_memory(本地内存) -
控制器:
dlmb_bram_if_cntlr(数据端 LMB BRAM 接口控制器)
-
-
SLMB- 从接口 LMB(Slave LMB) -
Mem- 内存类型 -
0x0000 0000- 基地址(起始地址) -
8K- 内存大小:8 KB -
0x0000_1FFF- 结束地址
二、内存映射
地址范围: 0x0000_0000 - 0x0000_1FFF 大小: 0x2000 (8192 字节 = 8 KB)
三、在 Vivado Block Design 中的体现
1. 典型的 MicroBlaze 本地内存结构
MicroBlaze
|
|-- DLMB (数据LMB) -- BRAM控制器 -- BRAM (8KB)
|
|-- ILMB (指令LMB) -- BRAM控制器 -- BRAM (8KB)
2. 地址空间分配
// 在 xparameters.h 中定义的地址 #define DLMB_CNTLR_BASEADDR 0x00000000 #define DLMB_CNTLR_HIGHADDR 0x00001FFF #define ILMB_CNTLR_BASEADDR 0x00000000 // 通常指令和数据共享 #define ILMB_CNTLR_HIGHADDR 0x00001FFF // 或使用不同范围
四、在 SDK/Vitis 中的使用
1. 链接器脚本配置
MEMORY
{
microblaze_0_local_memory_dlmb_bram_if_cntlr_Mem : ORIGIN = 0x00000000, LENGTH = 0x2000
microblaze_0_local_memory_ilmb_bram_if_cntlr_Mem : ORIGIN = 0x00000000, LENGTH = 0x2000
}
2. 应用程序使用
#include "xparameters.h" // 访问本地内存 uint32_t *local_mem = (uint32_t *)XPAR_DLMB_CNTLR_BASEADDR; // 在本地内存中存储数据 local_mem[0] = 0x12345678; local_mem[1] = 0xABCDEF00;
五、配置选项
1. 内存大小调整
# 在 Tcl 控制台中调整内存大小
set_property CONFIG.C_CE_COUNTER_WIDTH {12} [get_bd_cells dlmb_bram_if_cntlr_1]
# 这会改变内存大小(2^12 = 4096 × 数据宽度)
2. 常见内存大小配置
-
8KB - 默认配置
-
16KB -
0x0000_3FFF -
32KB -
0x0000_7FFF -
64KB -
0x0000_FFFF
六、性能特点
1. 优点
-
低延迟:紧耦合内存,单周期访问
-
确定性:固定访问时间,无总线竞争
-
高带宽:直接连接处理器
2. 限制
-
容量有限:通常 8-64KB
-
共享使用:指令和数据可能竞争带宽
七、调试信息
在调试时,可以通过这个内存映射:
// 设置断点观察本地内存
printf("DLMB Base: 0x%08X\n", XPAR_DLMB_CNTLR_BASEADDR);
printf("DLMB Size: %d bytes\n",
XPAR_DLMB_CNTLR_HIGHADDR - XPAR_DLMB_CNTLR_BASEADDR + 1);
这个配置是 MicroBlaze 嵌入式系统的典型设置,为处理器提供了快速的本地存储空间。
1077

被折叠的 条评论
为什么被折叠?



