Technical notes on using Analog Devices DSPs, processors and development tools
Contact our technical support at dsp.support@analog.com and at dsptools.support@analog.com
Or vi sit our o n-li ne r esou rces htt p:/ /www.analog.com/ee-notes and http://www.analog.com/processors
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++®
Contributed by Ramesh Babu and Aseem Vasudev Prabhugaonkar Rev 1 – October 4, 2004
Introduction
This EE-Note discusses the implementation of
software overlays on ADSP-218x DSPs. A
simple code example, demonstrating the software
overlay technique for ADSP-218x DSP, is
discussed later in this document.
Early versions of the VisualDSP® toolset used a
different scheme to support software overlays as
discussed in the legacy EE-Note Everything You
Always Wanted to know about Overlays - *But
were afraid to ask (EE-67). With VisualDSP++®
3.5 a new approach has been enabled.
What are Software Overlays?
Due to limited address space, many ADSP-218x
derivatives provide multiple memory pages,
called hardware overlays. The software overlay
technique is a completely different scheme to
populate the content of physical SRAM with
different data or code on demand.
“live address space”, and the memory address
where the program is executed in internal
memory is called “run address space”. The code
responsible for transferring the data / program
code from external memory to internal memory
at runtime is called an overlay manager. It
typically resides in a reserved space of the DSP’s
internal memory.
Software Overlays on ADSP-218x DSPs
Software overlays can be implemented using the
ADSP-218x DSP's external byte-wide memory
space. A byte-wide memory can be interfaced
through the processor's BDMA port. The overlay
code/data resides in the external byte-wide
memory. The overlay manager is responsible for
initializing byte DMA (BDMA) to transfer the
data/code from external memory into internal
memory when required.
VisualDSP++ Support
The software overlay technique is commonly
used when a processor is does not have sufficient
internal memory to hold all of the application's
data / program code. In these situations, part of
data / program code is loaded into internal
memory during the booting process and the
remaining part is placed in external memory.
When program code (or data) in external
memory has to be executed, it is loaded into
The VisualDSP++ linker automatically generates
overlay constants, which configure the BDMA
parameters in the overlay manager. Each overlay
has a word size, run-time address and live
address used by the overlay manager to
determine where the overlay resides and where it
is executed.
The linker-generated constants (where N is the
ID# of the overlay) are:
internal memory and executed.
The memory address range where the overlay
_ov_startaddress_N (live address space)
function resides in the external memory is called
Copyright 2004, Analog Devices, Inc. All rights reserved. Analog Devices assumes no responsibility for customer product design or the use or application of
customers’ products or for any infringements of patents or rights of others which may result from Analog Devices assistance. All trademarks and logos are property
of their respective holders. Information furnished by Analog Devices applications and development tools engineers is believed to be accurate and reliable, however
no responsibility is assumed by Analog Devices regarding technical accuracy and topicality of the content provided in Analog Devices’ Engineer-to-Engineer Notes.
The linker is also responsible for resolving the
symbol addresses of overlay data and labels.
Example Program
This section shows a simple example program to
illustrate the software overlay implementation on
ADSP-218x DSPs. The assembly program
provided with this EE-Note toggles a flag pin at
two different speeds. This program uses two
software overlay functions which exist in the
external byte memory.
Internal PM
Memory
0x0000
Main ( )
Overlay_Manager ( )
0x2000
Figure 1. Simple Memory Overlay Example
0x1000
0x2000
ace
Run S
The main program calls the two software overlay
functions in an infinite loop. One of the software
overlay functions (
Fast-LED-Blink()) toggles
the LED at a faster rate; the other (
Blink()
) toggles the LED at a slower rate.
Figure 1 illustrates where the overlay functions,
overlay manager, and the main function are
stored.
The
main() and Overlay_Manager() functions
are loaded into the internal RAM of the ADSP218x during the booting process. The
Blink()
and Slow-LED-Blink() overlay
External Byte
Memory
Fast-LED-Blink ( )
Slow-LED-Blink ()
Slow-LED-
Fast-LED-
functions are saved in external byte memory.
During runtime, when an overlay functions is
called, the function is loaded into internal
memory and then executed. Accessing code
and/or data overlays dynamically provides
greater flexibility toward managing your DSP’s
internal memory.
Linker Definitions
Let's look into the declarations required in the
Linker Description File (.LDF) for the example
program explained above.
// "run" space for PMOVLAY pages
mem_pmovly {
TYPE(PM RAM)
START(0x002000)
END(0x003fff)
WIDTH(24)
}
// "live" space for PMOVLAY pages
mem_pmpage1 {
TYPE (BM RAM)
START(0x001000)
END(0x001fff)
The statements in Listing 1 in the MEMORY {}
section of the
(i.e., the run space and live space addresses of
the overlay program code).
Live space. which is specified in the byte
memory (BM), helps the linker generate the
overlay constants.
The statements in Listing 2, which are specified
in
code and data to the physical memory of a
processor in a DSP system. In Listing 2, the
commands
(e.g.,
.LDF file define the target memory
PROCESSOR { } section of the .LDF file, map
tell the linker that a specific section
pm_ovlay_1) from a specified input file
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++® (EE-249) Page 2 of 6
A
(Fast-LED-Blink.doj) is to be used as an input
for this overlay segment (
.
LDF file syntax and definitions, refer to the
mem_pmpage1). For
VisualDSP++ 3.5 Linker and Utilities Manual
for 16-Bit Processors [2].
Listing 2. Specifying Overlay Sections in the .LDF
The Linker Description File (.LDF) in an overlay
project has a section called a procedure linkage
table (PLIT). The PLIT is a jump table in root
memory constructed by the linker.
Each call to an overlay section is replaced by a
call to the PLIT. The PLIT {} commands
provide a template by which the linker generates
distinct assembly code for each overlay section.
Listing 3 shows an example PLIT section that
would be defined in the .
LDF file. This section is
defined only once in the .LDF file. However, the
linker generates separate PLIT code for each
overlay function call (
pm_ovlay_2). In other words, the PLIT {}
command in an .
LDF file inserts assembly
pm_ovlay_1 and
instructions that handle calls to functions in
overlays.
The template in Listing 3 informs the linker
which instructions to put into each PLIT entry.
Since each call to an overlay function is replaced
by a call to the PLIT, you must place the jump
instruction to the user-defined overlay manager
code in the PLIT section.
Each overlay module declared in the .LDF file has
a unique copy of the PLIT entry defined in the
.
LDF file. The example program has two code
overlays, and a simple PLIT is declared in the
.LDF file shown in Listing 3. The corresponding
PLIT table for the two overlay functions would
look like Listing 4.
plt_1__Fast_LED_Blink:
AY0 = 0x0001;
JUMP Overlay_Manager;
plt_2__Slow_LED_Blink:
AY0 = 0x0002;
JUMP Overlay_Manager;
Listing 4. Example PLIT Table
The AY0 register is loaded with the overlay ID,
which is used by the overlay manager to
determine the live address, run address, and word
size of the overlay function.
Simple Overlay Manager
The overlay manager is responsible for
transferring the data/code from the live space to
the run space. The linker generates various
overlay constants, such as live addresses, run
addresses, live word sizes for each live address,
and run word sizes. The linker-generated
constants must be declared as external constants
as shown in Listing 5 in the overlay manager
function. The overlay manager configures the
BDMA parameters using the linker-generated
overlay constants and then the BDMA transfer is
initiated.
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++® (EE-249) Page 3 of 6
Overlay Manager
A
In this example, the linker constants are placed in
an array (Listing 6) so that the overlay manager
can use the appropriate constants based on the
overlay ID.
Initialize index pointers to access
the linker-generated constants
Access the run address, live
address, and the word size from the
linker-generated constants based on
overlay ID
Set up BDMA registers to initiate
the transfer the overlay code/data
from the live space to the run space
No
Jump to the run address space to
execute the overlay function
BDMA
complete?
Yes
End
Figure 2. Overlay Manager Flowchart
/* The following constants are defined
by the linker.
These constants contain the word
size, live location and run
location of the overlay functions.
*/
Listing 7. Setting DAG Pointers to Access
Appropriate Overlay Constants in Arrays
/* Load the BDMA registers and trigger
the Byte DMA transfer
*/
AX0=DM(I0,M0);
DM(BDMA_External_Address)=AX0;
AX0=DM(I2,M3);
DM(BDMA_Internal_Address)=AX0;
AX0=0x000;
DM(BDMA_Control)=AX0;
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++® (EE-249) Page 4 of 6
A
AX0 = DM(I3,M0);
DM(BDMA_Word_Count)=AX0;
Listing 8. Initiating BDMA Transfer Example
Figure 2 shows a simple overlay manager.
main ( )
Call overlay
function
Overlay_ manager ( )
Jump to run space to
execute the function
Looking back at the code:
plt_1__Fast_LED_Blink:
AY0 = 0x0001;
JUMP Overlay_Manager;
In the AY0=0x0001 instruction, the content of the
AY0 register in the plt_1__Fast_LED_Blink
table is used as a pointer to access the linkergenerated data in the overlay manager. The next
instruction (jump Overlay_Manager ())
transfers program control to the overlay manager.
As explained earlier, the overlay manager code
initiates a BDMA transfer of the Fast-LED-
Blink overlay
function from external memory
to internal memory.
Finally, the overlay manager executes a JUMP
instruction to transfer program control to the
Fast-LED-Blink() overlay function in run
space.
The overlay manager can also use a software
stack to save the contents of registers used in the
overlay manager function.
End
Figure 3. Overlay Function Execution Flowchart
In the main code, the overlay functions are called
similar to ordinary (non-overlay) functions. For
the overlay functions, the linker replaces the
actual overlay function call with a call to the
PLIT code generated for that particular overlay
function.
For example, the instruction:
call Fast-LED-Blink;
is replaced automatically by:
call plt_1__.Fast_LED_Blink;
The loader file (.BNM) created using the
VisualDSP++ can be burned into
Flash/EEPROM memory directly. The .BNM file
will have the memory image of both the bootable
and non-bootable parts of the code. During
booting, the page loader instructions load the
non-overlay code only; they do not load the
overlay functions. During booting, only the
main() and overlay_manager() functions of
the example are loaded into the DSP. However,
the overlay functions mapped to
0x2000 in byte memory are not loaded into the
0x1000 and
ADSP-218x during booting. During runtime,
when overlay functions are called, they are
transferred into the run space and executed.
The overlay manager discussed in this section is
very simple. For complete code, refer to the
source code provided with this EE-Note.
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++® (EE-249) Page 5 of 6
A
References:
[1] ADSP-218x DSP Hardware Reference. First Edition, February 2001. Analog Devices, Inc.
[2] VisualDSP++ 3.5 Linker and Utilities Manual for 16-Bit Processors. Rev 1.0, October 2003. Analog Devices, Inc.
[3] Using Software Overlays with the ADSP-219x VisualDSP 2.0++ (EE-152). February 2002. Analog Devices, Inc.
Document History
Revision Description
Rev 1 – October 04, 2004
by Ramesh Babu
Initial Release
Implementing Software Overlays on ADSP-218x DSPs with VisualDSP++® (EE-249) Page 6 of 6
Loading...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.