Visible to Intel only — GUID: udn1641803275788
Ixiasoft
Visible to Intel only — GUID: udn1641803275788
Ixiasoft
4.2.3.3.2. Dividing a Linker Region to Create a New Region and Section
This example works with any hardware design containing an on-chip memory named on_chip_mem connected to a Nios V processor instruction manager.
# Get region information for on_chip_mem memory region. # Returned as a list. set region_info [get_memory_region on_chip_mem] # Extract fields from region information list. set region_name [lindex $region_info 0] set slave [lindex $region_info 1] set offset [lindex $region_info 2] set span [lindex $region_info 3] # Remove the existing memory region. delete_memory_region $region_name # Compute memory ranges for replacement regions. set split_span 1024 set new_span [expr $span-$split_span] set split_offset [expr $offset+$new_span] # Create two memory regions out of the original region. add_memory_region on_chip_mem $slave $offset $new_span add_memory_region isrs_region $slave $split_offset $split_span add_section_mapping .isrs isrs_region
The above Tcl script splits off 1 KB of RAM from the region named on_chip_mem, gives it the name isrs_region, and then calls add_section_mapping to add the .isrs section to isrs_region.
Using the Create a New Region and Section Tcl Scrip
- Create the Tcl script as shown in the example, above.
- Add the following argument to the niosv-bsp command line:
--script=<script name>.tcl
- Rebuild the application by running cmake and make.
Excerpts from Object Dump Files
After cmake and make complete successfully, you can examine the object dump file, <project_name> .objdump. The object dump file shows that the new .isrs section is in the on_chip_mem. This object dump file excerpt shows a hardware design with an on-chip memory whose address range is 0x00010000 to 0x00019fff.
- Default linker sections (Span from 0x00010000 to 0x000192bf)
- on_chip_mem remaining on_chip_mem (Span from 0x000192c0 to 0x00019bff)
- isrs customized linker region (Span from 0x00019c00 to 0x00019fff)
Sections: Idx Name Size VMA LMA File off Algn . . 2 .isrs 00000000 00019c00 00019c00 00008770 2**0 CONTENTS . . 8 .on_chip_mem 00000000 000192c0 000192c0 00008770 2**0 CONTENTS . . SYMBOL TABLE: 00010000 l d .entry 00000000 .entry 00010020 l d .exceptions 00000000 .exceptions 00019c00 l d .isrs 00000000 .isrs 000102a0 l d .text 00000000 .text 00015cc0 l d .rodata 00000000 .rodata 00015cfc l d .rwdata 00000000 .rwdata 0001776c l d .init_array.00000 00000000 .init_array.00000 000191dc l d .bss 00000000 .bss 000192c0 l d .on_chip_mem 00000000 .on_chip_mem
Excerpt from Linker.x
If you examine the linker script file, linker.x, you can see that linker.x places the new region isrs_region in MEMORY, adjacent to the on_chip_mem region.
Excerpt From linker.x
MEMORY { reset : ORIGIN = 0x10000, LENGTH = 32 on_chip_mem : ORIGIN = 0x10020, LENGTH = 39904 isrs_region : ORIGIN = 0x19c00, LENGTH = 1024 }