E500v2
The E500v2 models the NXP processor core of the same name. This includes the SPE instruction set.
@e500v2 Reference
e500v2 Reference
Properties
Name | Type | Description |
---|---|---|
CPUId |
uint32_t |
|
CPUType |
int32_t |
|
Class |
*void |
Class object |
Component |
*void |
Pointer to component object if part of component |
LoggingFlags |
uint64_t |
Flags for logging info |
Name |
*char |
Object name |
TimeSource |
*void |
Time source object |
acc |
uint64_t |
Accumulator register |
atbl |
uint32_t |
|
atbu |
uint32_t |
|
bbear |
uint32_t |
|
bbtar |
uint32_t |
|
bucsr |
uint32_t |
|
config.exitOnSync |
uint8_t |
|
config.measureExecTime |
uint8_t |
|
cpi |
double |
Cycles per instruction |
cr |
uint32_t |
|
csrrs |
[uint32_t; 2] |
|
ctr |
uint32_t |
|
dac1 |
uint32_t |
|
dac2 |
uint32_t |
|
dbcrs |
[uint32_t; 3] |
|
dbsr |
uint32_t |
|
dear |
uint32_t |
|
dec |
uint32_t |
|
decar |
uint32_t |
|
devices |
temu_IfaceRefArray |
|
dvc1 |
uint32_t |
|
dvc2 |
uint32_t |
|
esr |
uint32_t |
|
exitReason |
int32_t |
|
freq |
int64_t |
Frequency in Hz |
gprs |
[uint64_t; 32] |
|
hids |
[uint32_t; 2] |
|
iac1 |
uint32_t |
|
iac2 |
uint32_t |
|
idleSteps |
int64_t |
|
ipc |
double |
Instructions per cycle |
irq |
int8_t |
|
irqClient |
temu_IfaceRef/ <unknown> |
|
ivors |
[uint32_t; 64] |
|
ivpr |
uint32_t |
|
l1cfg0 |
uint32_t |
|
l1cfg1 |
uint32_t |
|
l1csr0 |
uint32_t |
|
l1csr1 |
uint32_t |
|
lr |
uint32_t |
|
mass |
[uint32_t; 7] |
|
mcar |
uint32_t |
|
mcsr |
uint32_t |
|
mcsrrs |
[uint32_t; 2] |
|
memAccess |
temu_IfaceRef/ <unknown> |
Level 1 memory access interface (MMU) |
memAccessL2 |
temu_IfaceRef/ <unknown> |
Level 2 memory access interface (physical) |
memSpace |
*void |
Memory space. |
memory |
temu_IfaceRef/ <unknown> |
|
mmucfg |
uint32_t |
|
mmucsr0 |
uint32_t |
|
msr |
uint32_t |
|
nextEvent |
int64_t |
Next event |
parentTimeSource |
*void |
Parent time source |
pc |
uint32_t |
Program counter |
pdcManager |
temu_IfaceRef/ <unknown> |
Pre-decode cache manager (normally memory space) |
pid0 |
uint32_t |
|
pid1 |
uint32_t |
|
pid2 |
uint32_t |
|
pir |
uint32_t |
|
pmc0 |
uint32_t |
|
pmc1 |
uint32_t |
|
pmc2 |
uint32_t |
|
pmc3 |
uint32_t |
|
pmgc0 |
uint32_t |
|
pmlca0 |
uint32_t |
|
pmlca1 |
uint32_t |
|
pmlca2 |
uint32_t |
|
pmlca3 |
uint32_t |
|
pmlcb0 |
uint32_t |
|
pmlcb1 |
uint32_t |
|
pmlcb2 |
uint32_t |
|
pmlcb3 |
uint32_t |
|
powerState |
uint32_t |
|
pvr |
uint32_t |
|
skipIdleTags |
uint64_t |
|
spefscr |
uint32_t |
|
sprgs |
[uint32_t; 8] |
|
srrs |
[uint32_t; 2] |
|
startSteps |
int64_t |
Start steps of the time source |
state |
int32_t |
|
steps |
int64_t |
Steps of the time source |
stickyFlags |
uint32_t |
Set bit 0 to 1 to not exit CPU on halted mode. |
svr |
uint32_t |
|
targetExec |
temu_IfaceRef/ <unknown> |
Target execution interface |
targetSteps |
int64_t |
Target steps of the time source |
tcr |
uint32_t |
|
tlb0cfg |
uint32_t |
|
tlb1cfg |
uint32_t |
|
tsr |
uint32_t |
|
upmc0 |
uint32_t |
|
upmc1 |
uint32_t |
|
upmc2 |
uint32_t |
|
upmc3 |
uint32_t |
|
upmgc0 |
uint32_t |
|
upmlca0 |
uint32_t |
|
upmlca1 |
uint32_t |
|
upmlca2 |
uint32_t |
|
upmlca3 |
uint32_t |
|
upmlcb0 |
uint32_t |
|
upmlcb1 |
uint32_t |
|
upmlcb2 |
uint32_t |
|
upmlcb3 |
uint32_t |
|
usrpg0 |
uint32_t |
|
xer |
uint32_t |
Interfaces
Name | Type | Description |
---|---|---|
ClockIface |
ClockIface |
|
CodePatternIface |
temu::CodePatternIface |
|
CpuIface |
temu::CpuIface |
|
E500MMUIface |
temu::E500MMUIface |
MMU interface for the E500 |
InvalidMemAccessIface |
MemAccessIface |
|
IrqIface |
IrqCtrlIface |
|
MemoryIface |
MemoryIface |
|
MmuMemAccessIface |
MemAccessIface |
MMU access interface |
ObjectIface |
ObjectIface |
|
PowerIface |
PowerIface |
|
PowerPCIface |
temu::PowerPCIface |
|
ResetIface |
ResetIface |
Commands
Name | Description |
---|---|
add-call |
Adds a call at the specific address. The call operation calls a predefined method which logs that it is invoked.It is primarily useful for debugging. |
add-idle |
Adds an explicit idle operation at the specific address. |
add-skip |
Adds a skip operation at the specific address. After this, the given number of instructions will be skipped. |
delete |
Dispose instance of e500v2 |
printTLB0 |
Print TLB0 |
printTLB1 |
Print TLB1 |
raiseCritical |
Raise critical interrupt |
raiseExternal |
Raise external interrupt |
setPC |
Set PC |
setTLB0Entry |
Add entry to TLB0 |
setTLB1Entry |
Add entry to TLB1 |
stacktrace |
ABI stack trace |
wake-up |
Wakes up the processor. |
Command add-idle Arguments
Name | Type | Required | Description |
---|---|---|---|
pa |
int |
yes |
Physical Address |
tag |
int |
no |
Tag of idle operation |
Command add-skip Arguments
Name | Type | Required | Description |
---|---|---|---|
pa |
int |
yes |
Physical Address |
steps |
int |
yes |
Steps to skip |
Note on Trap Support
TEMU supports the raising of traps, via either the API or the command line. Some Book-E PowerPC traps are parametarized, and the standard interfaces sets the parameters to zero.
The parameters need to be applied manually after using the interfaces or command line.
Trap Name | Note |
---|---|
|
|
|
|
|
|
|
|
|
|
In addition, the e500v2 core does not support all Book-E traps, please consult the hardware documentation for further information.
Limitations
-
No static timing model is defined at this moment. That means that one instruction take one cycle to finish.
-
MMU model is not yet validated against hardware.
-
Cache control interfaces are not implemented or supported, this can be addressed if needed.
-
The errata described in the e500CORERMAD is not correctly simulated. the following instructions deviates from hardware errata and are implemented as documented instead:
-
evmwlssiaaw
-
evmwlssianw
-
evmwlusiaaw
-
evmwlusianw
-