123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- SIS - Sparc Instruction Simulator README file (v2.0, 05-02-1996)
- -------------------------------------------------------------------
- 1. Introduction
- The SIS is a SPARC V7 architecture simulator. It consist of two parts,
- the simulator core and a user defined memory module. The simulator
- core executes the instructions while the memory module emulates memory
- and peripherals.
- 2. Usage
- The simulator is started as follows:
- sis [-uart1 uart_device1] [-uart2 uart_device2]
- [-nfp] [-freq frequency] [-c batch_file] [files]
- The default uart devices for SIS are /dev/ptypc and /dev/ptypd. The
- -uart[1,2] switch can be used to connect the uarts to other devices.
- Use 'tip /dev/ttypc' to connect a terminal emulator to the uarts.
- The '-nfp' will disable the simulated FPU, so each FPU instruction will
- generate a FPU disabled trap. The '-freq' switch can be used to define
- which "frequency" the simulator runs at. This is used by the 'perf'
- command to calculated the MIPS figure for a particular configuration.
- The give frequency must be an integer indicating the frequency in MHz.
- The -c option indicates that sis commands should be read from 'batch_file'
- at startup.
- Files to be loaded must be in one of the supported formats (see INSTALLATION),
- and will be loaded into the simulated memory. The file formats are
- automatically recognised.
- The script 'startsim' will start the simulator in one xterm window and
- open a terminal emulator (tip) connected to the UART A in a second
- xterm window. Below is description of commands that are recognized by
- the simulator. The command-line is parsed using GNU readline. A command
- history of 64 commands is maintained. Use the up/down arrows to recall
- previous commands. For more details, see the readline documentation.
- batch <file>
- Execute a batch file of SIS commands.
- +bp <address>
- Adds an breakpoint at address <address>.
- bp
- Prints all breakpoints
- -bp <num>
- Deletes breakpoint <num>. Use 'bp' to see which number is assigned to the
- breakpoints.
- cont [inst_count]
- Continue execution at present position, optionally for [inst_count]
- instructions.
- dis [addr] [count]
- Disassemble [count] instructions at address [addr]. Default values for
- count is 16 and addr is the present address.
- echo <string>
- Print <string> to the simulator window.
- float
- Prints the FPU registers
- go <address> [inst_count]
- The go command will set pc to <address> and npc to <address> + 4, and start
- execution. No other initialisation will be done. If inst_count is given,
- execution will stop after the specified number of instructions.
- help
- Print a small help menu for the SIS commands.
- hist [trace_length]
- Enable the instruction trace buffer. The 'trace_length' last executed
- instructions will be placed in the trace buffer. A 'hist' command without
- a trace_length will display the trace buffer. Specifying a zero trace
- length will disable the trace buffer.
- load <file_name>
- Loads a file into simulator memory.
- mem [addr] [count]
- Display memory at [addr] for [count] bytes. Same default values as above.
- quit
- Exits the simulator.
- perf [reset]
- The 'perf' command will display various execution statistics. A 'perf reset'
- command will reset the statistics. This can be used if statistics shall
- be calculated only over a part of the program. The 'run' and 'reset'
- command also resets the statistic information.
- reg [reg_name] [value]
- Prints and sets the IU regiters. 'reg' without parameters prints the IU
- registers. 'reg [reg_name] [value]' sets the corresponding register to
- [value]. Valid register names are psr, tbr, wim, y, g1-g7, o0-o7 and
- l0-l7.
- reset
- Performs a power-on reset. This command is equal to 'run 0'.
- run [inst_count]
- Resets the simulator and starts execution from address 0. If an instruction
- count is given (inst_count), the simulator will stop after the specified
- number of instructions. The event queue is emptied but any set breakpoints
- remain.
- step
- Equal to 'trace 1'
- tra [inst_count]
- Starts the simulator at the present position and prints each instruction
- it executes. If an instruction count is given (inst_count), the simulator
- will stop after the specified number of instructions.
- Typing a 'Ctrl-C' will interrupt a running simulator.
- Short forms of the commands are allowed, e.g 'c' 'co' or 'con' are all
- interpreted as 'cont'.
- 3. Simulator core
- The SIS emulates the behavior of the 90C601E and 90C602E sparc IU and
- FPU from Matra MHS. These are roughly equivalent to the Cypress C601
- and C602. The simulator is cycle true, i.e a simulator time is
- maintained and inremented according the IU and FPU instruction timing.
- The parallel execution between the IU and FPU is modelled, as well as
- stalls due to operand dependencies (FPU). The core interacts with the
- user-defined memory modules through a number of functions. The memory
- module must provide the following functions:
- int memory_read(asi,addr,data,ws)
- int asi;
- unsigned int addr;
- unsigned int *data;
- int *ws;
- int memory_write(asi,addr,data,sz,ws)
- int asi;
- unsigned int addr;
- unsigned int *data;
- int sz;
- int *ws;
- int sis_memory_read(addr, data, length)
- unsigned int addr;
- char *data;
- unsigned int length;
- int sis_memory_write(addr, data, length)
- unsigned int addr;
- char *data;
- unsigned int length;
- int init_sim()
- int reset()
- int error_mode(pc)
- unsigned int pc;
- memory_read() is used by the simulator to fetch instructions and
- operands. The address space identifier (asi) and address is passed as
- parameters. The read data should be assigned to the data pointer
- (*data) and the number of waitstate to *ws. 'memory_read' should return
- 0 on success and 1 on failure. A failure will cause a data or
- instruction fetch trap. memory_read() always reads one 32-bit word.
- sis_memory_read() is used by the simulator to display and disassemble
- memory contants. The function should copy 'length' bytes of the simulated
- memory starting at 'addr' to '*data'.
- The sis_memory_read() should return 1 on success and 0 on failure.
- Failure should only be indicated if access to unimplemented memory is attempted.
- memory_write() is used to write to memory. In addition to the asi
- and address parameters, the size of the written data is given by 'sz'.
- The pointer *data points to the data to be written. The 'sz' is coded
- as follows:
- sz access type
- 0 byte
- 1 halfword
- 2 word
- 3 double-word
- If a double word is written, the most significant word is in data[0] and
- the least significant in data[1].
- sis_memory_write() is used by the simulator during loading of programs.
- The function should copy 'length' bytes from *data to the simulated
- memory starting at 'addr'. sis_memory_write() should return 1 on
- success and 0 on failure. Failure should only be indicated if access
- to unimplemented memory is attempted. See erc32.c for more details
- on how to define the memory emulation functions.
- The 'init_sim' is called once when the simulator is started. This function
- should be used to perform initialisations of user defined memory or
- peripherals that only have to be done once, such as opening files etc.
- The 'reset' is called every time the simulator is reset, i.e. when a
- 'run' command is given. This function should be used to simulate a power
- on reset of memory and peripherals.
- error_mode() is called by the simulator when the IU goes into error mode,
- typically if a trap is caused when traps are disabled. The memory module
- can then take actions, such as issue a reset.
- sys_reset() can be called by the memory module to reset the simulator. A
- reset will empty the event queue and perform a power-on reset.
- 4. Events and interrupts
- The simulator supports an event queue and the generation of processor
- interrupts. The following functions are available to the user-defined
- memory module:
- event(cfunc,arg,delta)
- void (*cfunc)();
- int arg;
- unsigned int delta;
- set_int(level,callback,arg)
- int level;
- void (*callback)();
- int arg;
- clear_int(level)
- int level;
- sim_stop()
- The 'event' functions will schedule the execution of the function 'cfunc'
- at time 'now + delta' clock cycles. The parameter 'arg' is passed as a
- parameter to 'cfunc'.
- The 'set_int' function set the processor interrupt 'level'. When the interrupt
- is taken, the function 'callback' is called with the argument 'arg'. This
- will also clear the interrupt. An interrupt can be cleared before it is
- taken by calling 'clear_int' with the appropriate interrupt level.
- The sim_stop function is called each time the simulator stops execution.
- It can be used to flush buffered devices to get a clean state during
- single stepping etc.
- See 'erc32.c' for examples on how to use events and interrupts.
- 5. Memory module
- The supplied memory module (erc32.c) emulates the functions of memory and
- the MEC asic developed for the 90C601/2. It includes the following functions:
- * UART A & B
- * Real-time clock
- * General purpose timer
- * Interrupt controller
- * Breakpoint register
- * Watchpoint register
- * 512 Kbyte ROM
- * 4 Mbyte RAM
- See README.erc32 on how the MEC functions are emulated. For a detailed MEC
- specification, look at the ERC32 home page at URL:
- http://www.estec.esa.nl/wsmwww/erc32
- 6. Compile and linking programs
- The directory 'examples' contain some code fragments for SIS.
- The script gccx indicates how the native sunos gcc and linker can be used
- to produce executables for the simulator. To compile and link the provided
- 'hello.c', type 'gccx hello.c'. This will build the executable 'hello'.
- Start the simulator by running 'startsim hello', and issue the command 'run.
- After the program is terminated, the IU will be force to error mode through
- a software trap and halt.
- The programs are linked with a start-up file, srt0.S. This file includes
- the traptable and window underflow/overflow trap routines.
- 7. IU and FPU instruction timing.
- The simulator provides cycle true simulation. The following table shows
- the emulated instruction timing for 90C601E & 90C602E:
- Instructions Cycles
- jmpl, rett 2
- load 2
- store 3
- load double 3
- store double 4
- other integer ops 1
- fabs 2
- fadds 4
- faddd 4
- fcmps 4
- fcmpd 4
- fdivs 20
- fdivd 35
- fmovs 2
- fmuls 5
- fmuld 9
- fnegs 2
- fsqrts 37
- fsqrtd 65
- fsubs 4
- fsubd 4
- fdtoi 7
- fdots 3
- fitos 6
- fitod 6
- fstoi 6
- fstod 2
- The parallel operation between the IU and FPU is modelled. This means
- that a FPU instruction will execute in parallel with other instructions as
- long as no data or resource dependency is detected. See the 90C602E data
- sheet for the various types of dependencies. Tracing using the 'trace'
- command will display the current simulator time in the left column. This
- time indicates when the instruction is fetched. If a dependency is detetected,
- the following fetch will be delayed until the conflict is resolved.
- The load dependency in the 90C601E is also modelled - if the destination
- register of a load instruction is used by the following instruction, an
- idle cycle is inserted.
- 8. FPU implementation
- The simulator maps floating-point operations on the hosts floating point
- capabilities. This means that accuracy and generation of IEEE exceptions is
- host dependent.
|