Hi,
"Resource stall" means that you are running out of something to perform the
transition right now.
Something can be: room in the TBE table, banks in a cache tag or data array,
space in a message buffer, etc.
All these things are grouped under the concept of resources.
Before a transition takes place, SLICC introduces checks for all resources
consumed by the upcoming transition.
Specifically, an enqueue block triggers a check on the available space in the
enqueue buffer. check_allocate(SOMETHING) will test the return value of
SOMETHING.areNSlotsAvailable(...). Finally, a "transition(...) {RESOURCE_TAG}
{...}" (notice the extra braces with RESOURCE_TAG in), will test the return
value of checkResourceAvailable(RESOURCE_TAG, address) that you implement
yourself in your machine definition. The later typically is for more advanced
protocols.
If one of the required resources is lacking (the corresponding test fails),
then the transition will not take place.
It will still be logged in the protocol trace but with the Resource Stall flag
at the end to indicate that the transition did not take place.
The controller then schedules a wake up at the next cycle to retry the
transition and then jump to the next in_port.
In you case, the transition requires two resources to take place: a slot in the
TBE table for the i_allocateTBE action and an entry in the requestNetwork
buffer for the a_issueGETS action. You are likely running out of one of these
two resources.
Sadly, SLICC will not tell you witch one... Luckily, because this is perfectly
normal, you probably don't need to know unless you are hacking the protocol and
suspect this is a bug.
If you scroll down (possibly a few hundred lines), you should see the
transition being performed at some point (no resource stall at the end).
I recommend grepping on the line address to remove some noise ;)
Gabriel
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s