1
0

Permit early grant acks to broadcast hub

This commit is contained in:
Andrew Waterman 2017-04-17 17:27:00 -07:00 committed by Andrew Waterman
parent cc9ec1d51a
commit 657f4d4e0c

View File

@ -226,17 +226,20 @@ class TLBroadcastTracker(id: Int, lineBytes: Int, probeCountBits: Int, bufferles
// Only one operation can be inflight per line, because we need to be sure // Only one operation can be inflight per line, because we need to be sure
// we send the request after all the probes we sent and before all the next probes // we send the request after all the probes we sent and before all the next probes
val idle = RegInit(Bool(true)) val got_e = RegInit(Bool(true))
val sent_d = RegInit(Bool(true))
val opcode = Reg(io.in_a.bits.opcode) val opcode = Reg(io.in_a.bits.opcode)
val param = Reg(io.in_a.bits.param) val param = Reg(io.in_a.bits.param)
val size = Reg(io.in_a.bits.size) val size = Reg(io.in_a.bits.size)
val source = Reg(io.in_a.bits.source) val source = Reg(io.in_a.bits.source)
val address = RegInit(UInt(id << lineShift, width = io.in_a.bits.address.getWidth)) val address = RegInit(UInt(id << lineShift, width = io.in_a.bits.address.getWidth))
val count = Reg(UInt(width = probeCountBits)) val count = Reg(UInt(width = probeCountBits))
val idle = got_e && sent_d
when (io.in_a.fire() && io.in_a_first) { when (io.in_a.fire() && io.in_a_first) {
assert (idle) assert (idle)
idle := Bool(false) sent_d := Bool(false)
got_e := io.in_a.bits.opcode =/= TLMessages.Acquire
opcode := io.in_a.bits.opcode opcode := io.in_a.bits.opcode
param := io.in_a.bits.param param := io.in_a.bits.param
size := io.in_a.bits.size size := io.in_a.bits.size
@ -245,12 +248,12 @@ class TLBroadcastTracker(id: Int, lineBytes: Int, probeCountBits: Int, bufferles
count := io.probe count := io.probe
} }
when (io.d_last) { when (io.d_last) {
assert (!idle) assert (!sent_d)
idle := opcode =/= TLMessages.Acquire sent_d := Bool(true)
} }
when (io.e_last) { when (io.e_last) {
assert (!idle) assert (!got_e)
idle := Bool(true) got_e := Bool(true)
} }
when (io.probenack || io.probedack) { when (io.probenack || io.probedack) {