UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 22857

9.2i EDK/SimGen - "WARNING:MDT - ....\executable.elf does not reside completely within BRAM memory of processor ppc405_0"

Description

I have a PowerPC system with block RAMs on ISOCM and DSOCM, and the second port of DSOCM-BRAM is connected to opb_if_cntrl. If I run SimGen or BRAM_INIT, the following message occurs, indicating that my .elf file does not reside completely within block RAM memory:

"WARNING:MDT - Elf file C:\........\executable.elf does not reside

completely within BRAM memory of processor ppc405_0.

WARNING:MDT - The sections of ELF residing outside BRAMs must be initialized

separately using a debugger, a bootloader, or an ACE file"

Solution

This usually occurs in a setup where there is an OPB_BRAM controller and a DSOCM-BRAM controller are connected to the same block RAM (OPB on Port A, DSOCM on Port B).

The memory is not being initialized and the tools are generating a warning because of some design rules in the generation of the BMM file.

If both ports of a block RAM are used, the BMM file will reflect the address range of PORTA.

Port A is connected to the OPB_BRAM controller, so the address range of the block RAM module in BMM syntax is:

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;

This causes problems with the addition of the compiled data into the block RAM, because the .elf file contains the following headers:

Sections:

Idx Name Size VMA LMA File off Algn

0 .vectors 00000000 ffffc000 ffffc000 000005e0 2**0

CONTENTS

1 .text 000001e8 ffffc000 ffffc000 000003e4 2**2

CONTENTS, ALLOC, LOAD, CODE

2 .rodata 00000002 f0000000 f0000000 000000b4 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

3 .fixup 00000014 f0000004 f0000004 000000bc 2**2

CONTENTS, ALLOC, LOAD, DATA

4 .got1 00000000 f0000018 f0000018 000005e0 2**0

CONTENTS

5 .got2 00000020 f0000018 f0000018 000000d0 2**2

CONTENTS, ALLOC, LOAD, DATA

6 .sdata2 00000000 f0000038 f0000038 000000f0 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

7 .sbss2 00000000 f0000038 f0000038 000005e0 2**0

CONTENTS

8 .data 000002f0 f0000038 f0000038 000000f0 2**3

CONTENTS, ALLOC, LOAD, DATA

9 .sdata 00000004 f0000328 f0000328 000003e0 2**2

CONTENTS, ALLOC, LOAD, DATA

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

CONTENTS, ALLOC, LOAD, READONLY, CODE

13 .boot 00000004 fffffffc fffffffc 000005dc 2**0

CONTENTS, ALLOC, LOAD, READONLY, CODE

14 .eh_frame 00000000 f000032c f000032c 000005e0 2**0

CONTENTS

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

CONTENTS, READONLY, DEBUGGING

18 .stabstr 000027dd 00000000 00000000 00001540 2**0

CONTENTS, READONLY, DEBUGGING

19 .comment 000000a2 00000000 00000000 00003d1d 2**0

CONTENTS, READONLY

Now, the DSOCM is at 0x10000000 (from the MHS file), so the .elf file includes contents for the data areas in this region.

To resolve this problem, swap ports A and B on the block RAM instance so that the DSOCM controller is attached to Port A. This modifies the BMM file so the block RAM address is at 0xF0000000. After this modification, the following BMM file is generated:

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;

AR# 22857
Date Created 09/04/2007
Last Updated 12/15/2012
Status Active
Type General Article