Thanks a lot Mike! I checked the setState() funtion in the same .sm file. I
noticed that this funtion was not called anywhere. Also, I did change the
access permission to Invalid when the state is supposed to change to L2_IM.
Now I'm suspecting that the problem is that state transition only happens in
the next cycle after event is posted, so if two event happens in one cycle,
it is not going to work. Is this assumption correct?
One question, though. What exactly does TBE do?
Thank you!!
Lei
----- Original Message -----
From: "Mike Marty" <mikem@xxxxxxxxxxx>
To: "Lei Yang" <lya755@xxxxxxxxxxxxxxxxxxxx>; "Gems Users"
<gems-users@xxxxxxxxxxx>
Sent: Monday, January 22, 2007 9:57 AM
Subject: Re: [Gems-users] GEMS state transition problem
There is probably nothing allocated to hold your state (i.e., a cache tag
or TBE entry). You need to allocate something. See setState() in the
same .sm file to see how states are set.
--Mike
Dear list,
I've been working on a new protocol and I was trying to add new
transitions in the MSI_MOSI_CMP_directory protocol like this:
transition({L2_I, L2_NP}, L2_SomeEvent, L2_IM) {
someAction;
}
transition(L2_IM, L2_SomeOtherEvent, L2_M) {
someOtherAction;
}
However, when testing with a simple trace, I found that although the
state of a line appears to have changed from L2_NP to L2_IM, later on
when L2_SomeOtherEvent occurs, it refuses to change its state to L2_M and
complains about still being in state L2_NP and hence invalid transition,
as follows:
1635 1 0 L2Cache L2_SomeEvent L2_NP>L2_IM [0x400, line
0x400]
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1650:
m_id is 1
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1651:
m_version is 0
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1652:
g_eventQueue_ptr->getTime() is 1635
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1653:
addr is [0x400, line 0x400]
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1654:
event is L2_MigrationDone
Warning: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, const Ad
dress&) in generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1655:
state is L2_NP
Fatal Error: in fn TransitionResult
L2Cache_Controller::doTransitionWorker(L2Cache_Event, L2Cache_State,
L2Cache_State&, cons
t Address&) in
generated/MSI_MOSI_CMP_directory/L2Cache_Transitions.C:1656: Invalid
transition
I wonder what else is needed to change the state of a line in addition to
the transition() statement. Have anyone met with this problem before?
Please advice!
Thanks a lot!!
Lei
|