mem-ruby: expose transition info to actions

SLICC compiler generates the curTransitionEvent and
curTransitionNextState functions, which allows actions to check which
event triggered the current transition and what's the next state.

Change-Id: I79c8c4f2839633b7fb3b23cbbdbb32f25db90eab
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31420
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Tiago Mück
2020-07-16 11:14:40 -05:00
parent 64a3e28852
commit 60df5a4d44

View File

@@ -380,6 +380,12 @@ TransitionResult doTransitionWorker(${ident}_Event event,
code('''
Addr addr);
${ident}_Event m_curTransitionEvent;
${ident}_State m_curTransitionNextState;
${ident}_Event curTransitionEvent() { return m_curTransitionEvent; }
${ident}_State curTransitionNextState() { return m_curTransitionNextState; }
int m_counters[${ident}_State_NUM][${ident}_Event_NUM];
int m_event_counters[${ident}_Event_NUM];
bool m_possible[${ident}_State_NUM][${ident}_Event_NUM];
@@ -1407,6 +1413,8 @@ ${ident}_Controller::doTransitionWorker(${ident}_Event event,
code('''
Addr addr)
{
m_curTransitionEvent = event;
m_curTransitionNextState = next_state;
switch(HASH_FUN(state, event)) {
''')
@@ -1427,10 +1435,12 @@ ${ident}_Controller::doTransitionWorker(${ident}_Event event,
# is determined before any actions of the transition
# execute, and therefore the next state calculation cannot
# depend on any of the transitionactions.
case('next_state = getNextState(addr);')
case('next_state = getNextState(addr); '
'm_curTransitionNextState = next_state;')
else:
ns_ident = trans.nextState.ident
case('next_state = ${ident}_State_${ns_ident};')
case('next_state = ${ident}_State_${ns_ident}; '
'm_curTransitionNextState = next_state;')
actions = trans.actions
request_types = trans.request_types