This material exempt per Department of Commerce license exception TSU Software Development
Jan 04, 2016
This material exempt per Department of Commerce license exception TSU
Software Development
Software Design 2
Objectives
After completing this module, you will be able to:• Identify the functionality included in the GNU tools: GCC, AS, LD,
GDB• Examine the IP driver’s functionality and design• Examine the Xilinx Libraries• Determine what is a BSP and what is included
Software Design 3
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 4
Desktop versus Embedded
• Desktop development: written, debugged, and run on the same machine
• OS loads the program into the memory when the program has been requested to run
• Address resolution takes place at the time of loading by a program called the loader – The loader is included
in the OS
• The programmer glues into one executable file called ELF – Boot code, application code,
RTOS, and ISRs – address resolution takes place
during the “gluing” stage
• The executable file is downloaded into the target system through different methods– Ethernet, serial, JTAG, BDM,
ROM programmer
Software Design 5
Embedded Development• Development takes place on one
machine (host) and is downloaded to the embedded system (target)
On-Chip Memory Std JTAG
PortGB I/O
PortUserPorts
CS ICONCores
OCM IF
I/O Selection
Firmware#Include stdio.hMain()
ControlSystemICE
Core
Off & On-Chip Memory
PPC405 Dbg Facilities
CPU JTAGPort
CPU TracePort
Core ConnectTM
Other PPC405Cores
Post FirstRelease
Host Computer
Target Computer
A cross-compiler is run on the host
Software Design 6
Embedded Development
• Different set of problems – Unique hardware for every design– Reliability– Real-time response requirement (sometimes)
• RTOS versus OS
– Code compactness– High-level languages and assembly
Software Design 7
Outline• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 8
Simulation Generator
Hardware Platform Generation
Library Generation
Embedded SoftwareDevelopment
ISE Tools
IP Library or User Repository
MSS
LibGen
.a
Compiler (GCC)
.o
Linker (GCC)
ELF
MHS
PlatGenDrivers,
MDDMPD, PAO
PCoreHDL System and
Wrapper VHDsystem.BMM
Synthesis (XST)
NGC
NGDBuildUCF
NGD
MAP
NCD, PCF
PAR
NCD
BitGensystem.BIT
BitInit
download.BIT
iMPACT
system_BD.BMM
SimGen
BehavioralVHD Model
SimGen
StructuralVHD Model
SimGen
TimingVHD Model
Simulation
IP Models ISE ModelsTestbenchStimulus
CompEDKLib CompXLib
ApplicationSource.c, .h, .s
EDK Tool Flow
download.CMD
EDK SWLibraries
Software Design Environment
• The Library Generator (LibGen) utility generates the necessary libraries and drivers for the embedded processors
• LibGen takes an MSS (Microprocessor Software Specification) file created by the user as input. The MSS file defines the drivers associated with peripherals, standard input/output devices, interrupt handler routines, and other related software features
• The MSS file is generated by XPS by using the software settings specified
LibGen
• code directory– A repository for EDK executables
• include directory– C header files that are required by
drivers– xparameters.h
• Defines base and high addresses of the peripherals in the system
• Defines the peripheral IDs required by the drivers and user programs
• Defines the function prototypes
LibGen Generated Directories
project_directory
Processor instance directory
code directory
include directory
lib directory
libsrc directory
Note: The number of processor instance directoriesgenerated is related to the number of processor instances present in the system
LibGen
• lib directory– libc.a, libm.a and libxil.a libraries
• The libxil library contains driver functions that the particular processor can access
• libsrc directory– Intermediate files and makefiles that
compile the libraries and drivers– Peripheral-specific driver files that
are copied from the EDK and user driver directories
LibGen Generated Directories
project_directory
processor instance directory
code directory
include directory
lib directory
libsrc directory
Note: The processor instance directoriescontent is overwritten every time LibGen is run
Software Design 12
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 13
Software Platform Settings
• Software settings can be assigned to individual processor instance by selecting Software Software Platform Settings or clicking button on the toolbar
• In case of multiple processors in the design software platform settings allow you to select each processor instance and set parameters
Software Design 14
Software Platform
12
3 4
1
2
3
4
Select Software Platform panel
Select processor instance
Select OS
Check desired libraries and their version
Software Design 15
OS and Libraries
3
4
1
2
Select OS and Libraries panel
Select processor instance
Set stdin and stdout devices as well as assign fpu, malloc, and profiling related parameters
Configure selected libraries parameters
1 2
3
4
Software Design 16
Drivers
21 Select Drivers panel
Select drivers and version for each device in the design
21
Software Design 17
Interrupt Handlers
2
1 Select Interrupt Handler panel
If an interrupt signal is used from any peripheral then a corresponding entry will be listed
Enter interrupt handler function name
2
1
3
3
Software Design 18
Outline• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Compiler Settings• Compiler settings can be assigned by
double-clicking Compiler Options entry under an application in the Application tab
• Environment tab– Application Mode
• Executable• XmdStub (MicroBlaze™ processor only)
– Use Custom Linker Script• If checked then provide the path to the linker
script– Use default Linker Script
• Program Start Address• Stack Size• Heap Size
Compiler Settings
• Debug and Optimization tab– Optimization Parameters
• Optimization Level: 0 to 3• Use Global Pointer Optimization
– Generate Debug Symbols• Checking this option allows the
generation of debugging information based on the option selected
• Create symbol for debugging (-g option)
• Create symbols for assembly (-gstabs option)
Compiler Settings
• Paths tab– Search Paths
• Compiler (-B)• Library (-L)• Include (-I)
– Libraries to Link against
• List user libraries to be used
Compiler Settings
• Advanced tab– Other Compiler Options
• Add additional options– For example: -g
– Symbol Definitions field• Pass Space Separated
Options to– Preprocessor (-Wp)– Assembler (-Wa)– Linker (-Wl)
Software Design 23
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 24
Simulation Generator
Hardware Platform Generation
Library Generation
Embedded SoftwareDevelopment
ISETools
IP Library or User Repository
MSS
LibGen
.a
Compiler (GCC)
.o
Linker (GCC)
ELF
MHS
PlatGenDrivers,
MDDMPD, PAO
PCoreHDL System and
Wrapper VHDsystem.BMM
Synthesis (XST)
NGC
NGDBuildUCF
NGD
MAP
NCD, PCF
PAR
NCD
BitGensystem.BIT
BitInit
download.BIT
iMPACT
system_BD.BMM
SimGen
BehavioralVHD Model
SimGen
StructuralVHD Model
SimGen
TimingVHD Model
Simulation
IP Models ISE ModelsTestbenchStimulus
CompEDKLib CompXLib
ApplicationSource.c, .h, .s
EDK Tool Flow
download.CMD
EDK SWLibraries
GNU Tools: GCC
• GCC translates C source code into assembly language
• GCC also functions as the user interface to the GNU assembler and to the GNU linker, calling the assembler and the linker with the appropriate parameters
• Supported cross-compilers:– PowerPC processor compiler
• GNU GCC (powerpc-eabi-gcc)• Wind River Diab compiler (dcc)
– MicroBlaze processor compiler• GNU GCC (mb-gcc)
• Command line only; uses the settings set through the GUI
C files
Cross-compiler
Assembly files
Software Design 26
GNU Tools• Calls four different executables
– Preprocessor (cpp0)– Language specific c-compiler
• cc1 C-programming language• cc1plus C++ language
– Assembler• mb-as (MicroBlaze processor)• powerpc-eabi-as (PowerPC
processor)– Linker and loader
• mb-ld (MicroBlaze processor)• powerpc-eabi-ld (PowerPC
processor)
GNU Tools: AS
• Input: Assembly language files– File extension: .s
• Output: Object code – File extension: .o– Contains
• Assembled piece of code• Constant data• External references• Debugging information
• Typically, the compiler automatically calls the assembler
• Use –Wa switch if the source files are assembly only and use gcc
Assembly files
Cross-assembler
Object files
Software Design 28
GNU Tools: LD
• Linker• Inputs:
– Several object files – Archived object files (library)– Linker script (mapfile)
• Outputs: – Executable image (.ELF) – Mapfile (different from linker script)
Object files
Linker script
Linker/Locator
Executable Map
Software Design 29
Binutils: Binary Utilities
• AR Archiver– Create, modify, and extract from libraries– Used in EDK to combine the object files of the Board Support Package
(BSP) in a library– Used in EDK to extract object files from different libraries
• OBJDUMP– Display information from object files and executables
• Header information, memory map• Data• Disassemble code
– GNU executables• powerpc-eabi-objdump• mb-objdump
Software Design 30
Powerpc-eabi-objdump
Memorylocation
Text section
Machinecode
Assemblyinstructions
Software Design 31
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Device Drivers• The Xilinx device drivers are designed to meet the following
objectives:– Provide maximum portability
• The device drivers are provided as ANSI C source code– Support FPGA configurability
• Supports multiple instances of the device without code duplication for each instance, while at the same time managing unique characteristics on a per-instance basis
– Support simple and complex use cases• A layered device driver architecture provides both
– Simple device drivers with minimal memory footprints– Full-featured device drivers with larger memory footprints
– Ease of use and maintenance• Xilinx uses coding standards and provides well-documented source code for
developers
Software Design 33
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Drivers: Level 0 / Level 1
• The layered architecture provides seamless integration with… – (Layer 2) RTOS application layer– (Layer 1) High-level device drivers that are full-featured and portable
across operating systems and processors – (Layer 0) Low-level drivers for simple use cases
Layer 2, RTOS Adaptation
Layer 1, High-level Drivers
Layer 0, Low-level Drivers
Drivers: Level 0
• Consists of low-level device drivers• Implemented as macros and functions that are designed to allow a
developer to create a small system• Characteristics:
– Small memory footprint– Little to no error checking is performed– Supports primary device features only– No support of device configuration parameters– Supports multiple instances of a device with base address input to the API– Polled I/O only– Blocking function calls– Header files have “_l” in their names (e.g. xuartlite_l.h)
Drivers: Level 1
• Consists of high-level device drivers• Implemented as macros and functions and designed to allow a
developer to utilize all of the features of a device• Characteristics:
– Abstract API that isolates the API from hardware device changes– Supports device configuration parameters– Supports multiple instances of a device– Polled and interrupt driven I/O– Non-blocking function calls to aid complex applications– May have a large memory footprint– Typically, provides buffer interfaces for data transfers as opposed to byte
interfaces– Header files do not have “_l” in their names (e.g. xuartlite.h)
Comparison Example• Uartlite Level 1
– XStatus XUartLite_Initialize (XUartLite *InstancePtr, Xuint16 DeviceId)– void XUartLite_ResetFifos (XUartLite *InstancePtr)– unsigned int XUartLite_Send (XUartLite *InstancePtr, Xuint8 *DataBufferPtr, unsigned int NumBytes)– unsigned int XUartLite_Recv (XUartLite *InstancePtr, Xuint8 *DataBufferPtr, unsigned int NumBytes)– Xboolean XUartLite_IsSending (XUartLite *InstancePtr)– void XUartLite_GetStats (XUartLite *InstancePtr, XUartLite_Stats *StatsPtr)– void XUartLite_ClearStats (XUartLite *InstancePtr)– XStatus XUartLite_SelfTest (XUartLite *InstancePtr)– void XUartLite_EnableInterrupt (XUartLite *InstancePtr)– void XUartLite_DisableInterrupt (XUartLite *InstancePtr)– void XUartLite_SetRecvHandler (XUartLite *InstancePtr, XUartLite_Handler FuncPtr, void *CallBackRef)– void XUartLite_SetSendHandler (XUartLite *InstancePtr, XUartLite_Handler FuncPtr, void *CallBackRef)– void XUartLite_InterruptHandler (XUartLite *InstancePtr)
• Uartlite Level 0 – void XUartLite_SendByte (Xuint32 BaseAddress, Xuint8 Data)– Xuint8 XUartLite_RecvByte (Xuint32 BaseAddress)
Software Design 38
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 39
Exceptions and Interrupts
• Exceptions are events detected by the processor that require action by the system software– Typically, the result of unexpected error conditions (e.g., bus error)– Some exceptions can be programmed to occur (e.g., FIT, PIT)– Some exceptions are generated by external devices (e.g., CritInt)
• Interrupts are automatic control transfers as a result of an exception– Execution of the current program is suspended after the current instruction– Some context info is saved so execution can return to the current program – Execution is transferred to the interrupt handler to service the interrupt– The interrupt handler must be registered– The interrupt must be enabled
Software Design 40
Hardware Interrupt Inputs
• Two external inputs to the IBM PowerPC 405 processor core:– Critical interrupt– External interrupt
• Enabled and disabled through the Machine State Register (MSR)– MSR(CE) and MSR(EE)– Default @RESET is disabled
• FPGA design adds an interrupt controller for application-specific requirements– Supports 32 interrupts
Software Design 41
Exceptions and Interrupts
Entry Point
Save State
Call Handler
Restore State
Return to Program
Exception Code
HANDLER
Registered Handler
Software Design 42
Exceptions and Interrupts
• Exception library function calls support:– void XExc_Init(void);
• Initializes vector table, default handlers– void XExc_RegisterHandler (Xuint8 ExceptionId, XExceptionHandler
Handler, void *DataPtr);• Allows the registration of a handler
– void XExc_RemoveHandler (Xuint8 ExceptionId)• Replaces the current handler with a default handler
– void XExc_mEnableExceptions (EnableMask);• Enables Crit, NonCrit interrupts
– void XExc_mDisableExceptions (DisableMask);• Disables Crit, NonCrit interrupts
Software Design 43
Timer Facilities
• Features:– Time base– Fixed Interval Timer (FIT)– Programmable Interval Timer (PIT)– Watchdog timer– These timers share the same time-base clock frequency
• Uses:– Time-of-day– Data logging– Peripherals requiring periodic service– Recover from faulty hardware or firmware
PowerPC Processor: Sleep• Sleep BSP library function calls:
– unsigned int usleep(unsigned int __useconds);– unsigned int sleep(unsigned int __seconds);
• The sleep() or usleep() function in sleep.c delays the execution of a program by __seconds or __useconds seconds
• Set CORE_CLOCK_FREQUENCY as sleep() and usleep() functions use it compute the delay
PowerPC: Time
• The xtime_l.c file and corresponding xtime_l.h include file provide access to the 64-bit time-base counter inside the PowerPC processor core
• The counter increases by one every processor cycle• Declarations:
– void XTime_SetTime(XTime xtime);• Sets the time-base register to the value in xtime
– void XTime_GetTime(XTime *xtime);• Writes the current value of the time-base register to variable xtime
– void XTime_TSRClearStatusBits(unsigned long Bitmask);• Used to clear bits in the Timer Status Register (TSR). The parameter Bitmask
designates the bits to be cleared. A one in any position of the Bitmask parameter clears the corresponding bit in the TSR
Software Design 46
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, and Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Integration in EDK• When the interrupt generating device is connected to the processor interrupt pin, either
through an opb interrupt controller or directly, only the interrupt handler function must be developed (for example, you do not need to explicitly write code to set up the interrupt mechanism)
• In the Software Platform Setting dialog box, enter the interrupt handler function name for the corresponding device
• The Interrupt Handler Function section in Interrupt Handler panel provides an entry for the Interrupt function name associated with that peripheral
Software Design 48
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Libraries
• Xilinx provides three libraries– Math library (libm)
• The math library is an improvement over the newlib math library
– Standard C language support (libc)• The functions of this library are automatically available
– Xilinx C drivers and libraries (libxil)• Xilinx file support functions LibXilFile• Xilinx memory file system LibXilMfs• Xilinx networking support LibXilNet
Software Design 50
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 51
What is a BSP?
• Board Support Package (BSP):– A set of software modules combined into the libxil.a library– Allows you to use the low-level PowerPC processor core
functions• Enable, disable, and flush caches• Read/write time-base registers
– Allows you to use IP peripheral-device drivers• GPIO, IIC controller, PCI controller, UART
– Offers glue functionality to link code against standard libraries• Time, sleep• Files• Memory
Software Design 52
Hardware IP Device Drivers
• Driver– Provides an interface for the software to communicate with the
hardware– Designed to be portable across processor architectures and
operating systems
• Delivery format– Delivered as source code, allowing it to be built and optimized– Minimized assembly language– C programming language
Software Design 53
Outline
• Introduction• Software Settings
– Software Platform Settings– Compiler Settings
• GNU Tools: GCC, AS, LD, Binutils• Device Drivers
– Level 0, Level 1– PowerPC Processor: Exceptions, Sleep, Time– Integration in EDK
• Libraries• BSP
– Boot Files and Sequence
Software Design 54
PowerPC Processor Boot Files
• Files: boot.S, boot0.S, crt0.S, eabi.S– Application entry point at label _boot in
boot.S– _boot is single jump instruction to
_boot0 – _boot0 is a few instructions that do a
jump to _start in crt0.S– _start
• Clears .bss and .sbss sections• Sets up stack on an eight byte
alignment• Initializes time-base registers to zero• Optionally, enable FPU bit in MSR• Calls main()
– Calls _eabi to set R13 and R2 registers to point to .sdata and .sdata2 sections respectively
– Performs user tasks
Software Design 56
Review Questions
• What is included in a BSP?
• What are some of the differences between a Level 0 and a Level 1 driver?
Software Design 57
Answers
• What is included in a BSP?– IP drivers– Processor functions– Library functions
• What are some of the differences between a Level 0 and a Level 1 driver?– Size– Functionality– Ease of use
Where Can I Learn More?
• Tool documentation– Platform Specification Format Reference Manual
• Microprocessor Software Specifications• Microprocessor Driver Definition• Microprocessor Library Definition • EDK OS and Libraries Reference Guide LibXil File, Net, and Kernel • Processor IP Reference Guide• Xilinx Drivers
• Processor documentation– PowerPC Processor Reference Guide– PowerPC 405 Processor Block Reference Guide
• Support website– EDK Home Page: support.xilinx.com/edk