mem-ruby: Allow same-cycle enqueue
authorTiago Muck <tiago.muck@arm.com>
Fri, 7 Jun 2019 23:16:10 +0000 (18:16 -0500)
committerTiago Mück <tiago.muck@arm.com>
Fri, 9 Oct 2020 00:07:27 +0000 (00:07 +0000)
commit6ade44d50c2d04becd8ff94e9becd77a5165530d
tree875966b75cbe80856b84f63c0f90eebbbfa7fb7d
parent52fa2b6f072bb5ecabac0595c78b97f50f30d507
mem-ruby: Allow same-cycle enqueue

Messages may be enqueued and be ready in the same cycle.

Using this feature may introduce nondeterminism in the protocol and
should be used in specific cases. A case study is to avoid needing an
additional cycle for internal protocol triggers (e.g. the All_Acks
event in src/mem/ruby/protocol/MOESI_CMP_directory-L2cache.sm).
To mitigate modeling mistakes, the 'allow_zero_latency' parameter must
be set for a MessageBuffer where this behavior is acceptable.

This changes also updates the Consumer to schedule events according to
this new behavior. The original implementation would not schedule a new
wakeup event if the wakeup for the Consumer had already been executed
in that cycle.

Additional authors:
- Tuan Ta <tuan.ta2@arm.com>

Change-Id: Ib194e7b4b4ee4b06da1baea17c0eb743f650dfdd
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31255
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/ruby/common/Consumer.cc
src/mem/ruby/common/Consumer.hh
src/mem/ruby/network/MessageBuffer.cc
src/mem/ruby/network/MessageBuffer.hh
src/mem/ruby/network/MessageBuffer.py