|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectavrora.sim.Simulator
The Simulator class implements a full processor simulator
for the AVR instruction set. It is the base class of specific implementations
that implement processor-specific behavior.
Program,
Instr,
BaseInterpreter| Nested Class Summary | |
static class |
Simulator.BreakPointException
The BreakPointException is an exception that is thrown
by the simulator before it executes an instruction which has a breakpoint.
|
class |
Simulator.ClockCycleTimeout
The InstructionCountTimeout class is a probe that
simply counts down and throws an exception when the count reaches
zero. |
static interface |
Simulator.Event
The Simulator.Event interface represents an event that is
fired when a timed event occurs within the simulator. |
class |
Simulator.FlagRegister
|
static class |
Simulator.InstructionCountTimeout
The InstructionCountTimeout class is a probe that
simply counts down and throws a TimeoutException
when the count reaches zero. |
static interface |
Simulator.Interrupt
The Interrupt interface represents the behavior of an interrupt
(how it manipulates the state of the processor) when it is posted and
when it is triggered (handler is executed by the processor). |
class |
Simulator.MaskableInterrupt
|
class |
Simulator.MaskRegister
|
static interface |
Simulator.Probe
The Simulator.Probe interface represents a
programmer-defined probe that can be inserted at a particular instruction
in the program. or at every instruction. |
static class |
Simulator.TimeoutException
The TimeoutException is thrown by the simulator when a timeout
reaches zero. |
class |
Simulator.UnorderedFlagRegister
Flag register for flag register that corresponds to a group of interrupts that do not necessarily have a clean, linear mapping to bits on the register. |
class |
Simulator.UnorderedMaskRegister
Mask register associated with an UnorderedFlagregister. |
static interface |
Simulator.Watch
The MemoryProbe interface represents a user probe that is
fired when a watchpoint detects an access to an address where this
memory probe has been inserted. |
| Field Summary | |
protected DeltaQueue |
eventQueue
The eventQueue field stores a reference to the event queue,
a delta list of all events to be processed in order. |
static Simulator.Interrupt |
IGNORE
The IGNORE field stores a reference to a singleton
anonymous class that ignores posting and firing of an interrupt. |
protected BaseInterpreter |
interpreter
The interpreter field stores a reference to the instruction
set interpreter. |
protected Simulator.Interrupt[] |
interrupts
The interrupts array stores a reference to an Interrupt
instance for each of the interrupt vectors supported in the simulator. |
static boolean |
LEGACY_INTERPRETER
The LEGACY_INTERPRETER field is used to turn on and off
the legacy interpreter. |
static int |
MAX_INTERRUPTS
The MAX_INTERRUPTS fields stores the maximum number of
interrupt vectors supported by the simulator. |
protected Microcontroller |
microcontroller
The microcontroller field stores a reference to the microcontroller
being simulated. |
protected Program |
program
The program field allows descendants of the Simulator
class to access the program that is currently loaded in the simulator. |
static Simulator.Probe |
TRACEPROBE
The TRACEPROBE field represents a simple probe
that prints an instruction to the terminal as it is encountered.
|
| Fields inherited from interface avrora.sim.IORegisterConstants |
ACSR, ADCH, ADCL, ADCSRA, ADMUX, ASSR, DDRA, DDRB, DDRC, DDRD, DDRE, DDRF, DDRG, EEARH, EEARL, EECR, EEDR, EICRA, EICRB, EIFR, EIMSK, ETIFR, ETIMSK, ICR1H, ICR1L, ICR3H, ICR3L, MCUCR, MCUCSR, NUM_REGS, OCDR, OCR0, OCR1AH, OCR1AL, OCR1BH, OCR1BL, OCR1CH, OCR1CL, OCR2, OCR3AH, OCR3AL, OCR3BH, OCR3BL, OCR3CH, OCR3CL, OSCCAL, PINA, PINB, PINC, PIND, PINE, PINF, PING, PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG, RAMPZ, SFIOR, SPCR, SPDR, SPH, SPL, SPMCSR, SPSR, SREG, SREG_C, SREG_H, SREG_I, SREG_N, SREG_S, SREG_T, SREG_V, SREG_Z, TCCR0, TCCR1A, TCCR1B, TCCR1C, TCCR2, TCCR3A, TCCR3B, TCCR3C, TCNT0, TCNT1H, TCNT1L, TCNT2, TCNT3H, TCNT3L, TIFR, TIMSK, TWAR, TWBR, TWCR, TWDR, TWSR, UBRR0H, UBRR0L, UBRR1H, UBRR1L, UCSR0A, UCSR0B, UCSR0C, UCSR1A, UCSR1B, UCSR1C, UDR0, UDR1, WDTCR, XDIV, XMCRA, XMCRB |
| Constructor Summary | |
Simulator(Microcontroller mcu,
Program p)
The constructor creates the internal data structures and initial state of the processor. |
|
| Method Summary | |
void |
delay(long cycles)
The delay() method introduces a delay in the execution
of the instructions of the program. |
void |
forceInterrupt(int num)
The forceInterrupt() method forces the simulator to post the
specified interrupt regardless of the normal source of the interrupt.
|
protected int |
getInterruptVectorAddress(int inum)
The getInterruptVectorAddress() method computes the location in memory
to jump to for the given interrupt number. |
Microcontroller |
getMicrocontroller()
The getMicrocontroller() method gets a reference to the
microcontroller being simulated. |
Program |
getProgram()
|
State |
getState()
The getState() retrieves a reference to the current
state of the simulation, including the values of all registers, the
SRAM, the IO register, the program memory, program counter, etc.
|
void |
insertBreakPoint(int addr)
The insertBreakPoint() method inserts a breakpoint
at the instruction at the specified address. |
void |
insertEvent(Simulator.Event e,
long cycles)
The insertEvent() method inserts an event into the
event queue of the simulator with the specified delay in clock cycles.
|
PeriodicEvent |
insertPeriodicEvent(Simulator.Event e,
long period)
The insertPeriodicEvent() method inserts an event into
the event queue of the simulator with the specified period. |
void |
insertProbe(Simulator.Probe p)
The insertProbe() method allows a probe to be inserted
that is executed before and after every instruction that is executed
by the simulator |
void |
insertProbe(Simulator.Probe p,
int addr)
The insertProbe() method allows a probe to be inserted
at a particular address in the program that corresponds to an
instruction. |
void |
insertTimeout(long cycles)
The insertTimeout() method inserts an event into the
event queue of the simulator that causes it to stop execution
and throw a Simulator.TimeoutException when the
specified number of clock cycles have expired. |
void |
insertWatch(Simulator.Watch p,
int data_addr)
The insertWatch() method allows a watch to be inserted
at a memory location. |
void |
removeBreakPoint(int addr)
The removeBreakPoint method removes all breakpoints at
the specified instruction at the specified address. |
void |
removeEvent(Simulator.Event e)
The removeEvent() method removes an event from
the event queue of the simulator. |
void |
removeProbe(Simulator.Probe b)
The removeProbe() method removes a probe from the global
probe table (the probes executed before and after every instruction).
|
void |
removeProbe(Simulator.Probe p,
int addr)
The removeProbe() method removes a probe from the
instruction at the specified the address. |
void |
removeWatch(Simulator.Watch p,
int data_addr)
The removeWatch() method removes a given watch
from the memory location. |
void |
reset()
The reset() method stops the simulation and resets its
state to the default initial state. |
void |
start()
The start() method begins the simulation. |
void |
stop()
The stop() method stops the simulation if it is running.
|
protected void |
triggerInterrupt(int num)
The triggerInterrupt() method is used by device implementations
when they detect that an interrupt should be triggered. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final Simulator.Probe TRACEPROBE
TRACEPROBE field represents a simple probe
that prints an instruction to the terminal as it is encountered.
This is useful for tracing program execution over simulation.
protected final Program program
program field allows descendants of the Simulator
class to access the program that is currently loaded in the simulator.
protected final Microcontroller microcontroller
microcontroller field stores a reference to the microcontroller
being simulated.
public static boolean LEGACY_INTERPRETER
LEGACY_INTERPRETER field is used to turn on and off
the legacy interpreter. By default, the legacy interpreter is used.
protected BaseInterpreter interpreter
interpreter field stores a reference to the instruction
set interpreter.
protected Simulator.Interrupt[] interrupts
interrupts array stores a reference to an Interrupt
instance for each of the interrupt vectors supported in the simulator.
protected DeltaQueue eventQueue
eventQueue field stores a reference to the event queue,
a delta list of all events to be processed in order.
public static int MAX_INTERRUPTS
MAX_INTERRUPTS fields stores the maximum number of
interrupt vectors supported by the simulator.
public static final Simulator.Interrupt IGNORE
IGNORE field stores a reference to a singleton
anonymous class that ignores posting and firing of an interrupt. This
is the default value for interrupts in a freshly initialized
Simulator instance.
| Constructor Detail |
public Simulator(Microcontroller mcu,
Program p)
Simulator instances directly, but instead should
get an instance of the appropriate processor and load the
program into it.
p - the program to load into the simulator| Method Detail |
public Microcontroller getMicrocontroller()
getMicrocontroller() method gets a reference to the
microcontroller being simulated.
public Program getProgram()
public State getState()
getState() retrieves a reference to the current
state of the simulation, including the values of all registers, the
SRAM, the IO register, the program memory, program counter, etc.
This state is mutable.
public void start()
start() method begins the simulation. It causes the
simulator to enter a runLoop that executes instructions, firing probes
and events as it executes. The start() method returns
normally when the break AVR instruction is executed,
when a BreakPointException is thrown, when a
TimeoutException is thrown, or when the stop()
method on this simulator instance is called.
public void stop()
stop() method stops the simulation if it is running.
This method can be called from within a probe or event or from another
thread.
public void reset()
reset() method stops the simulation and resets its
state to the default initial state. Probes inserted in the program
are retained. All events are removed.
protected int getInterruptVectorAddress(int inum)
getInterruptVectorAddress() method computes the location in memory
to jump to for the given interrupt number. On the Atmega128L, the starting point is
the beginning of memory and each interrupt vector slot is 4 bytes. On older
architectures, this is not the case, therefore this method has to be implemented
according to the specific device being simulated.
inum - the interrupt number
public void insertProbe(Simulator.Probe p)
insertProbe() method allows a probe to be inserted
that is executed before and after every instruction that is executed
by the simulator
p - the probe to insert
public void insertProbe(Simulator.Probe p,
int addr)
insertProbe() method allows a probe to be inserted
at a particular address in the program that corresponds to an
instruction. The probe is then fired before and after that particular
instruction is executed.
p - the probe to insertaddr - the address at which to insert the probepublic void removeProbe(Simulator.Probe b)
removeProbe() method removes a probe from the global
probe table (the probes executed before and after every instruction).
The comparison used is reference equality, not .equals().
b - the probe to remove
public void removeProbe(Simulator.Probe p,
int addr)
removeProbe() method removes a probe from the
instruction at the specified the address. The comparison used is
reference equality, not .equals().
p - the probe to removeaddr - the address from which to remove the probepublic void insertBreakPoint(int addr)
insertBreakPoint() method inserts a breakpoint
at the instruction at the specified address. At most one breakpoint
can be inserted at a particular instruction. Subsequent calls to
this method would then have no effect for the same address.
addr - public void removeBreakPoint(int addr)
removeBreakPoint method removes all breakpoints at
the specified instruction at the specified address.
addr -
public void insertWatch(Simulator.Watch p,
int data_addr)
insertWatch() method allows a watch to be inserted
at a memory location. The probe will be executed before every read
or write to that memory location.
p - the probe to insertdata_addr - the data address at which to insert the probe
public void removeWatch(Simulator.Watch p,
int data_addr)
removeWatch() method removes a given watch
from the memory location. Reference equality is used to check
for equality when removing probes, not .equals().
p - the probe to removedata_addr - the data address from which to remove the probepublic void forceInterrupt(int num)
forceInterrupt() method forces the simulator to post the
specified interrupt regardless of the normal source of the interrupt.
If there is a flag register associated with the specified interrupt, then
the flag register's value will be set as if the original source of
the interrupt (e.g. a timer) had posted the interrupt. As with a normal
post of the interrupt, if the interrupt is masked out via a mask register
or the master interrupt enable bit, the interrupt will not be delivered.
The main reason that this interface exists is for forcing programs to
handle interrupts and observe their behavior.
num - the interrupt number to forceprotected void triggerInterrupt(int num)
triggerInterrupt() method is used by device implementations
when they detect that an interrupt should be triggered. This method will
check whether this interrupt is enabled by consulting its own internal
table of interrupts that is kept consistent during writes to IO registers.
num - the number of the interrupt to trigger
public void insertEvent(Simulator.Event e,
long cycles)
insertEvent() method inserts an event into the
event queue of the simulator with the specified delay in clock cycles.
The event will then be executed at the future time specified
e - the event to be insertedcycles - the number of cycles in the future at which to firepublic void insertTimeout(long cycles)
insertTimeout() method inserts an event into the
event queue of the simulator that causes it to stop execution
and throw a Simulator.TimeoutException when the
specified number of clock cycles have expired.
cycles - the number of cycles to run before timing out
public PeriodicEvent insertPeriodicEvent(Simulator.Event e,
long period)
insertPeriodicEvent() method inserts an event into
the event queue of the simulator with the specified period. The
PeriodicEvent instance created will continually reinsert the
event after each firing to achieve predictable periodic behavior.
e - the event to insertperiod - the period in clock cycles
PeriodicEvent instance insertedpublic void removeEvent(Simulator.Event e)
removeEvent() method removes an event from
the event queue of the simulator. The comparison used is reference
equality, not .equals().
e - the event to removepublic void delay(long cycles)
delay() method introduces a delay in the execution
of the instructions of the program. This is used by some devices for
correct timing behavior. For example, the EEPROM, when written,
causes a small delay in which no instructions are executed.
cycles - the number of cycles to delay the simulation
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||