setState/getState are called by the Ruby system. Your new state needs to
be stored somewhere. If neither a cache block or TBE entry is allocated,
getState will return "NP" no matter what the previous transitions did.
A TBE tracks outstanding requests, writebacks, etc. It is used to hold
state.
--Mike
> 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
> >
> >
>
>
|