OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gdb-6.8/] [pre-binutils-2.20.1-sync/] [sim/] [erc32/] [README.sis] - Diff between revs 157 and 223

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.