Permit early grant acks to broadcast hub
This commit is contained in:
parent
cc9ec1d51a
commit
657f4d4e0c
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user