Ug1043 Embedded System Tools PDF
Ug1043 Embedded System Tools PDF
Ug1043 Embedded System Tools PDF
Tools Reference
Manual
UG1043 (v2015.2)
(v2015.1) June
April24,
1, 2015
Revision History
06/24/2015:
Released
with Vivado
Design Suite
2015.2
changes from the previous version.
The following
table shows
the revision
history
forwithout
this document.
Date
Version
04/01/2015
2015.1
Revision
Vivado Design Suite release 2015.1.
Removed information about GNU Debugger.
Added Chapter 3, Xilinx System Debugger with information about SDK System
Debugger and Xilinx System Debugger (XSDB).
Updated Chapter 4, Flash Memory Programming with information about Program
Flash command-line interface.
Updated links to other documentation.
www.xilinx.com
Send Feedback
Table of Contents
Revision History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
11
11
13
28
45
47
49
50
51
74
74
76
78
www.xilinx.com
Send Feedback
www.xilinx.com
Send Feedback
91
91
91
92
92
Chapter 1
The Vivado IP integrator tool, with which you can develop your embedded processor
hardware.
The Software Development Kit (SDK), based on the Eclipse open-source framework,
which you can use to develop your embedded software application. SDK is also
available as a standalone program.
For links to Vivado documentation and other useful information, see Appendix B,
Additional Resources and Legal Notices.
www.xilinx.com
Send Feedback
,>
^
^
^<
^
D^s
/t
K^
Zd>
'
^'
EW
^W
^<
/
^
d
DW
WZ
d
'
DD
&W'
E'
W
^<
y
Figure 1-1:
Hardware Development
Xilinx FPGA technology allows you to customize the hardware logic in your processor
subsystem. Such customization is not possible using standard off-the-shelf microprocessor
or controller chips.
The term Hardware platform describes the flexible, embedded processing subsystem you
are creating with Xilinx technology for your application needs.
The hardware platform consists of one or more processors and peripherals connected to the
processor buses.
When the hardware platform description is complete, the hardware platform can be
exported for use by SDK.
www.xilinx.com
Send Feedback
Software Development
A board support package (BSP) is a collection of software drivers and, optionally, the
operating system on which to build your application. The created software image contains
only the portions of the Xilinx library you use in your embedded design. You can create
multiple applications to run on the BSP.
The hardware platform must be imported into SDK prior to creation of software
applications and BSP.
Verification
Vivado provides both hardware and software verification tools. The following subsections
describe the verification tools available for hardware and software.
You can load your design on a supported development board and use a debugging tool
to control the target processor.
You can gauge the performance of your system by profiling the execution of your code.
Device Configuration
When your hardware and software platforms are complete, you then create a configuration
bitstream for the target FPGA device.
For prototyping, download the bitstream along with any software you require to run on
your embedded platform while connected to your host computer.
www.xilinx.com
Send Feedback
9LYDGR
6'.
%,7 %00
%,7 %00
)LOHV
)LOHV
1HZ3URMHFW:L]DUG
,PSRUW'HVLJQ
([SRUW'HVLJQ
WR6'.
6\QWKHVLV
&UHDWH%63
$SSOLFDWLRQ
3ODFHDQG5RXWH
%XLOG(/))LOH
,PSRUW(/)
)LOH
%,7 %00
%,7 %00
)LOHV
)LOHV
%LWVWUHDP*HQHUDWRU
5H,PSRUW'HVLJQ
([SRUW'HVLJQ
WR6'.
+DUGZDUH6RIWZDUH
0DQDJHU
3URJUDP)3*$
:d'
)3*$'HYLFH
Figure 1-2:
www.xilinx.com
Send Feedback
Ability to create and configure board support packages (BSPs) for third-party OS.
Provides off-the-shelf sample software projects to test the hardware and software
functionality.
Has an easy GUI interface to generate linker scripts for software applications, program
FPGA devices, and program parallel flash memory.
For more information about SDK, see the Software Development Kit (SDK) Help (UG782)
[Ref 1].
Table 1-1:
Allows you to erase and program on-board serial & parallel flash devices
with software and data.
www.xilinx.com
Send Feedback
As shown in the embedded tools architectural overview (Figure 1-2, page 8):
The compiler reads a set of C-code source and header files or assembler source files for
the targeted processor.
The linker combines the compiled applications with selected libraries and produces the
executable file in ELF format. The linker also reads a linker script, which is either the
default linker script generated by the tools or one that you have provided.
Refer to Chapter 2, GNU Compiler Tools,, and Appendix A, GNU Utilities for more
information about GNU compiler tools and utilities.
www.xilinx.com
Send Feedback
10
Chapter 2
The Vivado GNU tools support both the C and C++ languages.
The MicroBlaze GNU tools include mb-gcc and mb-g++ compilers, mb-as assembler and
mb-ld linker.
The toolchains also include the C, Math, GCC, and C++ standard libraries.
The compiler also uses the common binary utilities (referred to as binutils), such as an
assembler, a linker, and object dump. The MicroBlaze and ARM compiler tools use the GNU
binutils based on GNU version 2.16 of the sources. The concepts, options, usage, and
exceptions to language and library support are described Appendix A, GNU Utilities.
Compiler Framework
This section discusses the common features of the MicroBlaze andCortex A9ARM processor
compilers. Figure 2-1 displays the GNU tool flow.
www.xilinx.com
Send Feedback
11
/&
>
K>&&
y
Figure 2-1:
The GNU compiler is named mb-gcc for MicroBlaze and arm-xilinx-eabi-gcc for ARM
Cores. The GNU compiler is a wrapper that calls the following executables:
Pre-processor ( cpp0)
This is the first pass invoked by the compiler. The pre-processor replaces all macros
with definitions as defined in the source and header files.
C Compiler ( cc1)
The compiler responsible for most of the optimizations done on the input C code
and for generating assembly code.
C++ Compiler ( cc1plus)
The compiler responsible for most of the optimizations done on the input C++
code and for generating assembly code.
www.xilinx.com
Send Feedback
12
Note: From this point forward the references to GCC in this chapter refer tothe MicroBlaze compiler,
mb-gcc ,and references to G++ refer tothe MicroBlaze C++ compiler, mb-g++.
Input Files
The compilers take one or more of the following files as input:
C source files
Assembly files
Object files
Linker scripts
Note: These files are optional. If they are not specified, the default linker script embedded in the
linker (mb-ld or arm-xilinx-eabi-ld) is used.
The default extensions for each of these types are listed in Table 2-1. In addition to the files
mentioned above, the compiler implicitly refers to the libraries files libc.a, libgcc.a,
libm.a , and libxil.a. The default location for these files is the Vivado installation
directory. When using the G++ compiler, the libsupc++.a and libstdc++.a files are also
referenced. These are the C++ language support and C++ platform libraries, respectively.
www.xilinx.com
Send Feedback
13
Output Files
The compiler generates the following files as output:
File Extensions
Extension
.c
C file
.C
C++ file
.cxx
C++ file
.cpp
C++ file
.c++
C++ file
.cc
C++ file
.S
.s
www.xilinx.com
Send Feedback
14
Libraries
Table 2-2 lists the libraries necessary for the mb_gcc and arm-xilinx-eabi-gcc compilers.
Table 2-2:
Library
Particular
libxil.a
Contain drivers, software services (such as XilMFS) and initialization files developed
for the Vivado tools.
libc.a
libgcc.a
GCC low-level library containing emulation routines for floating point and 64-bit
arithmetic.
libm.a
libsupc++.a
C++ support library with routines for exception handling, RTTI, and others.
libstdc++.a
C++ standard platform library. Contains standard language classes, such as those for
stream I/O, file I/O, string manipulation, and others.
Libraries are linked in automatically by both compilers. If the standard libraries are
overridden, the search path for these libraries must be given to the compiler. The libxil.a
is modified to add driver and library routines.
Language Dialect
The GCC compiler recognizes both C and C++ dialects and generates code accordingly. By
GCC convention, it is possible to use either the GCC or the G++ compilers equivalently on
a source file. The compiler that you use and the extension of your source file determines the
dialect used on the input and output files.
When using the GCC compiler, the dialect of a program is always determined by the file
extension, as listed in Table 2-1, page 14. If a file extension shows that it is a C++ source
file, the language is set to C++. This means that if you have compile C code contained in a
CC file, even if you use the GCC compiler, it automatically mangles function names.
The primary difference between GCC and G++ is that G++ automatically sets the default
language dialect to C++ (irrespective of the file extension), and if linking, automatically
pulls in the C++ support libraries. This means that even if you compile C code in a .c file
with the G++ compiler, it will mangle names.
Name mangling is a concept unique to C++ and other languages that support overloading
of symbols. A function is said to be overloaded if the same function can perform different
actions based on the arguments passed in, and can return different return values. To
support this, C++ compilers encode the type of the function to be invoked in the function
name, avoiding multiple definitions of a function with the same name.
www.xilinx.com
Send Feedback
15
Make these declarations available in a header file and use them in all source files. This
causes the compiler to use the C dialect when compiling definitions or references to these
symbols.
Note: All Vivado drivers and libraries follow these conventions in all the header files they provide.
You must include the necessary headers, as documented in each driver and library, when you
compile with G++. This ensures that the compiler recognizes library symbols as belonging to C
type.
When compiling with either variant of the compiler, to force a file to a particular dialect, use
the -x lang switch. Refer to the GCC manual on the GNU website for more information on
this switch. A link to the document is provided in the Appendix B, Additional Resources and
Legal Notices.
When using the GCC compiler, libstdc++.a and libsupc++.a are not automatically
linked in.
When compiling C++ programs, use the G++ variant of the compiler to make sure all
the required support libraries are linked in automatically.
Adding -lstdc++ and -lsupc++ to the GCC command are also possible options.
For more information about how to invoke the compiler for different languages, refer to the
GNU online documentation.
www.xilinx.com
Send Feedback
16
-E
-Wp,option
-l libraryname
-S
-Wa,option
-L Lib Directory
-c
-Wl,option
-g
-help
-gstabs
-B directory
-I Directory Name
-On
-L directory
-v
-I directory
-save-temps
-l library
Linker Options
-defsym _STACK_SIZE=value
-defsym _HEAP_SIZE=value
-o filename
General Options
-E
Preprocess only; do not compile, assemble and link. The preprocessed output displays on
the standard out device.
-S
Compile only; do not assemble and link. Generates a .s file.
-c
Compile and Assemble only; do not link. Generates a .o file.
-g
This option adds DWARF2-based debugging information to the output file. The debugging
information is required by the GNU debugger, mb-gdb or arm-xilinx-eabi-gdb. The
debugger provides debugging at the source and the assembly level. This option adds
debugging information only when the input is a C/C++ source file.
www.xilinx.com
Send Feedback
17
-gstabs
Use this option for adding STABS-based debugging information on assembly ( .S) files and
assembly file symbols at the source level. This is an assembler option that is provided
directly to the GNU assembler, mb-as or arm-xilinx-eabi-as. If an assembly file is
compiled using the compiler mb-gcc or arm-xilinx-eabi-gcc, prefix the option with -Wa.
-On
The GNU compiler provides optimizations at different levels. The optimization levels in the
following table apply only to the C and C++ source files.
Table 2-3:
Optimization
No optimization.
Medium optimization.
Full optimization
Note: Optimization levels 1 and above cause code re-arrangement. While debugging your code, use
of no optimization level is recommended. When an optimized program is debugged through gdb,
the displayed results might seem inconsistent.
-v
This option executes the compiler and all the tools underneath the compiler in verbose
mode. This option gives complete description of the options passed to all the tools. This
description is helpful in discovering the default options for each tool.
-save-temps
The GNU compiler provides a mechanism to save the intermediate files generated during
the compilation process. The compiler stores the following files:
The compiler saves the default output of the entire compilation as a.out.
www.xilinx.com
Send Feedback
18
-o filename
The compiler stores the default output of the compilation process in an ELF file named
a.out . You can change the default name using -o output_file_name. The output file is
created in ELF format.
-Wp,option
-Wa,option
-Wl,option
The compiler, mb-gcc or arm-xilinx-eabi-gcc, is a wrapper around other executables such
as the preprocessor, compiler (cc1), assembler, and the linker. You can run these
components of the compiler individually or through the top level compiler.
There are certain options that are required by tools, but might not be necessary for the
top-level compiler. To run these commands, use the options listed in the following table.
Table 2-4:
Option
Tool
Example
-Wp,option
Preprocessor
-Wa,option
Assembler
-Wl,option
Linker
-help
Use this option with any GNU compiler to get more information about the available
options. You can also consult the GCC manual.
-B directory
Add directory to the C run time library search paths.
-L directory
Add directory to library search path.
-I directory
Add directory to header search path.
www.xilinx.com
Send Feedback
19
-l library
Search library for undefined symbols.
Note: The compiler prefixes lib to the library name indicated in this command line switch.
-L Lib Directory
This option indicates the directories in which to search for the libraries. The compiler has a
default library search path, where it looks for the standard library. Using the -L option, you
can include some additional directories in the compiler search path.
www.xilinx.com
Send Feedback
20
Note: platform indicates lin for Linux, lin64 for Linux 64-bit and nt for Windows Cygwin.
www.xilinx.com
Send Feedback
21
Linker Options
-defsym _STACK_SIZE=value
The total memory allocated for the stack can be modified using this linker option. The
variable _STACK_SIZE is the total space allocated for the stack. The _STACK_SIZE variable is
given the default value of 100 words, or 400 bytes. If your program is expected to need
more than 400 bytes for stack and heap combined, it is recommended that you increase the
value of _STACK_SIZE using this option. The value is in bytes.
In certain cases, a program might need a bigger stack. If the stack size required by the
program is greater than the stack size available, the program tries to write in other,
incorrect, sections of the program, leading to incorrect execution of the code.
Note: A minimum stack size of 16 bytes (0x0010) is required for programs linked with the
Xilinx-provided C runtime (CRT) files.
-defsym _HEAP_SIZE=value
The total memory allocated for the heap can be controlled by the value given to the variable
_ HEAP_SIZE. The default value of _HEAP_SIZE is zero.
Dynamic memory allocation routines use the heap. If your program uses the heap in this
fashion, then you must provide a reasonable value for _HEAP_SIZE.
For advanced users: you can generate linker scripts directly from IP integrator.
Memory Layout
The MicroBlaze and ARM processors use 32-bit logical addresses and can address any
memory in the system in the range 0x0 to 0xFFFFFFFF. This address range can be
categorized into reserved memory and I/O memory.
Reserved Memory
Reserved memory has been defined by the hardware and software programming
environment for privileged use. This is typically true for memory containing interrupt vector
locations and operating system level routines. Table 2-5 lists the reserved memory
locations for MicroBlaze and ARM processors as defined by the processor hardware. For
more information on these memory locations, refer to the corresponding processor
reference manuals.
For information about the ARM memory map, refer to the Zynq-7000 All Programmable SoC
Technical Reference Manual (UG585) [Ref 2].
Note: In addition to these memories that are reserved for hardware use, your software environment
can reserve other memories. Refer to the manual of the particular software platform that you are
using to find out if any memory locations are deemed reserved.
www.xilinx.com
Send Feedback
22
Table 2-5:
Processor Family
MicroBlaze
Reserved Memories
0x0 - 0x4F
Reserved Purpose
Reset, Interrupt,
Exception, and other
reserved vector
locations.
Cortex A9 ARM
I/O Memory
I/O memory refers to addresses used by your program to communicate with
memory-mapped peripherals on the processor buses. These addresses are defined as a part
of your hardware platform specification.
No restrictions apply to how you can partition your executable. The partitioning can be
done at the output section level, or even at the individual function and data level. The
resulting ELF can be non-contiguous, that is, there can be holes in the memory map.
Ensure that you do not use documented reserved locations.
Alternatively, if you are an advanced user and want to modify the default binary data
provided by the tools for the reserved memory locations, you can do so. In this case, you
must replace the default startup files and the memory mappings provided by the linker.
www.xilinx.com
Send Feedback
23
Object-File Sections
An executable file is created by concatenating input sections from the object files ( .o files)
being linked together. The compiler, by default, creates code across standard and
well-defined sections. Each section is named based on its associated meaning and purpose.
The various standard sections of the object file are displayed in the following figure.
In addition to these sections, you can also create your own custom sections and assign
them to memories of your choice.
X-Ref Target - Figure 2-2
.text
Text Section
.rodata
.sdata2
.sbss2
.data
.sdata
.sbss
.bss
.heap
.stack
Figure 2-2:
The reserved sections that you would not typically modify include:.init, . fini, .ctors,
.dtors , .got,.got2, and .eh_frame .
.text
This section of the object file contains executable program instructions. This section has the
x (executable), r (read-only) and i (initialized) flags. This means that this section can be
assigned to an initialized read-only memory (ROM) that is addressable from the processor
instruction bus.
www.xilinx.com
Send Feedback
24
.rodata
This section contains read-only data. This section has the r (read-only) and the i (initialized)
flags. Like the .text section, this section can also be assigned to an initialized, read-only
memory that is addressable from the processor data bus.
.sdata2
This section is similar to the .rodata section. It contains small read-only data of size less
than 8 bytes. All data in this section is accessed with reference to the read-only small data
anchor. This ensures that all the contents of this section are accessed using a single
instruction. You can change the size of the data going into this section with the -G option
to the compiler. This section has the r (read-only) and the i (initialized) flags.
.data
This section contains read-write data and has the w (read-write) and the i (initialized) flags.
It must be mapped to initialized random access memory (RAM). It cannot be mapped to a
ROM.
.sdata
This section contains small read-write data of a size less than 8 bytes. You can change the
size of the data going into this section with the -G option. All data in this section is accessed
with reference to the read-write small data anchor. This ensures that all contents of the
section can be accessed using a single instruction. This section has the w (read-write) and
the i (initialized) flags and must be mapped to initialized RAM.
.sbss2
This section contains small, read-only un-initialized data of a size less than 8 bytes. You can
change the size of the data going into this section with the -G option. This section has the
r (read) flag and can be mapped to ROM.
.sbss
This section contains small un-initialized data of a size less than 8 bytes. You can change the
size of the data going into this section with the -G option. This section has the w (read-write)
flag and must be mapped to RAM.
.bss
This section contains un-initialized data. This section has the w (read-write) flag and must be
mapped to RAM.
www.xilinx.com
Send Feedback
25
.heap
This section contains uninitialized data that is used as the global program heap. Dynamic
memory allocation routines allocate memory from this section. This section must be
mapped to RAM.
.stack
This section contains uninitialized data that is used as the program stack. This section must
be mapped to RAM. This section is typically laid out right after the .heap section. In some
versions of the linker, the .stack and .heap sections might appear merged together into a
section named .bss_stack .
.init
This section contains language initialization code and has the same flags as . text. It must
be mapped to initialized ROM.
.fini
This section contains language cleanup code and has the same flags as .text. It must be
mapped to initialized ROM.
.ctors
This section contains a list of functions that must be invoked at program startup and the
same flags as .data and must be mapped to initialized RAM.
.dtors
This section contains a list of functions that must be invoked at program end, the same flags
as .data, and it must be mapped to initialized RAM.
.got2/.got
This section contains pointers to program data, the same flags as .data, and it must be
mapped to initialized RAM.
.eh_frame
This section contains frame unwind information for exception handling. It contains the
same flags as . rodata, and can be mapped to initialized ROM.
.tbss
This section holds uninitialized thread-local data that contribute to the program memory
image. This section has the same flags as .bss, and it must be mapped to RAM.
www.xilinx.com
Send Feedback
26
.tdata
This section holds initialized thread-local data that contribute to the program memory
image. This section must be mapped to initialized RAM.
.gcc_except_table
This section holds language specific data. This section must be mapped to initialized RAM.
.jcr
This section contains information necessary for registering compiled Java classes. The
contents are compiler-specific and used by compiler initialization functions. This section
must be mapped to initialized RAM.
.fixup
This section contains information necessary for doing fixup, such as the fixup page table,
and the fixup record table. This section must be mapped to initialized RAM.
Linker Scripts
The linker utility uses commands specified in linker scripts to divide your program on
different blocks of memories. It describes the mapping between all of the sections in all of
the input object files to output sections in the executable file. The output sections are
mapped to memories in the system. You do not need a linker script if you do not want to
change the default contiguous assignment of program contents to memory. There is a
default linker script provided with the linker that places section contents contiguously.
You can selectively modify only the starting address of your program by defining the linker
symbol _TEXT_START_ADDR on MicroBlaze processors, or START_ADDR on ARM processors, as
displayed in this example:
mb-gcc <input files and flags> -Wl,-defsym -Wl,_TEXT_START_ADDR=0x100
mb-ld <.o files> -defsym _TEXT_START_ADDR=0x100
The choices of the default script that will be used by the linker from the
$XILINX_/gnu/<procname >/<platform >/<processor_name >/lib/
ldscripts area are described as follows:
elf32<procname>.xu is used when the linker is invoked with the -Ur option.
www.xilinx.com
Send Feedback
27
If the linker is executed on its own, include the linker script as follows:
linker -T <linker_script> <Other Options and Input Files>
This tells GCC to use your linker script in the place of the default built-in linker script. Linker
scripts can be generated for your program from within IP integrator and SDK.
In IP integrator or SDK, select Tools > Generate Linker Script.
This opens up the linker script generator utility. Mapping sections to memory is done here.
Stack and Heap size can be set, as well as the memory mapping for Stack and Heap. When
the linker script is generated, it is given as input to GCC automatically when the
corresponding application is compiled within IP integrator or SDK.
Linker scripts can be used to assign specific variables or functions to specific memories.
This is done through section attributes in the C code. Linker scripts can also be used to
assign specific object files to sections in memory. These and other features of GNU linker
scripts are explained in the GNU linker documentation, which is a part of the online
binutils manual. A link to the GNU manuals is supplied in the Appendix B, Additional
Resources and Legal Notices. For a specific list of input sections that are assigned by
MicroBlaze processor linker scripts, see MicroBlaze Linker Script Sections on page 37.
MicroBlaze Compiler
The mb-gcc compiler for the Xilinx MicroBlaze soft processor introduces new options as
well as modifications to certain options supported by the GNU compiler tools. The new and
modified options are summarized in this chapter.
www.xilinx.com
Send Feedback
28
-mcpu=vX.YY.Z
-msmall-divides
-mno-xl-soft-mul
-mxl-gp-opt
-mxl-multiply-high
-mno-clearbss
-mno-xl-multiply-high
-mxl-stack-check
-mxl-soft-mul
-mno-xl-soft-div
-xl-mode-executable
-mxl-soft-div
-xl-mode-bootstrap
-mxl-barrel-shift
-xl-mode-novectors
-mno-xl-barrel-shift
-mxl-pattern-compare
-defsym _TEXT_START_ADDR=value
-mno-xl-pattern-compare
-relax
-mhard-float
-N
-msoft-float
-mxl-float-convert
-mxl-float-sqrt
Pr-v3.00.a: Uses 3-stage processor pipeline mode. Does not inhibit exception
v3.00.a and v4.00.a: Uses 3-stage processor pipeline model. Inhibits exception
v5.00.a and later: Uses 5-stage processor pipeline model. Does not inhibit exception
www.xilinx.com
Send Feedback
29
-mlittle-endian / -mbig-endian
Use these options to select the endianness of the target machine for which code is being
compiled. The endianness of the binary object file produced is also set appropriately based
on this switch. The GCC driver passes switches to the sub tools (as, cc1, cc1plus, ld) to
set the corresponding endianness in the sub tool.
The default is -mbig-endian.
Note: You cannot link together object files of mixed endianness.
-mno-xl-soft-mul
This option permits use of hardware multiply instructions for 32-bit multiplications.
The MicroBlaze processor has an option to turn the use of hardware multiplier resources on
or off. This option should be used when the hardware multiplier option is enabled on the
MicroBlaze processor. Using the hardware multiplier can improve the performance of your
application. The compiler automatically defines the C pre-processor definition HAVE_HW_MUL
when this switch is used. This allows you to write C or assembly code tailored to the
hardware, based on whether this feature is specified as available or not. See the MicroBlaze
Processor Reference Guide, (UG081) [Ref 3], for more details about the usage of the
multiplier option in MicroBlaze.
-mxl-multiply-high
The MicroBlaze processor has an option to enable instructions that can compute the higher
32-bits of a 32x32-bit multiplication. This option tells the compiler to use these multiply
high instructions. The compiler automatically defines the C pre-processor definition
HAVE_HW_MUL_HIGH when this switch is used. This allows you to write C or assembly code
tailored to the hardware, based on whether this feature is available or not. See the
MicroBlaze Processor Reference Guide, (UG081) [Ref 3],for more details about the usage of
the multiply high instructions in MicroBlaze.
-mno-xl-multiply-high
Do not use multiply high instructions. This option is the default.
-mxl-soft-mul
This option tells the compiler that there is no hardware multiplier unit on MicroBlaze, so
every 32-bit multiply operation is replaced by a call to the software emulation
routine __mulsi3. This option is the default.
-mno-xl-soft-div
You can instantiate a hardware divide unit in MicroBlaze. When the divide unit is present,
this option tells the compiler that hardware divide instructions can be used in the program
being compiled.
www.xilinx.com
Send Feedback
30
-mxl-soft-div
This option tells the compiler that there is no hardware divide unit on the target MicroBlaze
hardware.
This option is the default. The compiler replaces all 32-bit divisions with a call to the
corresponding software emulation routines (__divsi3, __udivsi3).
-mxl-barrel-shift
The MicroBlaze processor can be configured to be built with a barrel shifter. In order to use
the barrel shift feature of the processor, use the option -mxl-barrel-shift.
The default option assumes that no barrel shifter is present, and the compiler uses add and
multiply operations to shift the operands. Enabling barrel shifts can speed up your
application significantly, especially while using a floating point library. The compiler
automatically defines the C pre-processor definition HAVE_HW_BSHIFT when this switch is
used. This allows you to write C or assembly code tailored to the hardware, based on
whether or not this feature is specified as available. See the MicroBlaze Processor Reference
Guide, (UG081) [Ref 3], for more details about the use of the barrel shifter option in
MicroBlaze.
-mno-xl-barrel-shift
This option tells the compiler not to use hardware barrel shift instructions. This option is the
default.
-mxl-pattern-compare
This option activates the use of pattern compare instructions in the compiler.
Using pattern compare instructions can speed up boolean operations in your program.
Pattern compare operations also permit operating on word-length data as opposed to
byte-length data on string manipulation routines such as strcpy, strlen, and strcmp. On a
program heavily dependent on string manipulation routines, the speed increase obtained
will be significant. The compiler automatically defines the C pre-processor definition
HAVE_HW_PCMP when this switch is used. This allows you to write C or assembly code tailored
to the hardware, based on whether this feature is specified as available or not. Refer to the
MicroBlaze Processor Reference Guide, (UG081) [Ref 3], for more details about the use of the
pattern compare option in MicroBlaze.
www.xilinx.com
Send Feedback
31
-mno-xl-pattern-compare
This option tells the compiler not to use pattern compare instructions. This is the default.
-mhard-float
This option turns on the usage of single precision floating point instructions (fadd, frsub,
fmul , and fdiv) in the compiler.
It also uses fcmp.p instructions, where p is a predicate condition such as le, ge, lt, gt, eq,
ne . These instructions are natively decoded and executed by MicroBlaze, when the FPU is
-msoft-float
This option tells the compiler to use software emulation for floating point arithmetic. This
option is the default.
-mxl-float-convert
This option turns on the usage of single precision floating point conversion instructions
( fint and flt) in the compiler. These instructions are natively decoded and executed by
MicroBlaze, when the FPU is enabled in hardware and these optional instructions are
enabled.
Refer to the MicroBlaze Processor Reference Guide, (UG081) [Ref 3], for more details about
the use of the hardware floating point unit option in MicroBlaze.
-mxl-float-sqrt
This option turns on the usage of single precision floating point square root instructions
( fsqrt) in the compiler. These instructions are natively decoded and executed by
MicroBlaze, when the FPU is enabled in hardware and these optional instructions are
enabled.
Refer to the MicroBlaze Processor Reference Guide, (UG081) [Ref 3], for more details about
the use of the hardware floating point unit option in the MicroBlaze processor.
www.xilinx.com
Send Feedback
32
-mxl-gp-opt
If your program contains addresses that have non-zero bits in the most significant half (top
16 bits), then load or store operations to that address require two instructions.
The MicroBlaze processor ABI offers two global small data areas that can each contain up to
64 Kbytes of data. Any memory location within these areas can be accessed using the small
data area anchors and a 16-bit immediate value, needing only one instruction for a load or
store to the small data area. This optimization can be turned on with the -mxl-gp-opt
command line parameter. Variables of size less than a certain threshold value are stored in
these areas and can be addressed with fewer instructions. The addresses are calculated
during the linking stage.
CAUTION! If this option is being used, it must be provided to both the compile and the link commands of the build
process for your program. Using the switch inconsistently can lead to compile, link, or run-time errors.
-mno-clearbss
This option is useful for compiling programs used in simulation.
According to the C language standard, uninitialized global variables are allocated in the
.bss section and are guaranteed to have the value 0 when the program starts execution.
Typically, this is achieved by the C startup files running a loop to fill the . bss section with
zero when the program starts execution. Optimizing compilers also allocates global
variables that are assigned zero in C code to the .bss section.
In a simulation environment, the above two language features can be unwanted overhead.
Some simulators automatically zero the entire memory. Even in a normal environment, you
can write C code that does not rely on global variables being zero initially. This switch is
useful for these scenarios. It causes the C startup files to not initialize the .bss section with
zeroes. It also internally forces the compiler to not allocate zero-initialized global variables
in the .bss and instead move them to the . data section. This option might improve startup
times for your application. Use this option with care and ensure either that you do not use
code that relies on global variables being initialized to zero, or that your simulation
platform performs the zeroing of memory.
www.xilinx.com
Send Feedback
33
-mxl-stack-check
With this option, you can check whether the stack overflows when the program runs.
The compiler inserts code in the prologue of the every function, comparing the stack
pointer value with the available memory. If the stack pointer exceeds the available free
memory, the program jumps to a the subroutine _stack_overflow_exit. This subroutine
sets the value of the variable _stack_overflow_error to 1.
You can override the standard stack overflow handler by providing the function
_stack_overflow_exit in the source code, which acts as the stack overflow handler.
-xl-mode-bootstrap
This option is used for applications that are loaded using a bootloader. Typically, the
bootloader resides in non-volatile memory mapped to the processor reset vector. If a
normal executable is loaded by this bootloader, the application reset vector overwrites the
reset vector of the bootloader. In such a scenario, on a processor reset, the bootloader does
not execute first (it is typically required to do so) to reload this application and do other
initialization as necessary.
To prevent this, you must compile the bootloaded application with this compiler flag. On a
processor reset, control then reaches the bootloader instead of the application.
Using this switch on an application that is deployed in a scenario different from the one
described above will not work. This mode uses crt2.o as a startup file.
-xl-mode-novectors
This option is used for applications that do not require any of the MicroBlaze vectors. This
is typically used in standalone applications that do not use any of the processors reset,
interrupt, or exception features. Using this switch leads to smaller code size due to the
elimination of the instructions for the vectors. This mode uses crt3.o as a startup file.
CAUTION! Do not use more than one mode of execution on the command line. You will receive link errors due to
multiple definition of symbols if you do so.
www.xilinx.com
Send Feedback
34
MicroBlaze Assembler
The mb-as assembler for the Xilinx MicroBlaze soft processor supports the same set of
options supported by the standard GNU compiler tools. It also supports the same set of
assembler directives supported by the standard GNU assembler.
The mb-as assembler supports all the opcodes in the MicroBlaze machine instruction set,
with the exception of the imm instruction. The mb-as assembler generates imm instructions
when large immediate values are used. The assembly language programmer is never
required to write code with imm instructions. For more information on the MicroBlaze
instruction set, refer to the MicroBlaze Processor Reference Guide (UG081) [Ref 3].
The mb-as assembler requires all MicroBlaze instructions with an immediate operand to be
specified as a constant or a label. If the instruction requires a PC-relative operand, then the
mb-as assembler computes it and includes an imm instruction if necessary.
For example, the Branch Immediate if Equal (beqi) instruction requires a PC-relative
operand.
The assembly programmer should use this instruction as follows:
beqi r3, mytargetlabel
where mytargetlabel is the label of the target instruction. The mb-as assembler computes
the immediate value of the instruction as mytargetlabel - PC.
If this immediate value is greater than 16 bits, the mb-as assembler automatically inserts an
imm instruction. If the value of mytargetlabel is not known at the time of compilation, the
mb-as assembler always inserts an imm instruction. Use the relax option of the linker
remove any unnecessary imm instructions.
www.xilinx.com
Send Feedback
35
The mb-as assembler recognizes that this operand needs an imm instruction, and inserts one
automatically.
In addition to the standard MicroBlaze instruction set, the mb-as assembler also supports
some pseudo-op codes to ease the task of assembly programming. Table 2-6 lists the
supported pseudo-opcodes.
Table 2-6:
Pseudo Opcodes
Explanation
nop
not Rd, Ra
neg Rd, Ra
-defsym _TEXT_START_ADDR=value
By default, the text section of the output code starts with the base address 0x28. This can be
overridden by using the -defsym _TEXT_START_ADDR option. If this is supplied to mb-gcc
compiler, the text section of the output code starts from the given value.
You do not have to use -defsym _TEXT_START_ADDR if you want to use the default start
address set by the compiler.
This is a linker option and should be used when you invoke the linker separately. If the linker
is being invoked as a part of the mb-gcc flow, you must use the following option:
-Wl,-defsym -Wl,_TEXT_START_ADDR=value
-relax
This is a linker option that removes all unwanted imm instructions generated by the
assembler. The assembler generates an imm instruction for every instruction where the value
of the immediate cannot be calculated during the assembler phase.
www.xilinx.com
Send Feedback
36
-N
This option sets the text and data section as readable and writable. It also does not
page-align the data segment. This option is required only for MicroBlaze programs. The
top-level GCC compiler automatically includes this option, while invoking the linker, but if
you intend to invoke the linker without using GCC, use this option.
For more details on this option, refer to the GNU manuals online.
The MicroBlaze linker uses linker scripts to assign sections to memory. These are listed in
the following section.
Description
.vectors.reset
.vectors.sw_exception
.vectors.interrupt
.vectors.hw_exception
.text
.rodata
Read-only variables.
.sdata2
.data
Static and global variables with initial values. Initialized to zero by the
boot code.
.sdata
.sbss2
.sbss
Small static and global variable without initial values. Initialized to zero
by the boot code.
.bss
.heap
.stack
www.xilinx.com
Send Feedback
37
Ensure that the different vector sections are assigned to the appropriate memories as
defined by the MicroBlaze hardware.
Allocate space in the .bss section for stack and heap. Set the _stack variable to the
location after _STACK_SIZE locations of this area, and the _heap_start variable to the
next location after the _STACK_SIZE location. Because the stack and heap need not be
initialized for hardware as well as simulation, define the _bss_end variable after the
.bss and COMMON definitions.
Note: The .bss section boundary does not include either stack or heap.
ANSI C requires that all uninitialized memory be initialized to startup (not required for
stack and heap). The standard CRT that is provided assumes a single . bss section that is
initialized to zero. If there are multiple .bss sections, this CRT will not work. You should
write your own CRT that initializes all the . bss sections.
Startup Files
The compiler includes pre-compiled startup and end files in the final link command when
forming an executable. Startup files set up the language and the platform environment
before your application code executes. Start up files typically do the following:
Set up stack pointer, small-data anchors, and other registers. Refer to Table 2-8,
page 39 for details.
Similarly, end files are used to include code that must execute after your program ends. The
following actions are typically performed by end files:
De-initialize the hardware sub-system. For example, if the program is being profiled,
clean up the profiling sub-system.
www.xilinx.com
Send Feedback
38
Register
Value
Description
r1
_stack-16
r2
_SDA2_BASE
r13
_SDA_BASE_
Other registers
Undefined
The following subsections describe the initialization files used for various application
modes. This information is for advanced users who want to change or understand the
startup code of their application.
For MicroBlaze, there are two distinct stages of C runtime initialization. The first stage is
primarily responsible for setting up vectors, after which it invokes the second stage
initialization. It also provides exit stubs based on the different application modes.
crt1.o
This initialization file is used when the application is debugged in a software-intrusive
manner. It populates all the vectors except the breakpoint and reset vectors and transfers
control to the second -stage _crtinit startup routine.
crt2.o
This initialization file is used when the executable is loaded using a bootloader. It populates
all the vectors except the reset vector and transfers control to the second-stage _crtinit
startup routine. On returning from _crtinit, it ends the program by infinitely looping at
the _exit label. Because the reset vector is not populated, on a processor reset, control is
transferred to the bootloader, which can reload and restart the program.
www.xilinx.com
Send Feedback
39
crt3.o
This initialization file is employed when the executable does not use any vectors and wishes
to reduce code size. It populates only the reset vector and transfers control to the second
stage _crtinit startup routine. On returning from _crtinit, it ends the program by
infinitely looping at the _exit label. Because the other vectors are not populated, the GNU
linking mechanism does not pull in any of the interrupt and exception handling related
routines, thus saving code space.
crtinit.o
This default, second stage, C startup file performs the following steps:
1. Clears the .bss section to zero.
2. Invokes _program_init.
3. Invokes constructor functions ( _init).
4. Sets up the arguments for main and invokes main.
5. Invokes destructor functions ( _fini).
6. Invokes _program_clean and returns.
pgcrtinit.o
This second stage startup file is used during profiling, and performs the following steps:
1. Clears the .bss section to zero.
2. Invokes _program_init.
3. Invokes _profile_init to initialize the profiling library.
4. Invokes constructor functions ( _init).
5. Sets up the arguments for main and invokes main.
6. Invokes destructor functions ( _fini).
7. Invokes _profile_clean to cleanup the profiling library.
8. Invokes _program_clean, and then returns.
www.xilinx.com
Send Feedback
40
sim-crtinit.o
This second-stage startup file is used when the -mno-clearbss switch is used in the
compiler, and performs the following steps:
1. Invokes _program_init.
2. Invokes constructor functions ( _init).
3. Sets up the arguments for main and invokes main.
4. Invokes destructor functions ( _fini).
5. Invokes _program_clean, and then returns.
sim-pgcrtinit.o
This second stage startup file is used during profiling in conjunction with the
-mno-clearbss switch, and performs the following steps in order:
1. Invokes _program_init.
2. Invokes _profile_init to initialize the profiling library.
3. Invokes constructor functions ( _init).
4. Sets up the arguments for and invokes main.
5. Invokes destructor functions ( _fini).
6. Invokes _profile_clean to cleanup the profiling library.
7. Invokes _program_clean, and then returns.
Other files
The compiler also uses certain standard start and end files for C++ language support.
These are crti.o, crtbegin.o, crtend.o, and crtn.o. These files are standard compiler
files that provide the content for the .init, .fini, .ctors, and .dtors sections.
www.xilinx.com
Send Feedback
41
provided with source code. They are available in the installation to be used as is. You might need to
bring them in on your final link command.
www.xilinx.com
Send Feedback
42
Compiler Libraries
The mb-gcc compiler requires the GNU C standard library and the GNU math library.
Precompiled versions of these libraries are shipped with Vivado. The CPU driver for
MicroBlaze copies over the correct version, based on the hardware configuration of
MicroBlaze. To manually select the library version that you would like to use, look in the
following folder:
$XILINX_/gnu/microblaze/<platform> /microblaze-xilinx-elf/lib
The filenames are encoded based on the compiler flags and configurations used to compile
the library. For example, libc_m_bs.a is the C library compiled with hardware multiplier and
barrel shifter enabled in the compiler.
Table 2-9 shows the current encodings used and the configuration of the library specified
by the encodings.
Table 2-9:
Encoding
Description
_bs
_m
_p
Of special interest are the math library files (libm*.a). The C standard requires the common
math library functions (sin()and cos(), for example) to use double-precision floating point
arithmetic. However, double-precision floating point arithmetic may not be able to make
full use of the optional, single-precision floating point capabilities in available for
MicroBlaze.
The Newlib math libraries have alternate versions that implement these math functions
using single-precision arithmetic. These single-precision libraries might be able to make
direct use of the MicroBlaze processor hardware Floating Point Unit (FPU) and could
therefore perform better.
If you are sure that your application does not require standard precision, and you want to
implement enhanced performance, you can manually change the version of the linked-in
library.
By default, the CPU driver copies the double-precision version (libm_*_fpd.a) of the library
into your IP integrator project.
To get the single precision version, you can create a custom CPU driver that copies the
corresponding libm_*_fps.a library instead. Copy the corresponding libm_*_fps.a file
into your processor library folder (such as microblaze_0/lib) as libm.a.
When you have copied the library that you want to use, rebuild your application software
project.
www.xilinx.com
Send Feedback
43
Thread Safety
The MicroBlaze processor C and math libraries distributed with Vivado are not built to be
used in a multi-threaded environment. Common C library functions such as printf(),
scanf() , malloc() , and free() are not thread-safe and will cause unrecoverable errors in
the system at run-time. Use appropriate mutual exclusion mechanisms when using the
Vivado libraries in a multi-threaded environment.
Interrupt Handlers
Interrupt handlers must be compiled in a different manner than normal sub-routine calls. In
addition to saving non-volatiles, interrupt handlers must save the volatile registers that are
being used. Interrupt handlers should also store the value of the machine status register
(RMSR) when an interrupt occurs.
interrupt_handler attribute
To distinguish an interrupt handler from a sub-routine, mb-gcc looks for an attribute
( interrupt_handler) in the declaration of the code. This attribute is defined as follows:
void function_name () __attribute__ ((interrupt_handler));
Note: The attribute for the interrupt handler is to be given only in the prototype and not in the
definition.
Interrupt handlers might also call other functions, which might use volatile registers. To
maintain the correct values in the volatile registers, the interrupt handler saves all the
volatiles, if the handler is a non-leaf function.
Note: Functions that have calls to other sub-routines are called non-leaf functions.
Interrupt handlers are defined in the Microprocessor Software Specification (MSS) files.
These definitions automatically add the attributes to the interrupt handler functions.
The interrupt handler uses the instruction rtid for returning to the interrupted function.
save_volatiles attribute
The MicroBlaze compiler provides the attribute save_volatiles, which is similar to the
interrupt_handler attribute, but returns using rtsd instead of rtid .
This attribute saves all the volatiles for non-leaf functions and only the used volatiles in the
case of leaf functions.
void function_name () __attribute__((save_volatiles));
www.xilinx.com
Send Feedback
44
fast_interrupt
The MicroBlaze compiler provides the attribute fast_interrupt, which is similar to the
interrupt_handler attribute. On fast interrupt, MicroBlaze jumps to the interrupt routine
address instead jumping to the fixed address 0x10.
Unlike a normal interrupt, when the attribute fast_interrupt is used on a C function,
MicroBlaze saves only minimal registers.
void function_name () __attribute__ ((fast_interrupt));
Table 2-10:
Use of Attributes
Attributes
Functions
interrupt_handler
This attribute saves the machine status register and all the volatiles, in
addition to the non-volatile registers. rtid returns from the interrupt
handler. If the interrupt handler function is a leaf function, only those
volatiles which are used by the function are saved.
save_volatiles
fast_interrupt
Newlib C Library
www.xilinx.com
Send Feedback
45
Usage
Compiling
arm-xilinx-eabi-gcc -c file1.c -I<include_path> -o file1.o
arm-xilinx-eabi-gcc -c file2.c -I<include_path> -o file2.o
Linking
arm-xilinx-eabi-gcc -Wl,-T -Wl,lscript.ld -L<libxil.a path> -o "App.elf"file1.o
file2.o -Wl,--start-group,-lxil,-lgcc,-lc,--end-group
For descriptions of flags used in the commands above, refer to the compiler help, using any
of the following commands:
arm-xilinx-eabi-gcc --help
arm-xilinx-eabi-gcc -v --help
arm-xilinx-eabi-gcc --target-help
Compiler Options
Other GNU compiler options that can be applied using ARM-related flags can be found on
GNU Website: http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html. These flags can be
used in the steps above, as required.
All the ARM GCC compiler options are listed at the link above. However, actual support
depends on the target in use (ARM Cortex A9 in this case) and on the compiler toolchain.
For example:
The Sourcery CodeBench Lite for Xilinx EABI does not support -mhard-float
(-mfloat-abi=hard). Only soft and softfp floating point options are supported.
For more information on the toolchain, refer to the documentation available in the SDK
installation path:
<Xilinx_Vivado_Installation_Path>\SDK\<2014.1>\gnu\arm\nt\share\doc
www.xilinx.com
Send Feedback
46
Other Notes
C++ Code Size
The GCC toolchain combined with the latest open source C++ standard library
( libstdc++-v3) might be found to generate large code and data fragments as compared to
an equivalent C program. A significant portion of this overhead comes from code and data
for exception handling and runtime type information. Some C++ applications do not
require these features.
To remove the overhead and optimize for size, use the -fno-exceptions and/or the
-fno-rtti switches. This is recommended only for advanced users who know the
requirements of their application and understand these language features. Refer to the GCC
manual for more specific information on available compiler options and their impact.
C++ programs might have more intensive dynamic memory requirements (stack and heap
size) due to more complex language features and library routines.
Many of the C++ library routines can request memory to be allocated from the heap.
Review your heap and stack size requirements for C++ programs to ensure that they are
satisfied.
www.xilinx.com
Send Feedback
47
www.xilinx.com
Send Feedback
48
Chapter 3
Figure 3-1:
Debug Workflow
www.xilinx.com
Send Feedback
49
Executable ELF File: To debug your application, you must use an Executable and
Linkable Format (ELF) file compiled for debugging. The debug ELF file contains
additional debug information for the debugger to make direct associations between
the source code and the binaries generated from that original source.
Debug Configuration: In order to launch the debug session, you must create a debug
configuration in SDK. This configuration captures options required to start a debug
session, including the executable name, processor target to debug, and other
information.
SDK Debug Perspective: Using the Debug perspective, you can manage the
debugging or running of a program in the Workbench. You can control the execution of
your program by setting breakpoints, suspending launched programs, stepping
through your code, and examining the contents of variables.
You can repeat the cycle of modifying the code, building the executable, and debugging the
program in SDK.
Note: If you edit the source after compiling, the line numbering will be out of step because the
debug information is tied directly to the source. Similarly, debugging optimized binaries can also
cause unexpected jumps in the execution trace.
For more details on SDK System Debugger, refer to Software Development Kit (SDK) Help
[Ref 1].
www.xilinx.com
Send Feedback
50
XSDB Commands
Apart from the basic debug features like accessing target memory/registers, downloading
and running programs, and configuring FPGAs, XSDB also supports raw Jtag accesses,
server mode, etc. The features supported by XSDB are broadly classified into command
categories. Each category is described in the following topics:
connections
Breakpoints
Download
Jtag
Memory
Miscellaneous
Registers
Reset
Running
Streams
connections
Use the Xilinx System Debugger CLI (XSDB) Connections commands to connect to or
disconnect from hw_server and list or select active targets.
The following commands are available:
connect
disconnect
targets
gdbremote connect
gdbremote disconnect
connect
Connect to hw_server. Unlike XMD, connect command in XSDB doesn't connect to a debug
target on the hardware. Users will have to use the targets command to list the available
targets and select a debug target, before issuing commands to the debug target.
If no options are used with the connect command, XSDB launches hw_server at
localhost:3121 and connects to it.
www.xilinx.com
Send Feedback
51
Usage
connect [Options]
Options
Option
Description
-url <url>
-list
-set <channel-id>
-new
Example
disconnect
Disconnect from hw_server. As with connect command, disconnect doesn't close a
connection to the debug target, but will close the connection to hw_server.
Usage
Disconnect from active channel
disconnect
targets
List the available targets or select a target as an active target. In XSDB, target IDs are
sequential and are assigned when a target becomes visible. Targets can be
www.xilinx.com
Send Feedback
52
Usage
List available targets
Targets [options]
Options
Option
Description
-set
-regexp
-nocase
-filter
<filter-expression>
-target-properties
-index <index>
Example
List targets with name starting with "ARM" and ending with "#1"
targets -filter {name =~ "ARM*#1"}
Set current target to target with name starting with "ARM" and ending with "#1"
targets -set -filter {name =~ "ARM*#1"}
Set current target to target with name starting with "MicroBlaze" and which is on 1st
Jtag Device
www.xilinx.com
Send Feedback
53
gdbremote connect
This command attempts to connect the a GDB Remote Server.
Usage
gdbremote connect [options] server
Options
Option
-architecture <name>
Description
Specify default architecture is remote server does not provide it.
Example
Connect to GDB server running on port 5555
gdbremote connect localhost:5555
gdbremote disconnect
This command disconnects GDB Remote Server for current or specified target.
Usage
gdbremote disconnect [target-id]
Breakpoints
Add, remove, enable, disable or list Breakpoints/Watchpoints. XSDB supports
Breakpoints/Watchpoints at address and source line.
bpadd
bpremove
bpenable
bpdisable
bplist
bpadd
Add a breakpoint/watchpoint. For simplicity, this document refers to breakpoints and
watchpoints as breakpoints.
www.xilinx.com
Send Feedback
54
Usage
bpadd <Options>
Options
Option
Description
-addr
<breakpoint-address>
-file <file-name>
-line <line-number>
-type <breakpoint-type>
Specify the Breakpoint type. Type can be one of the values below:
auto - Auto - Breakpoint type is chosen by hw_server. This is the
default type
hw - Hardware Breakpoint
sw - Software Breakpoint
-mode <breakpoint-mode>
Specify the access mode that will trigger the breakpoint. Mode can be
a bitwise OR of the values below:
0x1 - Triggered by a read from the breakpoint location.
0x2 - Triggered by a write to the breakpoint location.
0x4 - Triggered by an instruction execution at the breakpoint
location. This is the default for Line and Address breakpoints
0x8 - Triggered by a data change (not an explicit write) at the
breakpoint location.
Example
bpremove
Remove a Breakpoint. Only the breakpoints set from the current XSDB session can be
removed using this command.
www.xilinx.com
Send Feedback
55
Usage
bpremove <id-list>
Options
Option
Description
List of breakpoint IDs, which are returned by the bpadd command.
Breakpoint IDs can also be obtained by using the bplist command.
<id-list>
Example
Remove Breakpoint 0
bpremove 0
bpenable
Enable a breakpoint. Only the breakpoints set from the current XSDB session can be
enabled using this command.
Usage
bpenable <id-list>
Options
Option
<id-list>
Description
List of breakpoint IDs, which are returned by the bpadd command.
Breakpoint IDs can also be obtained by using the bplist command.
Example
Enable Breakpoint 0
bpenable 0
bpdisable
Disable a breakpoint. Only the breakpoints set from the current XSDB session can be
disabled using this command.
www.xilinx.com
Send Feedback
56
Usage
bpdisable <id-list>
Options
Option
<id-list>
Description
List of breakpoint IDs, which are returned by the bpadd command.
Breakpoint IDs can also be obtained by using the bplist command.
Example
Disable Breakpoint 0
bpdisable 0
bplist
List all the breakpoints. This command lists the breakpoints set from the current XSDB
session, along with the breakpoints set from other debug clients.
Usage
bplist
Download
Download elf/binary files to the target or configure FPGA.
dow
fpga
dow
Download elf/binary files to the active target
Usage
dow [options] <file>
www.xilinx.com
Send Feedback
57
Options
Option
Description
[-clear] <file>
Download ELF file <file> to active target clear option can be used
to clear non-loadable sections like bss, during ELF download
fpga
Configure FPGA with a bitstream. FPGA device should be selected through the 'targets'
command before running 'fpga' command.
Usage
fpga [options] <bitstream-file>
Options
Option
Description
-file <bitstream-file>
-partial
Jtag
Perform raw Jtag shifts, get/set device properties, lock/unlock Jtag cable, etc.
jtag targets
jtag sequence
jtag device_properties
jtag lock
jtag unlock
jtag claim
jtag disclaim
jtag frequency
jtag targets
List JTAG targets or switch between JTAG targets
Usage
jtag targets
www.xilinx.com
Send Feedback
58
Options
Option
Description
Select <target id> as active JTAG target
<target id>
jtag sequence
Create a JTAG sequence object. The jtag sequence command creates a new sequence
object. After creation, the sequence is empty. The following sequence object commands are
available:
Options
Object Command
Option
Description
sequence state
<new-state>
[count]
Move JTAG state machine to <new-state> and then generate <count> JTAG
clocks. If <clock> is given and <new-state> is not a looping state (RESET,
IDLE, IRSHIFT, IRPAUSE, DRSHIFT or DRPAUSE) then state machine will move
towards RESET state.
sequence irshift
[options] bits
[data]
sequence drshift
[options] bits
[data]
Shift data in IRSHIFT or DRSHIFT state. Data is either given as the last
argument or if -tdi option is given then data will be all zeros or all ones
depending on the argument given to-tdi.
-tdi <value>
-binary
-integer
-bits
-hex
-capture
-state <new-state>
sequence delay
usec
sequence get_pin
pin
sequence set_pin
pin value
www.xilinx.com
Send Feedback
59
Object Command
Option
Description
sequence atomic
enable
Set or clear atomic sequences. This is useful to creating sequences that are
guaranteed to run with precise timing or fail. Atomic sequences should be as
short as possible to minimize the risk of failure.
sequence run
[options]
Run JTAG operations in sequence for the currently selected jtag target. This
command will return the result from shift commands using -capture option
and from get_pin commands.
-binary
-bits
-hex
-single
sequence clear
sequence delete
Delete sequence.
Example
set seqname [jtag sequence]
$seqname state RESET
$seqname drshift -capture -tdi 0 256
set result [$seqname run]
$seqname delete
jtag device_properties
Get or set the device properties.
Usage
jtag device_properties [options]
Options
Option
Description
<idcode>
key value
www.xilinx.com
Send Feedback
60
Example
jtag lock
Lock JTAG scan chain.
Usage
jtag lock [options]
Options
Option
[timeout]
Description
Lock JTAG scan chain containing current JTAG target.
Wait for scan chain lock to be available and then lock it. If <timeout>
is specified the wait time is limited to <timeout> milliseconds.
The JTAG lock prevents other clients from performing any JTAG shifts
or state changes on the scan chain. Other scan chains can be used in
parallel.
The jtag run_sequence command will ensure that all commands
in the sequence are performed in order so the use of jtag lock is only
needed when multiple jtag run_sequence commands needs to be
executed without any interruptions.
Note: A client should avoid locking more than one scan chain since this can cause dead-lock.
jtag unlock
Unlock JTAG scan chain containing current JTAG target
Usage
jtag unlock
jtag claim
Claim JTAG device
Usage
jtag claim <mask>
www.xilinx.com
Send Feedback
61
Options
Option
Description
Set claim mask for current JTAG device.
This command will attempt to set the claim mask for the current JTAG
device. If any set bits in <mask> are already set in the claim mask then
this command will return the "already claimed" error.
<mask>
The claim mask allows client to negotiate control over JTAG devices.
This is different from jtag lock, where:
it is specific to a device in the scan chain, and
any clients can perform JTAG operations while the claim is in effect.
Note: Currently claim is used to disable the hw_server debugger from controlling microprocessors
on ARM DAP devices and FPGA devices containing Microblaze processors.
jtag disclaim
Disclaim JTAG device.
Usage
jtag disclaim <mask>
jtag frequency
Get/ or set JTAG frequency
Usage
jtag frequency [options]
Options
Option
Description
-list
Get list of supported JTAG clock frequencies for current scan chain
frequency
Memory
Read/Write to the target memory space.
mrd
mwr
The force option can be used to with these commands to over-write access protection.
Note: For ARM targets, physical memory can be accessed by selecting the APU target.
www.xilinx.com
Send Feedback
62
mrd
Read memory address of the active target.
Usage
mrd [options] <address> [num]
Options
Option
Description
-force
-size <access-size>
-value
-bin
-file <file-name>
-arm-dap
Access ARM DAP address space DAP Address range is 0x0 - 0xfffc,
where the higher 8 bits select an AP and lower 8 bits are the register
address for that AP
-arm-ap <ap-num>
Note: Select a APU target to access ARM DAP and MEM-AP address space
Example
Read 100 words at address 0x0 and write the binary data to mem.bin
www.xilinx.com
Send Feedback
63
Read APB-AP CSW on Zynq. The higher 8 bits (0x1) select the APB-AP and lower 8 bits
(0x0) is the address of CSW
mrd -arm-dap 0x100
Read APB-AP TAR on Zynq. The higher 8 bits (0x0) select the AHB-AP and lower 8 bits
(0x4) is the address of TAR
mrd -arm-dap 0x04
mwr
Write to the memory address of active target.
Usage
Write <num> words from list of <values> to active target memory address specified
by <address>
mwr [options] <address> <values> [num]
If <num> words is not specified, all the <values> from the list are written sequentially
from the address specified by <address>. If <num> is greater than the size of the
<values> list, the last word in the list is filled at the remaining address locations
Read <num> values from a binary file and write to active target memory address
specified by <address>
mwr [options] <address> [num]
If <num> words is not specified, all the data from the file is written sequentially from
the address specified by <address>.
www.xilinx.com
Send Feedback
64
Options
Option
Description
-force
-size <access-size>
-bin
Read binary data from a file and write it to target address space.
-file <file-name>
File from which binary data is read before writing to target address
space.
-arm-dap
-arm-ap <ap-num>
Note: Select a APU target to access ARM DAP and MEM-AP address space
Example
Write 4 words from the list of values to address 0x0 and fill the last word from the list at
remaining 6 address locations
mwr 0x0 {0x12 0x23 0x34 0x45} 10
Read 100 words from binary file mem.bin and write the data at target address 0x0
mwr -bin -file mem.bin 0 100
Write 0x80000042 to APB-AP CSW on Zynq. The higher 8 bits (0x1) select the APB-AP
and lower 8 bits (0x0) is the address of CSW
mwr -arm-dap 0x100 0x80000042
www.xilinx.com
Send Feedback
65
Write 0xf8000120 to APB-AP TAR on Zynq. The higher 8 bits (0x0) select the AHB-AP
and lower 8 bits (0x4) is the address of TAR
mwr -arm-dap 0x04 0xf8000120
Miscellaneous
Commands which do not specifically fall under other categories are added to this category.
These commands are listed below.
loadhw
unloadhw
xsdbserver start
xsdbserver stop
xsdbserver disconnect
loadhw
Load a Vivado HW design, and set the memory map for the current target. If the current
target is a parent for a group of processors, memory map is set for all the child processors.
If the current target is a processor, memory map is set for all the child processors of its
parent. This command returns the HW design object.
Usage
loadhw [options]
Options
Option
-hw
Description
Hardware design file
Example
Load the HW design named design.hdf and set memory map for all the child
processors of APU target.
targets -filter {name =~ "APU"}
loadhw design.hdf
www.xilinx.com
Send Feedback
66
Load the HW design named design.hdf and set memory map for all the child
processors for which xc7z045 is the parent.
targets -filter {name =~ "xc7z045"}
loadhw design.hdf
unloadhw
Close the Vivado HW design which was opened during loadhw command, and clear the
memory map for the current target. If the current target is a parent for a group of
processors, memory map is cleared for all the child processors. If the current target is a
processor, memory map is cleared for all the child processors of its parent. This command
doesn't clear the memory map explicitly set by users.
Usage
unloadhw
xsdbserver start
Start XSDB command server listener. XSDB command server allows external processes to
connect to XSDB to evaluate commands. The XSDB server reads commands from the
connected socket one line at the time. After evaluation a line is sent back starting with
okay or error followed by the result or error as a backslash quoted string.
Usage
xsdbserver start [options]
Options
Option
Description
-host <addr>
-port <port>
Specifies port to listen on. If this option is not specified or if the port
is zero then a dynamically allocated port number is used.
Example
Start XSDB server listener using port 2000 and only allow incoming connections this
host
xsdbserver start -host localhost -port 2000
www.xilinx.com
Send Feedback
67
xsdbserver stop
Stop XSDB command server listener and disconnect connected client if any.
Usage
xsdbserver stop
xsdbserver disconnect
Disconnect current XSDB server connection
Usage
xsdbserver disconnect
Registers
Read, write to the target registers.
rrd
rwr
These commands can access General Purpose registers, System registers like ARM
Coprocessor registers. IOU registers in Zynq can be accessed by running these commands
on the 'APU target'.
rrd can also read register definitions, instead of their values.
rrd
Read register definitions or values for the active target.
Usage
rrd [options] [reg]
Options
Option
-defs
Description
Read register definitions instead of values.
Example
Read register r0
www.xilinx.com
Send Feedback
68
rwr
Write to a register on active target
Usage
Write the <value> to active target register specified by <reg>. <reg> can specify a top
level register and a register within a group.
rwr <reg> <value>
Example
Reset
Reset the target.
rst
rst
Reset the active target. This command can be used to reset a processor or a group of
processors or the entire system.
Usage
rst [options]
www.xilinx.com
Send Feedback
69
Options
Option
-processor
Description
Reset the active processor target.
-cores
Reset the active processor group. This reset type is supported only on
Zynq. A processor group is defined as a set of processors and on-chip
peripherals like OCM.
-system
-srst
Generate system reset for active target. With JTAG this is done by
generating a pulse on the SRST pin on the JTAG cable associated with
the active target.
Running
Commands for program execution, target state and disassembly.
con
stop
state
stp
stpi
nxt
nxti
stpout
dis
con
Resume the active target.
Usage
con
stop
Stop the active target
Usage
stop
www.xilinx.com
Send Feedback
70
state
Display the current execution state
Usage
state
stp
Resume execution of the active target until control reaches instruction that belongs to a
different line of source code. If a function is called, stop at first line of the function code.
Error is returned if line number information not available.
If <count> is greater than 1, repeat <count> times. Default value of count is 1.
Usage
stp [count]
stpi
Execute a single machine instruction. If instruction is function call, stop at first instruction of
the function code. If <count> is greater than 1, repeat <count> times. Default value of
count is 1.
Usage
stpi [count]
nxt
Resume execution of the active target until control reaches instruction that belongs to a
different line of source code, but runs any functions called at full speed. Error is returned if
line number information not available. If <count> is greater than 1, repeat <count> times.
Default value of count is 1.
Usage
nxt [count]
nxti
Step over a single machine instruction. If instruction is function call, execution continues
until control returns from the function. If <count> is greater than 1, repeat <count> times.
Default value of count is 1.
www.xilinx.com
Send Feedback
71
Usage
nxti [count]
stpout
Resume execution of current target until control returns from current function. If <count>
is greater than 1, repeat <count> times. Default value of count is 1.
Usage
stpout [count]
dis
Disassemble <num> instructions at address specified by <address>. The keyword pc can
be used to disassemble instructions at current PC. Default value for <num> is 1.
Usage
dis <address> [num]
Example
Streams
Connect to Jtag Uart (MDM or ARM DCC).
jtagterminal
readjtaguart
jtagterminal
Start/Stop a Jtag based hyper-terminal to communicate with ARM DCC or MDM UART
interface.
Note: Select a MDM or ARM processor target before running this command.
www.xilinx.com
Send Feedback
72
Usage
jtagterminal [Options]
Options
Option
Description
-start
-stop
readjtaguart
Start/Stop reading from the ARM DCC or MDM Uart Tx interface. Jtag Uart output can be
printed on stdout or redirected to a file.
Note: Select a MDM or ARM processor target before running this command.
Usage
readjtaguart [OPTIONS]
Options
Option
-start
-stop
-handle <file-handle>
Description
Start reading the Jtag Uart output
Stop reading the Jtag Uart output
Specify the file handle to which the data should be redirected. If no
file handle is given, data is printed on stdout.
Example
Start reading from the Jtag Uart and print the output on stdout
readjtaguart
Start reading from the Jtag Uart and print the output to test.log
set fp [open test.log w]
readjtaguart -start -handle $fp
www.xilinx.com
Send Feedback
73
XSDB runs script.tcl in a non-interactive mode and exits at the end of the script. Any
arguments that follow the script are passed to the sciprt.
APU
2
xc7z020
xsdb% targets 2
xsdb% rst
xsdb% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0xffffff28 (Suspended)
xsdb% Info: ARM Cortex-A9 MPCore #1 (target 3) Stopped at 0xffffff34 (Suspended)
xsdb% source ZC702_hw_platform/ps7_init.tcl
xsdb% ps7_init
xsdb% ps7_post_config
xsdb% dow hello_arm0/Debug/hello_arm0.elf
Downloading Program -- hello_arm0/Debug/hello_arm0.elf
section, .text: 0x00100000 - 0x001018cf
section, .init: 0x001018d0 - 0x001018e7
section, .fini: 0x001018e8 - 0x001018ff
section, .rodata: 0x00101900 - 0x00101917
section, .data: 0x00101918 - 0x00101d8b
section, .eh_frame: 0x00101d8c - 0x00101d8f
www.xilinx.com
Send Feedback
74
0MB
5.2MB/s
00:00
EA00003D
100004:
EA000025
100008:
EA000028
10000C:
EA000035
100010:
EA00002F
100014:
E320F000
100018:
EA000000
10001C:
EA00000F
100020:
E92D500F
100024:
ED2D0B10
xsdb% con
Info: ARM Cortex-A9 MPCore #0 (target 2) Running
xsdb% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x10054c (Breakpoint)
xsdb% bpstatus 0
target 2: HitCount 1 Address 1049932 Size 1 BreakpointType Hardware
xsdb% rrd
r0: 00000000
r1: 00000000
r4: 00000003
r5: 0000001e
r6: 0000ffff
r7: f8f0000c
r8: 0000767b
r9: ffffffff
r10: 00000000
r11: 00000000
r12: 0010c020
sp: 0010c030
lr: 001010a4
pc: 0010054c
cpsr: 600000df
usr
r2: 00108028
fiq
irq
mon
abt
und
svc
vfp
cp15
Jazelle
r3: 00101d8c
www.xilinx.com
Send Feedback
75
xsdb% rrd pc
pc: 0010054c
xsdb% dis
0010054c: push
{r11,lr}
xsdb% stp
Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x100554 (Step)
xsdb% bpadd -addr &exit
1
xsdb% con
Info: ARM Cortex-A9 MPCore #0 (target 2) Running
xsdb% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x101570 (Breakpoint)
xsdb% exit
2. Connect to this XSDB server use host localhost and port 41915.
3. Connect to the XSDB server using telnet and issue commands to XSDB server. The result
for each command is preceded by okay or fail.
telnet localhost 41915
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
XSDB Server Protocol Version 0.1
connect
okay tcfchan#0
targets 2
okay
rst
okay
source ZC702_hw_platform/ps7_init.tcl
okay
www.xilinx.com
Send Feedback
76
www.xilinx.com
Send Feedback
77
XMD vs XSDB
This section lists some key differences in XMD and XSDB commands from usage
perspective.
connect
One of the major differences between XMD and XSDB is the way connections are
established to debug targets. XMD provides connect command to connect to a debug
target, for example to a processor target. In XSDB, executing the connect command opens
a connection to the hw_server. The targets command should be used to list all the
available targets and select a debug target, before any debug commands can be issued to
that target.
targets
In XMD, the target IDs have fixed values (Ex. MB target IDs start with 0 and Cortex-A9 target
IDs start with 64), whereas in XSDB, the target IDs are sequential. Targets are assigned IDs
in the order they are detected on the scan chain. If the scan chain is partial during connect
command, new targets are assigned IDs when they become visible.
To select a target programmatically, XSDB provides filter option with the targets
command. Below is an example for filter usage.
targets -filter {name =~ "ARM*#1"} -set
fpga
In XMD, FPGA device number can be specified as part of fpga command. In XSDB, FPGA
device should be selected through targets command, before running the fpga command
to program the FPGA.
Ctrl+c
With XMD, Ctrl+c terminates the application immediately. In XSDB, Ctrl+c can be used to
terminate long running commands like program FPGA, download a file. Hitting Ctrl+c twice
in succession terminates XSDB.
www.xilinx.com
Send Feedback
78
Chapter 4
Zynq Devices
Program Flash utility supports programming of QSPI, NAND & NOR types of flashes. QSPI
can used in different configurations such as QSPI Single, QSPI Dual Parallel and QSPI Dual
Stacked. FSBL file has to be provided in case of NAND & NOR types.
You can program boot images created from Bootgen. Bootgen stitches the components like
First Stage Boot Loader (FSBL), bitstream (to configure the PL part of Zynq), the
applications, RTOS and other data files.
When the processor comes out of reset in case of Zynq, the control is with BootROM, which
copies the FSBL from the flash to the on chip memory and hands over the control to it. The
FSBL starts executing, which then copies the bitstream from flash and configures the PL.
Once the PL is configured, the FSBL copies the next partition, say, an application from the
flash to DDR, and hands over the control to the application. The application starts
executing. In order to load the Linux, U-boot can be used as one more partition
Other Devices
The flashes are broadly categorized into Parallel Flash (BPI) and Serial Flash (SPI). Both the
SPI and BPI flashes are available from various makes such as Micron, Spansion etc. You can
program the following in flash:
File system images, data files such as sample data and algorithmic tables
www.xilinx.com
Send Feedback
79
Usage
program_flash <flash options> <cable device options>
Flash Options
Option
Description
-f <image file>
-offset <address>
Offset within the flash memory at which the image should be written.
-no_erase
-blank_check
-verify
-erase_sector <size>
For flashes whose erase sector is other than 64KB (size in bytes)
www.xilinx.com
Send Feedback
80
Option
Description
-flash_type <type>
-partlist <bpi|spi>
<micron|spansion>
Description
-debugdevice deviceNr
<device position in jtag
chain>
www.xilinx.com
Send Feedback
81
Other Notes
Supported Flash Parts for Non-Zynq Devices
The following table lists all the flash parts that are supported for non-Zynq devices. The part
name information is passed using the -flash_type command line option. The list
contains the flashes of type BPIx8, BPIx16 and SPI from Micron & Spansion. The -partlist
command-line option can be used to filter out the flashes based on types (BPI/SPI) or
manufacturer (Spansion/Micron).
Table 4-1:
S.No.
1:
Spansion
s29gl128p-bpi-x16
2:
Spansion
s29gl256p-bpi-x16
3:
Spansion
s29gl512p-bpi-x16
4:
Spansion
s29gl01gp-bpi-x16
5:
Spansion
s29gl128s-bpi-x16
6:
Spansion
s29gl256s-bpi-x16
7:
Spansion
s29gl512s-bpi-x16
8:
Spansion
s29gl01gs-bpi-x16
9:
Spansion
s29gl128p-bpi-x8
10:
Spansion
s29gl256p-bpi-x8
11:
Spansion
s29gl512p-bpi-x8
12:
Spansion
s29gl01gp-bpi-x8
13:
Micron
28f640p30t-bpi-x16
14:
Micron
28f640p30b-bpi-x16
15:
Micron
28f128p30t-bpi-x16
16:
Micron
28f128p30b-bpi-x16
17:
Micron
28f256p30t-bpi-x16
18:
Micron
28f256p30b-bpi-x16
19:
Micron
28f512p30t-bpi-x16
20:
Micron
28f512p30e-bpi-x16
21:
Micron
28f512p30b-bpi-x16
22:
Micron
28f00ap30t-bpi-x16
23:
Micron
28f00ap30e-bpi-x16
24:
Micron
28f00ap30b-bpi-x16
25:
Micron
28f00bp30e-bpi-x16
www.xilinx.com
Send Feedback
82
26:
Micron
28f640p33t-bpi-x16
27:
Micron
28f640p33b-bpi-x16
28:
Micron
28f128p33t-bpi-x16
29:
Micron
28f128p33b-bpi-x16
30:
Micron
28f256p33t-bpi-x16
31:
Micron
28f256p33b-bpi-x16
32:
Micron
28f512p33t-bpi-x16
33:
Micron
28f512p33e-bpi-x16
34:
Micron
28f512p33b-bpi-x16
35:
Micron
28f00ap33t-bpi-x16
36:
Micron
28f00ap33e-bpi-x16
37:
Micron
28f00ap33b-bpi-x16
38:
Micron
28f128g18f-bpi-x16
39:
Micron
mt28gu256aax1e-bpi-x16
40:
Micron
mt28gu512aax1e-bpi-x16
41:
Micron
mt28gu01gaax1e-bpi-x16
42:
Micron
28f064m29ewh-bpi-x16
43:
Micron
28f064m29ewl-bpi-x16
44:
Micron
28f064m29ewt-bpi-x16
45:
Micron
28f064m29ewb-bpi-x16
46:
Micron
28f128m29ew-bpi-x16
47:
Micron
28f256m29ew-bpi-x16
48:
Micron
28f512m29ew-bpi-x16
49:
Micron
28f00am29ew-bpi-x16
50:
Micron
28f00bm29ew-bpi-x16
51:
Micron
28f064m29ewh-bpi-x8
52:
Micron
28f064m29ewl-bpi-x8
53:
Micron
28f064m29ewt-bpi-x8
54:
Micron
28f064m29ewb-bpi-x8
55:
Micron
28f128m29ew-bpi-x8
56:
Micron
28f256m29ew-bpi-x8
57:
Micron
28f512m29ew-bpi-x8
58:
Micron
28f00am29ew-bpi-x8
59:
Micron
28f00bm29ew-bpi-x8
60:
Spansion
s70gl02gp-bpi-x16
www.xilinx.com
Send Feedback
83
61:
Spansion
s70gl02gs-bpi-x16
62:
Spansion
s25fl032p-spi-x1_x2_x4
63:
Spansion
s25fl064p-spi-x1_x2_x4
64:
Spansion
s25fl132k-spi-x1_x2_x4
65:
Spansion
s25fl164k-spi-x1_x2_x4
66:
Spansion
s25fl128sxxxxxx0-spi-x1_x2_x4
67:
Spansion
s25fl128sxxxxxx1-spi-x1_x2_x4
68:
Spansion
s25fl256sxxxxxx0-spi-x1_x2_x4
69:
Spansion
s25fl256sxxxxxx1-spi-x1_x2_x4
70:
Spansion
s25fl512s-spi-x1_x2_x4
71:
Micron
mt25qu512-spi-x1_x2_x4
72:
Micron
mt25qu512-spi-x1_x2_x4_x8
73:
Micron
mt25ql512-spi-x1_x2_x4
74:
Micron
mt25ql512-spi-x1_x2_x4_x8
75:
Micron
mt25ql01g-spi-x1_x2_x4
76:
Micron
mt25ql01g-spi-x1_x2_x4_x8
77:
Micron
mt25ql02g-spi-x1_x2_x4
78:
Micron
mt25ql02g-spi-x1_x2_x4_x8
79:
Micron
mt25qu01g-spi-x1_x2_x4
80:
Micron
mt25qu01g-spi-x1_x2_x4_x8
81:
Micron
mt25qu02g-spi-x1_x2_x4
82:
Micron
mt25qu02g-spi-x1_x2_x4_x8
83:
Micron
n25q128-3.3v-spi-x1_x2_x4
84:
Micron
n25q128-1.8v-spi-x1_x2_x4
85:
Micron
n25q256-3.3v-spi-x1_x2_x4
86:
Micron
n25q256-1.8v-spi-x1_x2_x4_x8
87:
Micron
n25q256-1.8v-spi-x1_x2_x4
88:
Micron
n25q32-3.3v-spi-x1_x2_x4
89:
Micron
n25q32-1.8v-spi-x1_x2_x4
90:
Micron
n25q64-3.3v-spi-x1_x2_x4
91:
Micron
n25q64-1.8v-spi-x1_x2_x4
www.xilinx.com
Send Feedback
84
This creates an SREC file that you can then use as appropriate. The mb-objcopy utility is a
GNU binary that ships with the SDK.
Bootgen Options
Option
Description
-image <input.bif>
Input boot image format file contains info regarding the input file.
-o <output.bin/mcs>
-interface <options>
Examples
1. Converting ELF file to BIN file.
bootgen -arch fpga -image elf_bin_all.bif -o boot.bin -interface spi
www.xilinx.com
Send Feedback
85
www.xilinx.com
Send Feedback
86
Appendix A
GNU Utilities
This appendix describes the GNU utilities available for use with the Vivado Design Suite.
gcov
This is a program used in conjunction with GCC to profile and analyze test coverage of
programs. It can also be used with the gprof profiling program.
Note: The gcov utility is not supported by IP integrator or SDK, but is provided as is for use if you
want to roll your own coverage flows.
mb-addr2line
This program uses debugging information in the executable to translate a program address
into a corresponding line number and file name.
mb-ar
This program creates, modifies, and extracts files from archives. An archive is a file that
contains one or more other files, typically object files for libraries.
www.xilinx.com
Send Feedback
87
mb-as
This is the assembler program.
mb-c++
This is the same cross compiler as mb-gcc, invoked with the programming language set to
C++. This is the same as mb-g++.
mb-c++filt
This program performs name demangling for C++ and Java function names in assembly
listings.
mb-g++
This is the same cross compiler as mb-gcc, invoked with the programming language set to
C++. This is the same as mb-c++.
mb-gasp
This is the macro preprocessor for the assembler program.
mb-gcc
This is the cross compiler for C and C++ programs. It automatically identifies the
programming language used based on the file extension.
mb-gdb
This is the debugger for programs.
mb-gprof
This is a profiling program that allows you to analyze how much time is spent in each part
of your program. It is useful for optimizing run time.
mb-ld
This is the linker program. It combines library and object files, performing any relocation
necessary, and generates an executable file.
www.xilinx.com
Send Feedback
88
mb-nm
This program lists the symbols in an object file.
mb-objcopy
This program translates the contents of an object file from one format to another.
mb-objdump
This program displays information about an object file. This is very useful in debugging
programs, and is typically used to verify that the correct utilities and data are in the correct
memory location.
mb-ranlib
This program creates an index for an archive file, and adds this index to the archive file
itself. This allows the linker to speed up the process of linking to the library represented by
the archive.
mb-readelf
This program displays information about an Executable Linked Format (ELF) file.
mb-size
This program lists the size of each section in the object file. This is useful to determine the
static memory requirements for utilities and data.
mb-strings
This is a useful program for determining the contents of binary files. It lists the strings of
printable characters in an object file.
mb-strip
This program removes all symbols from object files. It can be used to reduce the size of the
file, and to prevent others from viewing the symbolic information in the file.
www.xilinx.com
Send Feedback
89
cygitclsh30
cygitkwish30
cygtclsh80
cygwish80
tix4180
www.xilinx.com
Send Feedback
90
Appendix B
Solution Centers
See the Xilinx Solution Centers for support on devices, software tools, and intellectual
property at all stages of the design cycle. Topics include design assistance, advisories, and
troubleshooting tips.
References
The following Vivado Design Suite guides are referenced in this document.
1. Software Development Kit (SDK) Help (UG782)
2. Zynq-7000 All Programmable SoC Technical Reference Manual (UG585)
3. MicroBlaze Processor User Guide (UG081)
www.xilinx.com
Send Feedback
91
Additional Resources
8. GNU website: http://www.gnu.org
9. Red Hat Insight website: http://sources.redhat.com/insight.
Training Resources
Xilinx provides a variety of training courses and QuickTake videos to help you learn more
about the concepts presented in this document. Use these links to explore related training
resources:
1. Zynq-7000 All Programmable SoC: Development Tools Overview
2. Zynq-7000 All Programmable SoC: System Performance Tools Overview
3. Zynq-7000 All Programmable SoC: Hello World in 5 Minutes
4. Zynq-7000 All Programmable SoC: Bare Metal Application Development
www.xilinx.com
Send Feedback
92