Hi Theo,

There are a number of poorly documented "rules" to writing SLICC protocols.
One rule is that you should not do *anything* other than trigger a
transition (call trigger(<Event>)) in a in_port. This sounds like the
underlying problem that you ran into.

Another rule that isn't documented is that the only place you should use a
'if' statement is in in_ports. You should never use an 'if' (to take two
different actions) in an 'action' block.

The reason for these two rules is that before a transition is triggered
(and its actions happen) Ruby checks all of the actions, etc. to make sure
that the resources required are available. If they're not, then a "protocol
stall" or a "resource stall" is returned instead of success by the
"in_port". If you bypass these mechanisms, strange things happen :).

Hopefully this makes it a bit more clear. Great questions, BTW!

Cheers,
Jason

On Sat, Jul 4, 2020 at 5:00 AM tolausso--- via gem5-users <
gem5-users@gem5.org> wrote:

> Hi Jason,
>
> Thank you for your very helpful (and prompt) reply!
>
> You were right that the SC_Failed was a red herring.
> After playing around with my protocol a bit more, the issue seems to have
> been that I was making the callback for load and store hits (e.g.
> `sequencer.{x}Callback(address, entry, false)`) directly in the
> mandatoryQueue_in definition, rather than by invoking a transition which
> then made the callback -- it appears this makes the callback silently fail.
> What's a bit strange is that callbacks for external hits (e.g.
> `sequencer.{x}(address, entry, true, {data-source})`) seem to work just
> fine when you declare them directly in an in_port rather than as part of an
> invoked transition... Not sure if this is either because the mandatoryQueue
> is a bit special, or if its because of the "initial access was a miss" flag.
>
> Thank you once again for taking the time to help out a less experienced
> fisherman :)
>
> Best,
> Theo
> _______________________________________________
> gem5-users mailing list -- gem5-users@gem5.org
> To unsubscribe send an email to gem5-users-le...@gem5.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>
_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to