问题描述
我在ISOCM和DSOCM上有一个带Block RAM的PowerPC系统,DSOCM-BRAM的第二个端口连接到opb_if_cntrl。如果我运行SimGen或BRAM_INIT,则会出现以下消息,表明我的.elf文件并未完全驻留在Block RAM内存中:
“警告:MDT – Elf文件C:\ …….. \ executable.elf不驻留
完全在处理器ppc405_0的BRAM内存中。
警告:MDT – 必须初始化驻留在BRAM外部的ELF部分
单独使用调试器,引导加载程序或ACE文件“
解决/修复方法
这通常发生在OPB_BRAM控制器和DSOCM-BRAM控制器连接到同一个Block RAM(端口A上的OPB,端口B上的DSOCM)的设置中。
由于生成BMM文件中的某些设计规则,内存未初始化并且工具正在生成警告。
如果使用Block RAM的两个端口,BMM文件将反映PORTA的地址范围。
端口A连接到OPB_BRAM控制器,因此BMM语法中块RAM模块的地址范围是:
ADDRESS_BLOCK exchange_memory RAMB16 [0x10000000:0x10003fff]
ADDRESS_BLOCK exchange_memory RAMB16 [0x10000000:0x10003fff]
BUS_BLOCK
exchange_memory / exchange_memory / ramb16_0 [31:28];
exchange_memory / exchange_memory / ramb16_1 [27:24];
exchange_memory / exchange_memory / ramb16_2 [23:20];
exchange_memory / exchange_memory / ramb16_3 [19:16];
exchange_memory / exchange_memory / ramb16_4 [15:12];
exchange_memory / exchange_memory / ramb16_5 [11:8];
exchange_memory / exchange_memory / ramb16_6 [7:4];
exchange_memory / exchange_memory / ramb16_7 [3:0];
END_BUS_BLOCK;
END_ADDRESS_BLOCK;
这会导致将编译数据添加到Block RAM中的问题,因为.elf文件包含以下标头:
部分:
Idx名称大小VMA LMA文件关闭Algn
0 .vectors 00000000 ffffc000 ffffc000 000005e0 2 ** 0
内容
1 .text 000001e8 ffffc000 ffffc000 000003e4 2 ** 2
内容,ALLOC,LOAD,CODE
2 .rodata 00000002 f0000000 f0000000 000000b4 2 ** 2
内容,ALLOC,LOAD,READONLY,DATA
3 .fixup 00000014 f0000004 f0000004 000000bc 2 ** 2
内容,ALLOC,负载,数据
4 .got1 00000000 f0000018 f0000018 000005e0 2 ** 0
内容
5 .got2 00000020 f0000018 f0000018 000000d0 2 ** 2
内容,ALLOC,负载,数据
6 .sdata2 00000000 f0000038 f0000038 000000f0 2 ** 2
内容,ALLOC,LOAD,READONLY,DATA
7 .sbss2 00000000 f0000038 f0000038 000005e0 2 ** 0
内容
8。数据000002f0 f0000038 f0000038 000000f0 2 ** 3
内容,ALLOC,负载,数据
9 .sdata 00000004 f0000328 f0000328 000003e0 2 ** 2
内容,ALLOC,负载,数据
10 .sbss 00000000 f000032c f000032c 000005e0 2 ** 0
11 .bss 00000000 f000032c f000032c 000003e4 2 ** 0
ALLOC
12 .boot0 00000010 ffffc1e8 ffffc1e8 000005cc 2 ** 0
内容,ALLOC,LOAD,READONLY,CODE
13 .boot 00000004 fffffffc fffffffc 000005dc 2 ** 0
内容,ALLOC,LOAD,READONLY,CODE
14 .eh_frame 00000000 f000032c f000032c 000005e0 2 ** 0
内容
15 bss_stack 00000404 f000032c f000032c 000003e4 2 ** 0
ALLOC
16 bss_heap 00000400 f0000730 f0000730 000003e4 2 ** 0
ALLOC
17 .stab 00000f60 00000000 00000000 000005e0 2 ** 2
内容,随便,调试
18 .stabstr 000027dd 00000000 00000000 00001540 2 ** 0
内容,随便,调试
19 .comment 000000a2 00000000 00000000 00003d1d 2 ** 0
内容,READONLY
现在,DSOCM位于0x10000000(来自MHS文件),因此.elf文件包含该区域中数据区域的内容。
要解决此问题,请交换Block RAM实例上的端口A和B,以便DSOCM控制器连接到端口A.这将修改BMM文件,使块RAM地址为0xF0000000。完成此修改后,将生成以下BMM文件:
ADDRESS_BLOCK exchange_memory RAMB16 [0xf0000000:0xf0003fff]
BUS_BLOCK
exchange_memory / exchange_memory / ramb16_0 [31:28];
exchange_memory / exchange_memory / ramb16_1 [27:24];
exchange_memory / exchange_memory / ramb16_2 [23:20];
exchange_memory / exchange_memory / ramb16_3 [19:16];
exchange_memory / exchange_memory / ramb16_4 [15:12];
exchange_memory / exchange_memory / ramb16_5 [11:8];
exchange_memory / exchange_memory / ramb16_6 [7:4];
exchange_memory / exchange_memory / ramb16_7 [3:0];
END_BUS_BLOCK;
END_ADDRESS_BLOCK;
没有回复内容