From 2acb54884509a429fbddf62438c72fb07c0c2c20 Mon Sep 17 00:00:00 2001 From: bje Date: Fri, 3 Aug 2001 03:15:32 +0000 Subject: [PATCH] * new documentation. --- sid/doc/sid-guide/Makefile | 28 + sid/doc/sid-guide/book-sid.sgml | 1939 +++++++++++++++++++++++++++ sid/doc/sid-guide/images/name-structure.jpg | Bin 0 -> 9166 bytes sid/doc/sid-guide/images/sid-diagram.jpg | Bin 0 -> 22226 bytes 4 files changed, 1967 insertions(+) create mode 100644 sid/doc/sid-guide/Makefile create mode 100644 sid/doc/sid-guide/book-sid.sgml create mode 100755 sid/doc/sid-guide/images/name-structure.jpg create mode 100644 sid/doc/sid-guide/images/sid-diagram.jpg diff --git a/sid/doc/sid-guide/Makefile b/sid/doc/sid-guide/Makefile new file mode 100644 index 0000000000..a98e046c4b --- /dev/null +++ b/sid/doc/sid-guide/Makefile @@ -0,0 +1,28 @@ + +all: + @echo "make targets:" + @echo + @echo "check: SGML correctness check" + @echo "normalize: SGML canonical formatting" + @echo "pdf: Create PDF" + @echo "html: Create HTML" + +check: + sgmlnorm -e book-sid.sgml > /dev/null + +normalize: + mv -f book-sid.sgml book-sid.sgml.bak + sgmlnorm -d -n book-sid.sgml.bak > book-sid.sgml && rm -f book-sid.sgml.bak + +pdf: + rm -rf PDF + mkdir PDF + db2pdf book-sid.sgml + mv book-sid.pdf PDF + rm -f book-sid.out + +html: + rm -rf HTML + mkdir HTML + db2html -o HTML book-sid.sgml + rm -rf book-sid diff --git a/sid/doc/sid-guide/book-sid.sgml b/sid/doc/sid-guide/book-sid.sgml new file mode 100644 index 0000000000..f91456a671 --- /dev/null +++ b/sid/doc/sid-guide/book-sid.sgml @@ -0,0 +1,1939 @@ + + + +SID Simulator User's Guide +$Date$ + +Red Hat, Inc. +
sid@sources.redhat.com
+
+ +2001 +Red Hat, Inc. + +$Date$ + +This material may be distributed only + subject to the terms and conditions set forth in the Open Publication + License, V1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). + + Distribution of substantively modified versions of this document is + prohibited without the explicit permission of the copyright holder. + + Distribution of the work or derivative of the work in any standard (paper) + book form for commercial purposes is prohibited unless prior permission is + obtained from the copyright holder. + + +
+ +Table of Contents + + +Introduction +The SID simulator consists of an engine that loads and connects simulated + components, based on a configuration file, and runs simulation sessions. + The SID Simulation Toolkit provides a set of ready-made components that + you can configure to create your own simulation environment. + +Benefits of Using the SID Simulator +In recent years, there has been notable growth in the use and the application + of embedded systems. However, the improvements to the design and testing + tools have not kept pace with the rapid development of customized hardware + parts. This simulation tool has been designed to help close this gap and + meet the needs of embedded software developers. The simulation of the target + environment enables embedded software developers to analyze and test their + software, even in the absence of the physical hardware. +In many respects, the virtual target simulation enables a better development + environment, since you can analyze a system design's functionality and performance + in ways that are not possible on the physical hardware. +There are three key benefits that can be gained from using this tool: + + + +With a simulated target, the debugger can see different states + of the software that cannot be viewed on the hardware. Consequently, testing + on the simulator tool is often faster and more flexible that performing similar + software testing on the physical hardware. + + +Using the SID simulation environment, you can gain more insight + into the functional behavior of the software on your system. This results + in a shortened time-to-market. + + +Testing on a simulated target allows you to use system building + blocks to explore alternative solutions before the hardware components are + created. This can reduce the overall cost of the system implementation. + + +However, in order to get the full value of the simulation tool. You + do need to understanding the differences between the actual hardware and + virtual target simulation environments. + + +The Simulator Toolkit +Designing an embedded system is the process of implementing a + desired functionality by using a set of physical components. Using + a similar process, the SID Simulation Toolkit enables you to create + a virtual simulation environment using simulated components, even + when physical components are unavailable. + +Whether you are working with physical components or on a + virtual simulation environment, your system can be viewed as a + collection of simpler subsystems. In other words, the system is + made up of components, with a list of methods or rules that tie all + the pieces together in order to create the desired + functionality. +The virtual simulation model that you use to test your + embedded system software needs to be a natural one in order to help + you debug your design. The virtual simulation model must be + flexible so that you can choose different models in the different + phases of the development process. The simulation of the model + should also accommodate different levels of accuracy, such as + functional and cycle-accurate. With a functionally accurate + simulator, you can compile and execute the design model directly on + a host machine without paying much attention to the simulation + time. With a cycle-accurate simulation, you can execute the design + model in a timed fashion. + + +About this Manual +This manual is a guide to the SID Simulator. It is a + reference guide for users who want to use and configure the + simulation components provided by Red Hat. +The manual is organized according to how an user would first + approach using the SID tool by providing information about the + overall SID architecture; how to run, use and customize the SID + tool for your specific requirements, and how to gather information + from the running system. + +SID Architecture +This release contains the tools and capabilities to + customize the configuration of the virtual simulation model by + providing a library of existing components; a documented interface + to enable the designer to add other components. All SID components + have been designed to enable pluggability into the SID framework. + Each component exports a set of pines and bus connectors and + therefore has no knowledge of the other components that are + connected to it. + + +SID Configuration File +The SID configuration file is an editable file that + configures a SID simulation run. The configuration file defines + the simulation contents, topology, and initial state. We supply + several configuration files that simulate selected target + boards. +For information on how to create or modify a + SID configuration file, refer to >. + + +SID Component Library +SID comes with a number of components, each of which can be + modified, configured, or connected to any other + independently. They are self-contained, and individually + documented. Existing components include: + + + +CPUs, such as hw-cpu-arm7 or hw-cpu-m32r/d + + +disks, such as hw-disk-ide + + +rom-monitors or low-level operating systems, such as sw-gloss-arm_angell + + +glue, such as hw-glue-bus-mux or hw-glue-probe-bus + + +interrupts, such as hw-interrupt-arm_ref + + +LCDs, such as hw-visual-lcd or hw-lcd-char-display + + +binary loaders, such as sw-load-elf + + +mappers, such as hw-mapper-basic + + +memory, such as hw-memory-ram_rom-basic + + +MMUs, such as hw-remap_pause-arm_ref + + +UARTs, such as hw-uart-ns16550 + + +parallel ports, such as hw-parport-ps_2 + + +RTCs, such as hw-rtc-ds1x42 + + +timers, such as hw-timer-arm_ref + + +audio codecs, such as hw-audio-sid + + +console IO facilities, such as sid-io-stdio or sid-io-socket + + +For information on how to understand the SID component + documentation, refer to >. +Adding new components is straightforward and does not + require any modifications to SID. For more information on the SID + Component Library, refer to the SID Component Developers Kit + Reference Guide. + + +Using SID +SID is packaged as a standalone command-line program that + reads and executes a configuration file (see >). A typical session with SID + begins with compiling or assembling code for the simulated system + to run, using standard a cross-development toolchain, and proceeds + through loading the target binary into the simulation environment, + stepping the simulator through a supervised execution, shutting + the simulation down and analyzing the results. While running a + simulation, SID can interface with POSIX standard I/O, a TK-based + visual simulation monitor, the gdb debugger, + and the gprof profiler. + +For information on invoking, customizing, and interfacing + with SID, refer to >. + + + + + +The <PRODUCTNAME>SID</PRODUCTNAME> Architecture +A simulated environment provides embedded software developers + with a number of advantages over a typical hardware model. Working + in a simulated environment provides a rapid way to examine the + complex interactions of the embedded software on the simulated + hardware system. + SID is a simulation framework for + supporting embedded systems software development. It features a + modular architecture of loosely-coupled software components that + interact with each other to simulate the behavior of physical + hardware parts. This modularity allows users or programs to monitor + or interact with a running simulation. +SID insists on a decomposition of a + simulation into independent components that share a fixed low-level + API, which defines all possible inter-component communication + mechanisms. The API is small and general, on which application- or + device-specific behaviors are layered. +SID typically reads configuration + files to create and manage the web of low-level connections between + all needed components. A configuration file may spell out the model + of an entire hardware development board, or may add instrumentation + to an existing model. + +Component Types + +components +types of + +The SID package includes many types of components. The + component types fall into the following categories: + + +hardware model + + +software model + + +bridge + + +special function + + + +Hardware Model Components + +components +hardware model type + +A hardware model type component simulates some sort of + target hardware device, so it tends to connect to other components + through hardware-oriented connections. +Examples include: + + +a CPU, hw-cpu-arm7t + + +a hard drive interface, hw-disk-ide + + + an address space decoder/mapper, hw-mapper-basic + + + +memory, hw-memory-ram/rom-basic + + +a teletype, hw-visual-tty + + +These tend to be the busiest components in a running + simulation. + + +Software Model Components + +components +software model type + +A software model type component crosses the + hardware-software abstraction boundary by emulating the operation + of target software. +Examples include: + + +a ROM monitor, sw-gloss-arm/angel + + +a debugging stub, sw-debug-gdb + + +profiling instrumentation, sw-profile-gprof + + +an executable loader, sw-load-elf + + + + + +Bridge Components + +components +bridge type + +A bridge type component crosses simulation implementation + language boundaries by mapping between a different API and the SID + low-level API. It allows a foreign simulation system to + impersonate a SID component, and sometimes vice versa. +Examples include: + + +a Tcl/Tk bridge, + bridge-tcl + + + + +Special Function Components + +components +special function type + +A special function type component carries out tasks related + to the infrastructure of the simulation, or crossing the + target/host abstraction boundary. +Examples include: + + +an event scheduler, sid-sched-sim + + +a configuration manager, sid-control-cfgroot + + +a host network interface, sid-io-socket + + + + + +Communication Between Components + +components +communication between + + +The SID API provides only a few ways for components to + communicate with each other. Hardware type components tend to use + only the pin and bus + mechanisms, and other types also use the attribute and relation + mechanisms. All of these communication mechanisms may be set up in + a SID configuration file. + +The SID pin mechanism allows a component + to send or receive broadcast events to or from connected + components. Each event carries a small integer value as a + parameter; how this value is interpreted is up to the involved + components. This is an abstraction of individual electrical signal + lines that connect hardware parts, modelling a level transition by + a function call. A component may maintain several different pin + connection networks. Typically, clocking and initialization or + shutdown signals are distributed through dedicated pin + connections. +The SID bus mechanism allows a component + to read or write addressable memory or registers of another + component. This is an abstraction of the address, data, and control + buses that connect hardware parts together, modelling protocols and + signals by a function call from a component (a bus master) to + another (a bus slave). A bus mastering component may have several + named accessors. Each may point to a bus slave component's named + bus. +The SID attribute mechanism allows a + component to read or write named internal states of another + component. These states are considered to be opaque strings and may + represent anything from hexadecimal values of registers through + configuration variables to a binary dump of the entire state of the + component. Attributes may be categorized, so that standard + formatting and interpretation may be applied to groups of + attributes. + The SID relation mechanism allows a + component to make any SID API call to another component. A + component that supervises others has a specific named relationship + to them. A supervisor's relation stores pointers to the supervised + components. + + +System Organization + +system organization + +One may consider the fixed low-level SID API as a socket, or + a standardized connector between simulated components. Think of SID + components as integrated circuits that plug into these sockets and + configuration files as the circuit wiring that connects the sockets + to each other. To simulate an entire board, many different + components will be needed, and their connections need to be set up + just right for SID to work. +While the configuration process is described in detail in a + later section(see >), + there are common patterns of configuration in typical SID + simulation runs. These sketches outline some of these patterns. + + +Main Loop, Schedulers + +main loop + + +schedulers + + +In a running SID simulation, activity occurs in a single + thread. It passes from a central top-level loop down through + components and back, by calling SID API functions. More + specifically, the top level loop signals each iteration on a + designated pin. Each component that connects a pin to it will be + invoked to do some work. This work may include internal + calculations, changing attributes, or could involve making pin- or + bus-related function calls to other components. Then those + components do some work, and so on. When these work units are + complete, control returns to the top level loop, which then goes + around for another iteration. +There also exist control pins that cause and indicate the + initialization and shutdown of a simulation run. This allows + components to monitor or effect changes to the top-level + looping. For example, simulated CPU executes the target program's + exit() system call, the component that + interprets system calls will signal this event on a pin. If that + pin is connected to the main loop's shutdown control pin, the + simulation will shortly end. + +Many components may wish to regulate the rate at which + control is passed to them. They may have nothing to do at times + (like an idle DMA controller). Some may wish to act at + independent frequencies (like a CPU and a timer). Several special + function components exist to keep simulation time and dispatch + events to other components only at intervals of interest: these + are the scheduler (sid-sched) + components. +There is usually one host-time scheduler and one target-time + scheduler in a simulation run. Both are connected to the top level + activity pin. Components that interface between the host and the + simulated target often use the host-time scheduler + (sid-sched-host), so they get activity + signals at rates related to passing wall-clock time. Components + that model the hardware of the target system are generally + connected to the target-time scheduler + (sid-sched-sim), so target activity may be + suspended/resumed en masse by a debugger. + + +Peripherals, Memory Mapping + +peripherals + + + memory mapping + +A typical SID configuration one or more CPU models, some + banks of memory, and several peripherals. When the CPU executes a + load or store instruction, the correct SID component must be + addressed to carry out the memory access. This decoding operation + is performed by an intermediary: a mapper component that is + configured with the target board's memory map. +The CPU component is usually connected to the slave side of + the mapper, and the master side of the mapper is connected to + multiple slave peripheral components. Other bus master components + may also connect to the mapper similarly. When a bus master makes + a read or write call, the interposed mapper component decodes the + address, and passes the read or write call to the specific + component being addressed. +In effect, the mapper transforms the CPU's view of the + address space to peripheral-centric views. This way, neither the + CPU nor the peripheral is aware of the target board's memory map: + this knowledge is encapsulated in a mapper. +There may be several mapper components in a simulation + run. This is appropriate if there are separate instruction and + data address spaces for a Harvard architecture CPU, or if address + spaces are nested, or partly shared between multiple + masters. + + +CPU, Monitor Emulation, Debugger Interface + + + + + +Working with the <PRODUCTNAME>SID</PRODUCTNAME> Configuration File + + +configuration file +working with + + +modifying the configuration file + +To create a simulated system, you need to select the + components you want to use, describe their properties, and specify + how they should connect together. All of this information is + specified in the simulator configuration file. +The simulator configuration file consists of a series of + commands. The instructions are interpreted by a special + SID component with type + sid-control-cfgroot. This component is always + present in the SID main-line program sid or + sid.exe . + +The Configuration File Contents + +configuration file +contents of + +The configuration file consists of three major sections: + + +A listing of component libraries, which are to be dynamically + loaded libraries + + +A set of commands to instantiate any required SID components + + +A set of commands that connect and configure the components. + + + +The configuration process consists of reading each command + from a configuration file, from top to bottom. If any lines are not + recognized as syntactically valid commands, or if any commands fail + (see below), the configuration process continues, but the + simulation will abort before entering the main loop. Error messages + are produced in these cases. + +Technical Notes + In a way, the simulator configuration language corresponds + to the common low-level API of SID + components. This API is described in the Component Developers Kit + Reference manual. Each configuration command maps to a small + number of low-level SID API calls. Any + SID component could make the same calls + at any time during a run. This means that configuration is not + really a special stage of SID + processing, but potentially an ongoing activity to continually + change the running system. This also means that any particular + SID configuration file could be + supplanted by SID components that + perform the work by making the equivalent + SID API calls. + + + +Creating a New Configuration File + +configuration file +creating new + +The configuration file can have eight types of commands, + interspersed with blanks and comments. Commands take a number of + whitespace-separated arguments. Each parameter is a string, + optionally enclosed in double-quotes. Comments start with "#" and + extend until the end of line. + + +The load command registers + component libraries. These are dynamically-loaded libraries that + contain a collection of related SID + component types. Each component type has a unique structured name + that describes its type of functionality. Names are typically + structured to describe the component's role. For example: + + + +The new command instantiates + components of a given type and assigns unique reference names for + the new instances. Other commands use these names to reference + the component instances. + + +The set, + connect-pin, , + disconnect-pin, connect-bus, + disconnect-bus, and relate + commands configure and manage connections between component + instances. + + + + +Command Syntax + +syntax +of configuration + file commands + + + +configuration + file + command syntax + +The syntax for each command type follows. + +The <COMMAND>load</COMMAND> Command + +load command + + +Syntax +The syntax is: LIBRARYFILE + LIBRARYSYMBOL +where: + + + The LIBRARYFILE parameter is a file + name. + + +The LIBRARYSYMBOL parameter is a symbol + name. + + +For a list of appropriate LIBRARYFILE and LIBRARYSYMBOL names, refer to the component reference information + on each component. + +<COMMAND>load</COMMAND> + load + libcache.la cache_component_library + load libmemory.la memory_component_library + + + + +Function +Registers a component library. Loads the shared library + from the file named by the first string. Enumerates the available + component types by searching the library for the + sid::component_library symbol named by the + second string. Add all its component type names to the catalog of + known types for subsequent new commands. Nearly all SID + components are packaged in shared libraries. + + +Technical Notes +The LIBRARYFILE parameter is + interpreted as a filename. It may be the name of a Windows DLL or + the name UNIX shared object (.so) file, + although libtool archives ending with the extension + .la are preferred. The file must exist and + be loadable on the host platform using normal library loading + routines like dlopen(). If the filename is + not absolute, several paths are searched. Among these are a + colon-separated UNIX-style directory list given in the SID_LIBRARY_PATH environment variable, the + PATH environment variable in standard platform + notation, and the installation root directory for SID given by + the SID_EXEC_PREFIX environment variable. + +The LIBRARYSYMBOL parameter is the + name of an exported data symbol in the shared library. It must be + resolvable using a standard function like + dlsym() and refer to an initialized instance + of the sid::component_library structure + that lists the low-level entry points to the component factory + functions. +The load command + checks the magic version number in the structure against the + number compiled into the sid main-line program. If the shared + library is deemed compatible, the list of component types that it + contains are obtained, using the + sid::component_library::list_component_types() + call, and registered internally. From this point, any + further request to instantiate a component type whose name is on + that list will be directed to this shared library. The special + string -static- is also understood as a + LIBRARYFILE parameter. It is used in cases + where sid::component_library structures are specially linked + directly into the SID main-line program. This is an advanced + technique and is not discussed further. Referring to an invalid + LIBRARYFILE or + LIBRARYSYMBOL will cause an error. + + + +The <COMMAND>new</COMMAND> Command + +new command + + +Syntax +The syntax is:new + TYPENAME REFERENCEwhere: + + +The TYPENAME parameter is the component + type. + + +The REFERENCE parameter is the reference + name of the new component instance. + + + +<COMMAND>new</COMMAND> +new + hw-glue-sequence-8 init-sequence +new sw-debug-gdb gdb-interface + + + +Function +Instantiates a new component. The first string is the + component type--one of those made available by a prior load + command. The second string is the freely chosen reference name + for the new component instance. That name must be unique in a SID + run. It is possible to instantiate the same type of component + multiple times, but each instance must have a unique reference + name. A sid-control-cfgroot type component + is automatically instantiated and given the reference name main, + so that name is reserved. Do not use an unknown + TYPENAME, or a duplicate + REFERENCE ; this will cause an error. + + + +Technical Notes +If this command is successful, it will cause the + sid::component_library::create_component() + hook to be called on the component library that has last + registered TYPENAME. + + + +The <COMMAND>connect-pin</COMMAND> and <COMMAND>disconnect-pin</COMMAND> + Commands + +connect command + + +disconnect command + + +Syntax +The syntax is: connect-pin + COMPONENT1 PIN1 + DIRECTION COMPONENT2 + PIN2 disconnect-pin COMPONENT1 + PIN1 DIRECTION + COMPONENT2 + PIN2where: + + + +The COMPONENT1 and COMPONENT2 + parameters are reference names of existing component instances. + + + +The PIN1 and PIN2 + parameters are pin names belonging to COMPONENT1 and COMPONENT2, respectively. + + +The DIRECTION parameter + is either " ->", "<-", + or "<->", indicating the directionality of + the pin connection. The first two establish or destroy a single + pin connection in opposite directions, and the last establishes + or destroys two independent connections in the opposite + directions. The arrow shape suggests the direction of + signalling: output to input. + + + +<COMMAND>connect-pin</COMMAND> and <COMMAND>disconnect-pin</COMMAND> +connect-pin main perform-activity -> host-sched advance +connect-pin cpu trap <-> gdb-interface trap +disconnect-pin host-sched advance <- main perform-activity + + + + +Function +Adds or removes a pin connection between a pair of + component instances. Each SID component generally defines its + own set of pins. These may be input and/or output. See the + reference documentation for the list for any particular component + type. It is possible to connect many input pins to a given + output pin, and it is also possible to connect many output pins + to a given input pin. It is an error to make the same pin-to-pin + connection twice, or to connect an input-only and an output-only + pin in the wrong direction. Similarly, it is an error to try to + remove a nonexistent connection. + + +Technical Notes + The connect-pin command causes a + sid::component::find_pin() call on the + component and pin on the input side of the arrow, and passes the + result to a sid::component::connect_pin() + call on the output side of the arrow. (The bidirectional + <-> case simply repeats this with the two + sides exchanged.) The disconnect-pin command + does the same, except it uses + sid::component::disconnect_pin() instead. + With a pin connection, the component on the output side of the + arrow can make sid::pin::driven calls to the + given input pin. + + + +The <COMMAND>connect-bus</COMMAND> and <COMMAND>disconnect-bus</COMMAND> + Commands + +connect-bus command + + +disconnect-bus command + + +Syntax +The syntax is:connect-bus + MASTER ACCESSOR + SLAVE + BUS disconnect-bus MASTER ACCESSOR SLAVE BUSwhere: + + + +The MASTER and SLAVE + parameters are reference names of existing component instances. + + +The ACCESSOR parameter is the name + of an accessor of the MASTER component. + + +The BUS parameter is the name of a + bus of the SLAVE component. + + + +<COMMAND>connect-bus</COMMAND> and + <COMMAND>disconnect-bus</COMMAND> +connect-bus angel target-memory bus access-port + +disconnect-bus cpu insn-memory + bus access-port + + + +Function +Adds or removes an accessor-to-bus connection between two + components. Each SID component + defines its own set of buses and accessors. See the component + reference sections for the list for any particular component + type. + + +Technical Notes + The connect-bus command causes a + sid::component::find_bus() call on the + SLAVE component for the BUS name, and will pass the result to a + sid::component::connect_accessor() call on + the MASTER component for the ACCESSOR name. The disconnect-bus + command does the same, except it uses + sid::component::disconnect_accessor() + instead. With a bus connection, the + MASTER component can make + sid::bus read or write calls via the given + accessor to the given bus of the SLAVE + component. + + + + +The <COMMAND>set</COMMAND> Command + +set command + + +Syntax +The syntax is:set + COMPONENT ATTRNAME + ATTRVALUEwhere: + + + +The COMPONENT parameter is a reference + name of an existing SID component instance. + + +The ATTRNAME parameter is the name + of an attribute defined by that component. + + +The ATTRVALUE parameter is the value + string. + + + +<COMMAND>set</COMMAND> +set cpu r0 0x1ea90e42 +set angel command-line "sid hello world" + + + +Function +Sets an attribute value. Each + SID component generally defines its + own set of attributes and rules for interpreting their + values. See the component reference sections for the list for any + particular component type. + + +Technical Notes +The component instance will receive a + sid::component::set_attribute_value() call + with verbatim copies of these two parameters. If the sid::component::set_attribute_value() call fails + (returns something other than + sid::component::ok ), the + configuration process will fail. + + + +The <COMMAND>relate</COMMAND> and <COMMAND>unrelate</COMMAND> Commands + + +relate + command + + +unrelate + command + + +Syntax +The syntax is: relate + COMPONENT1 RELATIONSHIP + COMPONENT2 unrelate COMPONENT1 + RELATIONSHIP COMPONENT2where + + +The COMPONENT1 and COMPONENT2 + parameters are reference names of existing component instances. + + + + The RELATIONSHIP parameter is the + name of a component relationship supported by COMPONENT1. + + + + +<COMMAND>relate</COMMAND> and + <COMMAND>unrelate</COMMAND> +relate + gdb-interface target cpu +unrelate cpu coprocessor cop + + + +Function +Adds or removes a supervisory relationship between the + named components. Each SID component may define its own set of + component relationships. See the component reference + sections for the list of relationships it supports. It is + an error to create duplicate relationships, for example by + repeating the same command. + + +Technical Notes +This command causes a SID component API call to be placed + on COMPONENT1, supplying + RELATIONSHIP and COMPONENT2. For more information on the SID component + API, refer to the Component Developer's Kit Reference manual. + With a component relationship, COMPONENT1 + is able to make any low-level SID API call on COMPONENT2. + + + +Lexer Issues + +configuration + file +lexer + + +configuration + file +comments in + +The configuration file may contain blank lines. Comments + begin with the # character and terminate at + end-of-line. Blank lines and comments are ignored during parsing. + All commands take some arguments. All arguments are strings. A + string is a white-space-separated sequence of printable + (isprint()) characters. Strings may be + enclosed in double quotes. If started with double-quotes, all + characters between opening and closing quotes are included in the + string. Backslash characters ( "\" ) escape double-quotes and + backslash characters, in the usual C convention. The string + \n is interpreted as a C \n. + Without double-quotes, strings are taken to be + whitespace-separated words. A # character + found where a string is expected is interpreted as a comment to + end-of-line, and the search for the next string found is returned + instead. + + + + +How to Understand Component Reference Information + +component reference + information +how to read + + Every SID component has an associate text file that documents + the component according to a standard template. The template is + meant to include enough information for you to use the component in + a simulation run. It includes a basic functional description and + detailed low-level configuration information. + + The component documentation does not attempt to describe an + application programmer's view of a hardware-oriented component, so + it is not a programming manual. You should refer to the hardware + manufacturer's data books for this kind of information. + +Finding Component Reference Information + +component reference + information +searching + for + + +documentation +for + individual components + + +siddoc +searching for + documentation + +To search for and display installed component documentation + files that match a given substring, use the + siddoc command. +Usage: +siddoc [-l] name + ... +where + + +name + +is a substring of the desired component type name + + + +-l + +specifies that you only want matching component types to + be listed, instead of the actual documentation. Without + -l, each matching documentation file will + be displayed on the screen by running the more program.The default more may + be overridden by setting the PAGER environment + variable. + + + +Examples: + + +siddoc -l hw-cpu + +will show hw-cpu-arm7t hw-cpu-m32r/d + and any other CPU-type components that have documentation + files. + + + +siddoc memory-flash uart + +will display the documentation files of both + hw-memory-flash-* components, then the + hw-uart-* components. + + + + + + +Parts of the Component Documentation Template + +component documentation + template + parts of + +The simulation component documentation template is broken + into the following sections. + +Name + +component name + +This item provides the SID component-type name. In cases + where a family of components may be described together, this item + may list several names. + +SID component-type names are structured so that the first + part of the component-type name indicates the category of thing + that is simulated: + + +hw usually indicates that + the simulated component represents hardware. + + +sw indicates that the + simulated component represents software. + + +sid indicates that the simulated component + performs special simulation management tasks. + + + + +Synopsis + +synopsis + +The Synopsis summarizes the component's purpose and lists + its external interfaces in a condensed form. The summary includes + a complete list of the names of the component's pins, buses, + accessors, attributes, and relationships. These names may be + referenced in SID configuration files, or by other supervisory + components. The last items in this section list the component + library file and symbol names in which this component-type is + found. Supply these two names to a load configuration file + command. + + +Functionality + +functionality + + This section gives detailed information about how this + component operates. It has several subsections. + +Modelling + +modelling + +The modelling subsection discusses the relationship of this + SID component to the real thing (maybe hardware) being + modelled. The scope of simulation focuses on whatever important + differences exist between a simulated program's view of the SID + model versus reality. + + +Behaviors + +behaviors + +The behaviors subsection describes in detail how the SID component operates. + Each separate behavior (stage of life, or independent processing activity) + is described separately. Each behavior section describes what triggers the + behavior (usually a pin, bus, or attribute call), what the component does + internally in response, and what external results may be visible. These sections + reference the low-level pin, bus, etc. names. + + +SID Conventions + +conventions + +The conventions subsection describes which SID behaviors the component + supports. These are called conventions, since they are high-level behaviors + expressed exclusively in terms of lower-level constructs (pins, attributes, + and so on). The following is a list of SID conventions. + + +Supervisory versus Functional + +supervisory components + + +functional components + +A supervisory component may manipulate other components using the full + SID API. A functional component uses only the pin and bus APIs to communicate + with its neighbors. Most hardware modelling components are functional; most + simulator control components are supervisory. + + +Target View Support + +target view support + +A SID component that supports the target view specially + exports some attributes. The component classifies these selected attributes + with one of the category names pin, register, or setting. The component internally + associates these attributes with operations on actual SID pins or other state. + +The target view will allow attributes of these three categories to be + interacted with ( display = read, update = write ). The write routines associated + with these attributes should be generous to permit the user a wide range of + valid input formats. +A SID component that does not support the target view may still be a + first class member of a SID configuration. It will be harder for a user to + interact with the component, that's all. + + +State Save/Restore Support + +state save/restore support + +A SID component that supports standard state save/restore function does + so by exporting an attribute named state-snapshot. When read, the attribute + value represents a subset of the internal state of the component; this is + the state save operation. When written to with the string from a previous + read, the internal state of the component will be reset according to the supplied + string; this is the restore operation. +Normally, components endavour to save and restore the subset state that + may be visible to an executing simulated application. Some components may + save/restore additional state like configuration preferences, or transitory + attributes. +A SID component that does not support state save/restore may not be + safe to interoperate with other components after a restore operation. + + +Triggerpoint Support + +triggerpoint support + +A SID component that supports triggerpoints allows some internal state + to be watched or monitored for certain conditions. Watch criteria include + any change, matching a given value, or matching a given value with a given + boolean mask. Whenever a component detects that an active watching criterion + succeeds, it drive a special output pin. +The watchable internal state values are advertised as attributes with + the additional category watchable. Watching such a state value involves, at + the low level, connecting to a virtual output pins that has a special name. + The name encodes the watchable item and a specification of the watch criterion. + +A SID component that does not support triggerpoints may still be a first + class member of a SID configuration. Monitoring the component's internal state + may simply be slow and cumbersome. + + +Reentrancy + +reentrancy + +Some SID components defend themselves against reentrancy. Since SID + components tend to perform activity by calling other SID components, it is + conceivable that the called component may in turn call back to the original + component. It is a possible problem because some components may have internal + data structures that are not in a consistent state at the moment of a reentrant + call. It is also possible that infinite recursion could result. +A SID component that defends itself against reentrancy does this by + run-time checks around certain incoming calls, like specific pin or bus signals, + or attribute accesses. When it detects that more than some number of calls + are in progress, it signals an error message and may even shut SID down. +A SID component that does not defend itself against reentrancy may nevertheless + be vulnerable to the problem. It may be unable to detect the situation before + it becomes a failure. +In order to avoid triggering these detection measures, it is important + that a SID configuration avoid the possibility of violation of the reentrancy + restrictions of a component. For example, avoid creating pin or bus connections + that cause gratuitous loops, and abusing supervisory components. + + + +Environment + +environment +component interaction + with + + This section talks about how instances of this component interact with + their environment. + +Related Components + +relationships between components + +SID components are meant to connect to each other. This section discusses + what other components work well together with this one. It may include configuration + file fragments to demonstrate minimal interconnection instructions. + + +Host System + +host system + +Since SID components are software modules that run on the host, they + naturally interact with the host system. In some cases, there may be significant + resource consumption issues that a user needs to be aware of. This section + talks about what kind of impact this component may have on the host, including + host I/O, security concerns, memory consumption, performance, and error handling + conventions. + + + +SID Interface Reference + +SID interface reference + + +reference +SID interface + +This section discusses the interfaces of this SID component in a tabular + reference format. There are several formats, one per low level interface. + In all cases, the table rows cross-reference to the Behaviors section, where + fuller details about the use of that item may be found (see Behaviors for + more details). + +Pins + +pin reference information + + +reference information +pins + + + +Column 1: Name + +Gives the string that the connect-pin configuration command may use + to reference this pin. + + + +Column 2: Directionality + + Identifies this pin as a possible input, output, or both. + + + +Column 3: Legal Values + +Lists the range of values that may be driven into this pin (if an input), + or what values may be driven outward (if output). The values may be limited + to a subrange of the host_int_4 type. + + + +Column 4: Behavior + +References the behaviors associated with this pin + + + + + +Buses + +bus reference information + + +reference information +buses + + + +Column 1: Name + +Gives the string with which the connect-bus configuration command may + reference this bus. + + + +Column 2: Address Range + + Identifies the supported range of addresses for accesses on this bus. + + + + +Column 3: Access Types + +Lists what subset of size, endianness, and read/write accesses are supported. + + + + +Column 4: Behavior + +References the behaviors associated with this bus. + + + + + +Accessors + +accessor reference information + + +reference information +accessors + + + +Column 1: Name + +Gives the string with which the connect-bus configuration + command may reference this accessor. + + + +Column 2: Access Types + +Lists what subset of size, endianness, and read/write accesses may be + made by this component using this accessor. + + + +Column 3: Behavior + +References the behaviors associated with this accessor. + + + + + +Attributes + +attribute reference information + + +reference information +attributes + + + +Column 1: Name + + Gives the string with which the set configuration + command may reference this attribute. + + + +Column 2: Categories + +Lists the category names under which this attribute is classified. + + + + +Column 3: Legal Values / Default Values + +Describes legal values of this attribute, for both reading and writing, + and may include the default value. There are several common attribute value + formats: + +numeric strings are C-style integral + numeric literals like 0, 0xEEEF, 0377, 0b1101101, and -75. + + + +boolean strings are values such as true, + false, n, yes, 0, and 1. + + +general strings containing a sequence + of unrestricted binary bytes. + + + + + +Column 4: Behavior + +References the behaviors associated with this attribute. + + + + + +Relationships + +relationship reference information + + +reference information +relationships + + + + +Column 1: Name + +Gives the string with which the relate configuration command may reference + this relationship. + + + +Column 2: Behavior + +References the behaviors associated with this relationship. + + + + + + +References +This section may refer the reader to further material describing the + component, or its real-world image. + + + + +Using SID + +Running SID +SID is essentially a batch process. It reads a configuration + file (see >) and executes its + contents. Thus the basic invocation interface is simple; the hard + part is writing a complete, useful configuration file. There are + two ways, commonly, of using SID: direct invocation on a + task-specific configuration file, and through a wrapper that sets + up a more generic simulation environment. + +Direct invocation +The most direct (and flexible) way of running SID is + with the command-line: + +sid +-h +-n +-f FILE +-e LINE +CONFIG_FILE + + +SID Options + + + +Option +Meaning + + + + +-h +print this help + + +-n +load/check configuration but do not run simulation + + +-f FILE +also read configuration FILE + + +-e LINE +also do configuration LINE + + + +
+All / options are + performed first, in sequence. Any + CONFIG_FILE names supplied without + are done last, in sequence. + +SID invocations + + +sid arm7t-config + +runs the simulation environment described in arm7t-config + + + +sid -e 'set angel command-line "simulated banana"' arm7t-config + +executes the supplied configuration line + (setting the command line to "simulated banana") and + then runs the simulation environment described in + arm7t-config + + + +sid -f special-settings arm7t-config + +executes any directives in the file + special-settings, then runs + the simulation environment described in + arm7t-config + + + + +Invoking SID this way is simple, but requires a detailed + configuration file in order to + perform any interesting simulation tasks. Since many components and + connections will vary only slightly between simulation runs, it + is often beneficial to introduce a "wrapper" program which + automatically constructs configuration files from common + idioms. +
+ +Invocation through a wrapper +A common wrapper around the + sid binary is the perl script + configrun-sid, which accepts more + customization options and writes a temporary configuration file + containing a relatively common arrangement of CPU, memory, + gloss, scheduler, mapper, I/O and debugger components, + representative of an embedded system "target board". + It is + invoked with the command-line + +configrun-sid +--help +--cpu=CPU +--verbose +--save-temps + +--trace-extract +--trace-semantics +--trace-core + +--memory-region=BASE,SIZE + +,read-only +,alias=BASE2 +,file=FILENAME +,mmap + + +--gdb=PORT +--board=BOARD +--engine= +scache +pbb + + +-EB +-EL + + +--tksm +--persistent +--no-run +--insn-count=N +--gprof +--wrap=COMPONENT + + +configrun-sid Options + + + +Option +Meaning +Default + + + + +--help +Print this help message. + + +--cpu=CPU +Select target processor +none + + +--verbose +Turn on various run-time verbosity settings. +no + + +--save-temps +Keep generated sid configuration file. +no + + +--trace-extract +Turn on CPU insn decode tracing. +no + + +--trace-semantics +Turn on CPU insn execute tracing. +no + + +--trace-core +Turn on bus access tracing. +no + + +--memory-region=BASE,SIZE +Add RAM region from BASE to + BASE+SIZE-1. Additional options may be appended, + separated by commas: flags + this region as read-only, + + adds an alias to this region at + BASE2, + + loads and saves this memory region from a file, and + memory-maps such a file rather + than loading it. +no + + +--gdb=PORT +Add a gdb/debugger interface on TCP port. +none + + +--board=BOARD +Model given board or system. +gloss + + +--engine=scache|pbb +Set given cgen CPU engine. +pbb + + +-EB | -EL +Set powerup CPU mode to big/little endian. +auto + + +--tksm +Add an experimental Tk system monitor. +no + + +--persistent +Rerun top-level loop indefinitely. +no + + +--no-run +Make config file (--save-temps) and exit. +no + + +--insn-count=N +Block of uninterrupted ticks for insns. +10000 + + +--gprof +GPROF-profile, collect every N ticks. +no + + +--wrap=COMPONENT +Turn on SID API tracing for named component. +none + + + +
+ Typically, if SID is built along with a GNU toolchain, the + build process also produces a wrapper shell script around + configrun-sid, such as + arm-elf-sid, which in turn executes + configrun-sid ---cpu arm. This is simply + for uniform naming with the other target-specific portions of + the toolchain, such as arm-elf-gcc or + arm-elf-ld. + +
+
+ +SID Startup +SID is started up when the run! pin is + down, which results in the simulation top level loop beginning. The + first action is that all the components reported in the SID + configuration file are configured together in the specified manner in + the configuration file. After the relationships are established, the + main loop regains control to complete any further steps and after the + main loop is completed, the control is returned to the function that + sent the run! command. + + +Creating an Application to Run on SID +The target code is developed in a similar manner as you + would for developing code to run on the target hardware. The source + code is either written in C or C++ and is then compiled, assembled and + linked for arm-elf format. The user then has the ability to download + to the target hardware or on SID. The simulator supports the ARM + architectures for this release in both big-endian and little-endian + and in elf file format. The default is big-endian. Once the code is + loaded on SID, the execution and debugging proceed in the usual + manner. + + + + +Debugging Using SID +Aside from providing + interactive monitoring of a simulation through a console or TK + visual interface, SID provides mechanisms to debug and profile the + simulation environment with conventional GNU development tools + such as gdb and gprof. The + following sections assume familiarity with these GNU tools, and + focus on describing their interfaces with SID. The debugging and + profiling components provided with SID are normal components, and + certainly other such debugging and profiling components could be + made. They do not have nor need special access to anything outside + the normal SID component API; they merely serve as bridges between + SID and other existing tools. + + +Using GDB +The debugging interface is designed resemble working with + a remote "target board", using the GDB remote protocol. The SID + simulation is run with a configuration that instantiates a + sw-debug-gdb GDB stub component connected + to a sid-io-socket-server socket component, + which serves a connection between the GDB stub component and a + remote debugger. The GDB stub component is configured to monitor + and control other components within the simulation environment, + such as CPU and system scheduler, in response to commands it + receives from the socket component. A simulation user wishing + to debug the simulation runs gdb as usual, on + any machine capable of connecting to the host running the + simulation, but directs it to the TCP socket configured into the + socket component in the simulation. The user can then proceed to + debug the simulation exactly as if it were a "real" target + environment. + +Configuring the GDB stub and socket components is somewhat + lengthy and verbose, but is performed automatically by the + configrun-sid command when + invoked with the + ---gdb=PORT + option. For complete details of the connection process, see + siddoc sw-debug-gdb. + + + +Profiling +The profiling facility consists of the standard GNU + profile-analysis tool gprof, along with a + SID component sw-profile-gprof. The + component is loaded into a SID session and configured to sample + any other component's numeric attribute, and record a + histogram. The histogram is then output to a file, and + gprof interprets the file as a "flat + profile". The profiling component has no call-graph collection + facility. + +When the profiling component's sample pin + is driven, it uses its value-attribute + attribute as the name of an attribute to + sample on the component in its target-component + relation. The sample is taken immediately, interpreted as a + numeric string, and stored in a histogram bucket. The histogram + bucket's width, in bytes, is specified by the profiling + component's bucket-size attribute. + +When the profiling component's store pin + is driven, the histogram is dumped to the file named in the + profiling component's output-file attribute, + which has a default value of gmon.out. The + histogram is not cleared by this action, however. To clear the + histogram, the profiling component's reset must + be driven. Since dumping and resetting are separate operations, + one can collect multiple cumulative profiles of a value across a + single simulation run. + +A simple configuration example is given below, showing a + connection between the profiling component and a cpu (assumed to + already be instantiated). For complete reference on the profiling + component, see siddoc sw-profile-gprof. + + +Profiling a CPU component's program counter + load libprof.la prof_component_library + new sw-profile-gprof gprof + + relate gprof target-component cpu + + set gprof value-attribute pc + set gprof bucket-size 4 + + connect-pin main perform-activity -> gprof sample + connect-pin main stopping -> gprof store + + + + + + +
+
diff --git a/sid/doc/sid-guide/images/name-structure.jpg b/sid/doc/sid-guide/images/name-structure.jpg new file mode 100755 index 0000000000000000000000000000000000000000..7652a457d8e860248f25032a2f242e8fb2d70119 GIT binary patch literal 9166 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 literal 0 HcmV?d00001 diff --git a/sid/doc/sid-guide/images/sid-diagram.jpg b/sid/doc/sid-guide/images/sid-diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6378687a52dc066d8fe88e4200c82d08da2563d GIT binary patch literal 22226 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 z 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 L|JRZB-o!ruY~kHF literal 0 HcmV?d00001 -- 2.11.0