© 2003 xilinx, inc. all rights reserved address management

28
© 2003 Xilinx, Inc. All Rights Reserved Address Management

Upload: elfrieda-hardy

Post on 26-Dec-2015

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: © 2003 Xilinx, Inc. All Rights Reserved Address Management

© 2003 Xilinx, Inc. All Rights Reserved

Address Management

Page 2: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 2 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Objectives

After completing this module, you will be able to:• Describe address management for the IBM PowerPC and

MicroBlaze processors• Define a system address space• Define an advanced user address space• Understand the object file sections• Understand what a linker script does

Page 3: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 3 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Outline

• Address Management• System Address Space• Advanced User Address Space• Object File Sections• Linker Scripts

Page 4: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 4 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Address Management

• Embedded processor design requires you to manage the following:– Address map for the peripherals– Location of the application code in the memory space

• BRAM• External memory

• Memory requirements for your programs are based on the following:– The amount of memory required for storing the instructions– The amount of memory required for storing the data associated with

the program

Page 5: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 5 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

MicroBlaze Processor

• Memory and peripherals– MicroBlaze processor uses 32-bit addresses

• Special addresses– MicroBlaze systems must have user-

writable memory from 0x00000000 through0x00000017

• BRAM size limits– The amount of BRAM memory that can be

used is limited to the device limitations– The largest supported BRAM memory size

for Virtex and VirtexE devices is 16 kilobytes; for Virtex-II, it is 64 kilobytes 0x0000_0000

0x0000_0008

0x0000_0010

0xFFFF_FFFF

0x0000_0018

Reset Address

Exception Address

Interrupt Address

LMB Memory

OPB Memory

Peripherals

Page 6: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 6 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

PowerPC Processor

• Memory and peripherals– PPC405 uses 32-bit addresses

• Special addresses– Every PowerPC system should have

the boot section starting at0xFFFFFFFC

• Default linker options– Program space occupies a contiguous

address space from 0xFFFF0000 to0xFFFFFFFF

– Stack size: 4 KB – Heap size: 4 KB 0x0000_0000

0xFFFF_0000

0xFFFF_FFFC

Peripherals

PLB/OPB Memory

PLB/OPB Memory

Reset Address

Page 7: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 7 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Outline

• Address Management• System Address Space• Advanced User Address Space• Object File Sections• Linker Scripts

Page 8: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 8 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

System Address Space

• System with an executable only(no debug)– The C-run-time file crt0.o is linked

with the user program – The system file crt0.o starts

at address location 0x0, immediately followed by the user’s program

crt0.o

mainprogram

0x00000000

Page 9: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 9 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

System Address Space

• System with debugging support (xmdstub)– With systems that require debug support,

xmdstub must be downloaded at address location 0x00000000

– The C-run-time file crt1.o is bundled with the user program and is placed at address 0x00000400, the default location

mainprogram

0x00000000

xmdstub

crt1.0

Page 10: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 10 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Outline

• Address Management• System Address Space• Advanced User Address Space• Object File Sections• Linker Scripts

Page 11: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 11 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Advanced User Address Space

• Different base address, contiguous user address space

– The user program can run from any memory PLB, OCM, OPB, or LMB

– To execute a program from any address location other than default, you must provide the compiler gcc with the following option:-Wl,--defsym,_TEXT_START_ADDR=start_addr

– You can easily enter this option in the S/W Settings dialog

Page 12: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 12 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Advanced UserAddress Space

• Different base address, non-contiguous user address space– You can place different components of your program in different memories

• For example, on PowerPC systems, you can keep your code on instruction cache memory and the data on ZBT memory

– Non-contiguous executables that represent the application must be created – To do this, a linker script must be used

Page 13: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 13 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Outline

• Address Management• System Address Space• Advanced User Address Space• Object File Sections• Linker Scripts

Page 14: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 14 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Object File Sections

• What is an object file?– An object file is an assembled piece of code

• Machine language: li r31,0 = 0x3BE0 0000

– Constant data– There may be references to external objects that are defined elsewhere– This file may contain debugging information

Page 15: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 15 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Object File Sections

.text

.rodata

.sdata2

.data

.sdata

.sbss

.bss

Text section

Read-only data section

Small read-only data section (less than eight bytes)

Read-write data section

Small read-write data section

Small uninitialized data section

Uninitialized data section

Page 16: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 16 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Sections Example

int ram_data[10] = {0,1,2,3,4,5,6,7,8,9}; /* DATA */

const int rom_data[10] = {9,8,7,6,5,4,3,2,1}; /* RODATA */

int I; /* BSS */

main(){

...

I = I + 10; /* TEXT */

...

}

Page 17: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 17 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Outline

• Address Management• System Address Space• Advanced User Address Space• Object File Sections• Linker Scripts

Page 18: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 18 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker Script

• Linker script– Controls the linking process– Maps the code and data to a specified memory space– Sets the entry point to the executable– Reserves space for the stack

• Required if the design contains a discontinuous memory space• GNU GCC linker scripts will not work for the WindRiver Diab compiler

Page 19: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 19 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker and Locator Flows

.text1

.data1

.bss1

.bss2

.data2

.text2

foo1.o

foo2.o

Link

.text

.data

.bss

0xFFFF

0xF000

0xEFFF

0xEF00

0x0000

0x1FFF

0x2000

0xEEFF

Locate

Merged Output

Sections

Unused

Executable Image

Code

Uninitialized data

Initialized data

Page 20: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 20 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker Script for the MicroBlaze processor

• Required to control how the program and data are targeted to LMB, OPB, or extended memory

• Provide a linker script to the mb-gcc compiler• Linker script defines the layout and the start address of each

of the sections

Page 21: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 21 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker Script Limitations

• Allocate space in the .bss section for stack and heap– Set _heap variable to the beginning of this section– Set _stack variable to the end of this section

• The .sdata and .sbss sections must be contiguous – Set _SDA_BASE variable points to the center of this section– Set _SDA_BASE must be aligned on a word boundary

• If you are not using xmdstub, ensure that crt0 is loaded in memory at 0• The __sbss_start, _sbss_end, __bss_start, and __bss_end variables are

defined to the start and end of the .sbss and .bss sections• Ensure that the .bss and .common sections are contiguous

– The crt0.s assumes a single .bss section. If not, then you must define your own crt function

Page 22: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 22 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

MicroBlaze Processor Script Example

STACKSIZE = 4k;MEMORY{LMB : ORIGIN = 0x0, LENGTH = 0x1000OPB : ORIGIN = 0x8000, LENGTH = 0x5000}

SECTIONS{ .text : { *(.text) } > lmb . = ALIGN(4); _heap = .; .bss : { _STACK_SIZE = 0x400; . += _STACK_SIZE; . =

ALIGN(4); } > lmb _stack = .; . = ALIGN(4); .rodata : { *(.rodata) } > lmb .data : { *(.data) } > lmb}

Page 23: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 23 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker Script for the PowerPC Processor

• Required to control how the program and data are targeted to PLB, OPB, OCM, or extended memory

• Provide a linker script to the powerpc-eabi-gcc compiler• The linker script defines the layout and the start address of each

of the sections

Page 24: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 25 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Linker Script Example

STACKSIZE = 4k;MEMORY{ ddr : ORIGIN = 0x00000000, LENGTH = 32m sram : ORIGIN = 0x10000000, LENGTH = 2m flash : ORIGIN = 0x18000000, LENGTH = 32m bram : ORIGIN = 0xffff8000, LENGTH = 32k - 4 boot : ORIGIN = 0xfffffffc, LENGTH = 4}SECTIONS{ .text : { *(.text) } > bram .boot : { *(.boot) } > boot .data : { *(.data) *(.got2) *(.rodata) *(.fixup)} > bram .bss : { *(.bss) } > bram __bss_start = ADDR(.bss); __bss_end = ADDR(.bss) + SIZEOF(.bss);}

Page 25: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 26 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Sections Command

• This is where most of the work takes place• Output sections are named, and the input sections are grouped and linked

together into the output sections• Example:

• Explanation:– .text is thhe name of the output section– { *(.text) *.(init)} includes all input sections named text and init from

the object files being linked– > bram locates the .text output section in the next available memory

in the BRAM area

.text : { *(.text) *(.init) } > bram

Page 26: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 28 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Review Questions

• When do you need to use a linker script?•

• What does a linker script do?

• List some of the MicroBlaze processor address space restrictions

Page 27: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 29 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Answers

• When do you need to use a linker script?– When you have software developed in multiple source files and the compiled object

code needs to be placed in different memory structures or in non-standard configurations

• What does a linker script do?– The linker script controls the placement of the object code, data, stack, and heap in

specific memory locations• List some of the MicroBlaze processor address space restrictions

– Allocate space in the .bss section for stack and heap– Set the _heap variable to the beginning of this section– Set the _stack variable to the end of this section– .sdata and .sbss sections must be contiguous – If you are not using xmdstub, ensure that crt0 is loaded in memory at 0– Must have writable memory from 0x00000000 to 0x00000017

Page 28: © 2003 Xilinx, Inc. All Rights Reserved Address Management

Address Management - 9 - 30 © 2003 Xilinx, Inc. All Rights Reserved For Academic Use Only

Where Can I Learn More?

• Tool documentation– Embedded System Tools Guide Address Management– Embedded Systems Tools Guide Stand-Alone Board Support Package– Embedded Systems Tools Guide GNU Compiler Tools

• Support website– EDK Home Page: support.xilinx.com/edk