| Welcome to 3L Diamond! |
| Introduction |
| Licence |
| Conventions |
| Typefaces |
| Processors |
| Words, Bytes, and Octets |
| Links, Ports, and Wires |
| DMA |
| Makefiles |
| Changes from Previous Versions |
| Attached Processors |
| Processors |
| FPGA Processor Types |
| Wires |
| Variant Link Types |
| Link Reset Direction |
| Diamond FPGA |
| Custom Proctypes |
| Installation |
| Installation Folder |
| Prerequisites |
| Code Composer Studio |
| Available Processor Types |
| Processor Families |
| Multiprocessor Modules |
| FPGA Processor Types |
| Multi-Processor Systems |
| Dynamic Libraries |
| Link Types |
| Reserved Hardware Resources |
| Byte Order |
| Confidence Testing |
| Development Environments |
| Support Services |
| Sample Code |
| Start Menu |
| Distribution |
| Acknowledgements |
| Getting Started |
| Abstract Model |
| The Diamond Model |
| Processors, Wires, and Links |
| The Root Processor |
| The Host Processor |
| Tasks |
| Ports & Channels |
| Input & Output Ports |
| Virtual & Physical Channels |
| Multiple Inputs |
| CPU Tasks |
| Full & Stand-Alone Tasks |
| Arguments to main |
| Threads |
| FPGA Tasks |
| Configuring an Application |
| The Server |
| Structure of an Application |
| The Microkernel |
| Context-switching Performance |
| Scheduling |
| Routing Tasks |
| Stand-alone Applications |
| Building Diamond applications |
| Sequential Programs |
| Compiling |
| Compiler Option Switches |
| Calling the Compiler Directly |
| FAR Data |
| Using Assembly Language |
| Linking |
| Using Linker Command Files |
| Linker Options |
| Calling the Linker Directly |
| Libraries |
| IDE Libraries |
| Locating Files |
| Configuring |
| The Configuration File |
| Calling the Configurer |
| Using the IDE |
| Running |
| Running from a Command Prompt |
| Running from the IDE |
| Command-line Arguments |
| Parallel Programs |
| One User Task |
| Configuration |
| Building the Application |
| More than One User Task |
| Configuring for More than One Task |
| Declaring Tasks |
| Making Connections between Tasks |
| Assigning Tasks to Processors |
| Inter-Task Communication |
| Building a Multi-Task Application |
| Shutting Down Cleanly |
| Scheduling |
| Multiprocessor Applications |
| Configuring Multi-Processor Applications |
| Links and Channels |
| Virtual Channels |
| Physical Channels |
| Physical Channel Restrictions |
| WIRE Usage by Virtual Channels |
| Error Detection on Virtual Channels |
| Multiple Inputs |
| Multi-Threaded Tasks |
| Creating Threads |
| Waiting for Threads to Finish |
| Access to Shared Data |
| Synchronisation Using Semaphores |
| Synchronisation Using Channels |
| Threads and Standard I/O |
| Synchronizing Server References |
| Threads versus Tasks |
| General Reference |
| The Configurer |
| Invoking the Configurer |
| Options |
| Errors |
| General Concepts |
| Processor Types |
| Memory Use |
| Logical Memory Areas |
| Physical memory Areas |
| Memory Allocation |
| DATA attribute |
| Separate Stack and Heap |
| The OPT Attribute |
| Explicit Placement of Logical Areas |
| Logical Area Sizes |
| Restrictions on Network Configuration |
| Restrictions on Physical Channels |
| Configuration Language |
| Standard Syntactic Metalanguage |
| Low-level Syntax |
| Identifiers |
| String Constants |
| Numeric Constants |
| Statements |
| PROCESSOR statement |
| TYPE attribute |
| ATTACH attribute |
| CACHE attribute |
| UNCACHED attribute |
| ROOT attribute |
| CLOCK attribute |
| KERNEL attribute |
| BOOT attribute |
| AVOID attribute |
| BUFFERS attribute |
| L1D attribute |
| L1P attribute |
| Heap attribute |
| WIRE statement |
| NOBOOT attribute |
| TASK statement |
| Port specifiers |
| INS attribute |
| OUTS attribute |
| FILE attribute |
| Logical Area Attributes |
| OPT attribute |
| PRIORITY attribute |
| URGENT attribute |
| CONNECT statement |
| Connection Type attribute |
| SHORT attribute |
| PLACE statement |
| PROCTYPE statement |
| MAP attribute |
| MEM attribute |
| CLEARMEM attribute |
| BIND statement |
| DEFAULT statement |
| UPR statement |
| OPTION statement |
| The Server |
| Starting the Server |
| Selecting your Board |
| Selecting an Application |
| Running the Application |
| Stopping the Application |
| Page Mode |
| Pausing Output |
| Clearing the Screen |
| Input |
| Options |
| View/Options/General Tab |
| View/Options/Standard I/O Tab |
| View/Options/Monitoring Tab |
| View/Options/Advanced Tab |
| Shortcut Keys |
| Help Information |
| Server Version |
| Advanced Server Features |
| Error Messages |
| Board Properties |
| Asynchronous Input |
| Reconnecting the Server |
| Explicitly Resetting the Network |
| Internal Details |
| Loading Applications |
| Server Structure |
| Cluster Drivers |
| Locating Clusters |
| Cluster Operation |
| Presentation-layer Drivers |
| Link-interface Drivers |
| Extending the Server |
| Building Your Own Cluster |
| Accessing Your Cluster from a CPU |
| The Core Interface (C) |
| Writing a Board Interface |
| Replacing the Server GUI |
| The Communication Object |
| Replacing the Server |
| 3L Command |
| Command Syntax |
| Functions |
| Targets |
| Adding Your Own Commands |
| Command File |
| Function Name |
| Operations |
| Macros |
| Example |
| Diamond Libraries |
| Macros |
| Format of Synopses |
| Notes |
| Headers |
| Alt Package <alt.h> |
| Channels <chan.h> |
| Character Handling <ctype.h> |
| Common Definitions <stddef.h> |
| Date and Time <time.h> |
| Diagnostics <assert.h> |
| Errors <errno.h> |
| Events <event.h> |
| General Utilities <stdlib.h> |
| String Conversion Functions |
| Pseudo-Random Sequence Generation Functions |
| Memory Management Functions |
| Communication with the Environment |
| Searching and Sorting Utilities |
| Integer Arithmetic Functions |
| Multibyte Character Functions |
| Multibyte String Functions |
| Input/Output <stdio.h> |
| Stream I/O |
| Text and Binary |
| Standard Streams |
| Operations on Complete Files |
| File Access Functions |
| Formatted Input/Output Functions |
| Character Input/Output Functions |
| Direct Input/Output Functions |
| File Positioning Functions |
| Error Handling Functions |
| Macros |
| Internal Timer <timer.h> |
| Limits <float.h> and <limits.h> |
| Links <link.h> |
| Localisation <locale.h> |
| Mathematics <math.h> |
| Treatment of Error Conditions |
| Trigonometric Functions |
| Hyperbolic Functions |
| Exponential and Logarithmic Functions |
| Power Functions |
| Nearest Integer, Absolute Value and Remainder Functions |
| Nonlocal Jumps <setjmp.h> |
| Semaphores <sema.h> |
| Signal Handling <signal.h> |
| String Handling <string.h> |
| Copying Functions |
| Concatenation Functions |
| Comparison Functions |
| Search Functions |
| Miscellaneous Functions |
| Synchronising Access to the Server <par.h> |
| Threads <thread.h> |
| Thread return codes <errcode.h> |
| Variable Arguments <stdarg.h> |
| Library Index |
| A |
| B |
| C |
| chan... |
| D |
| E |
| F |
| G |
| H |
| I |
| is... |
| L |
| M |
| N |
| O |
| P |
| par... |
| Q |
| R |
| S |
| str... |
| T |
| thread... |
| U |
| V |
| W |
| _ |
| Diamond FPGA |
| FPGA Channels |
| Timing Example |
| Task Interface |
| FCD File |
| Timing Constraints |
| Task Clock |
| Task Ports |
| Conventions |
| Package File |
| External Pins |
| A Design Example |
| Firmware Domponent Description |
| Package file |
| Implementation |
| Clock domains |
| Synchronization Between Clock Domains |
| Syntax |
| Examples |
| Using Clock Domains |
| Implementation of Clock Domains |
| Designing FPGA Tasks |
| System Generator |
| Required Signals |
| Channels |
| Driving Pins |
| Creating the Task |
| Importing the Task into the IDE |
| System Generator Configuration |
| Synthesizing the Task with XST |
| Verilog |
| Example |
| HDL Simulation |
| Simulating a Task |
| Simulating a Stand-alone FPGA |
| Simulating an FPGA Attached to a DSP |
| Advanced FPGA Features |
| Loading Via an FPGA |
| HDL Code Structure |
| Timing Constraints Syntax |
| Analysing the Results of the Compilation |
| Compilation Options |
| Global Bus |
| Special Logic |
| SMT363XC2 Net50+ Chip |
| TI C6x EMIF Interface |
| FPGA Pinout Information |
| Advanced Diamond Features |
| Kernel Modules |
| Interrupt Handling |
| External Interrupts |
| Interrupt Processing Flow |
| High-level Interrupt Handlers |
| Communicating with the Kernel |
| Enabling and Disabling Global Interrupts |
| Low-level Interrupt Handlers |
| Handler structure |
| Attaching a low-level handler |
| Taking interrupts |
| Low-level handler context |
| Accessing the kernel |
| Example of a Handler |
| EDMA |
| EDMA Channel Availability |
| EDMA events used by Diamond |
| SC6xEDMA Functions |
| SC6xEDMAChannel Functions |
| EDMA3 |
| EDMA_REG |
| EDMA Functions |
| QDMA |
| Principles of Operation |
| Using QDMA |
| QDMA Interface |
| QDMA Channel |
| QDMA Transfers |
| Accessing QDMA Registers |
| Releasing QDMA Resources |
| QDMA Functions |
| A QDMA Example |
| IDE |
| The Workspace |
| The Welcome Screen |
| Basic Operation |
| The Workbench |
| Diamond Buttons |
| A Simple Application |
| Creating Tasks |
| Stack and Heap |
| Building and Running |
| Clean |
| Libraries |
| Dependencies |
| Projects and Archives |
| Processors |
| Adding Processors |
| Defining Root |
| Attached Processors |
| Order of Attachment |
| DSP Options |
| FPGA Options |
| Tasks |
| Placing Tasks |
| Building Tasks |
| Task Properties |
| DSP Task Options |
| FPGA Task Options |
| Channels |
| Naming Ports |
| Connecting Ports |
| Running the Example |
| Wires |
| Objects |
| Technologies |
| Importing and Exporting |
| Importing a Project |
| Exporting to MAKEFILE |
| Preferences |
| Examples |
| Example-1 |
| Example-2 |
| Example-3 |
| Example-3b |
| Example: Addone |
| Example: Correlator |
| Example: SDR8036 |
| Example: SDR8246 |
| Diamond TCP/IP Stack |
| TCP Examples |
| Example: Simple Client |
| Example: Simple Server |
| Example: Bandwidth Test Server |
| Example: Bandwidth Test Client |
| UDP Examples |
| Example: Simple Receive |
| Example: Simple Send |
| Example: Bandwidth Test Recv |
| Example: Bandwidth Test Send |
| Advanced Examples |
| Example-4 |
| Example-6 |
| Example-7 |
| Example-8 |
| Example: Interrupt-1 |
| Example: Interrupt-1b |
| Example: Interrupt-2 |
| Example: Interrupt-2b |
| Example: Interrupt-3 |
| Example: Interrupt-3b |
| Sundance Features |
| Sundance TIMs |
| Link Devices |
| Comport Links |
| SDB Links |
| RSL Links |
| SRIO Links |
| Localization on the Board |
| SMT148FX |
| SMT338VP |
| SMT351T |
| SMT362 |
| SMT365E |
| SMT368A |
| SMT368, SMT368-12 |
| Link Connection Restrictions |
| Performance |
| Connecting Channels to Links |
| Application Loading |
| Loading from the Host |
| Load Checking |
| Loading from ROM |
| ROM |
| Board Services |
| Accessing the Board Services Interface |
| Mailboxes |
| Carrier-board SRAM |
| The High Speed Channels |
| Use of Mailboxes |
| SRAM |
| DSP Function Codes |
| Host Replies |
| Protocol |
| DSP Functions |
| Example |
| The Global Bus |
| Accessing PCI Registers |
| Packaged Services |
| Status Codes |
| APP2COFF |
| Constraints |
| Using APP2COFF |
| Loading the Application |
| App2Coff Error Messages |
| TCP/IP |
| Ethernet Connection |
| Memory Use |
| Initialization |
| Berkeley sockets API |
| Helper Functions and Macros |
| Examples |
| Basic Examples |
| Bandwidth Tests |
| General |
| Default Clock Domains |
| FPGA Framework Resources |
| SMT362 |
| SMT338-VP |
| Xilinx Options for RSLs |
| Special Logic |
| Register Block |
| Global Bus |
| EMAC SMT362 |
| SATA_DSP387G |
| Debugging DSPs |
| Debugging with Code Composer |
| Notes |
| Troubleshooting |
| My application does not run |
| Compilation, Linking, Configuration |
| compiler cannot be found |
| compiler cannot find header files |
| configurer refuses to build application |
| relocation errors |
| wrong version of software executed |
| Complete Failure at Run Time |
| application hangs or runs wild |
| application will not load or start |
| communication with host disrupted |
| processor locks up |
| server hangs or runs wild |
| ANSI Functions |
| data in file seem to be corrupt |
| EDOM set in errno |
| end of file corrupt or absent |
| ERANGE set in errno |
| file position is wrong |
| I/O behaves unexpectedly |
| NULL returned when allocating memory |
| output does not appear or is corrupt |
| time function returns wrong time |
| variable corrupt |
| Parallel and Other Functions |
| channel transfer fails |
| link functions do not work |
| thread cannot see changes to shared data |
| thread hangs |
| thread_new does not return |
| thread_new returns NULL |
| <timer.h> functions do not work |
| variable corrupt |
| Glossary |
© 2009 3L Ltd