1
0

Fixed Hasti can't handle N masters to one slave #571 (#576)

This commit is contained in:
Leway Colin 2017-03-14 11:36:53 +08:00 committed by Wesley W. Terpstra
parent 4eb261c895
commit 1322a02637

View File

@ -282,7 +282,10 @@ class HastiXbar(nMasters: Int, addressMap: Seq[UInt=>Bool])(implicit p: Paramete
// However, if no slave is connected, for progress report ready anyway, if: // However, if no slave is connected, for progress report ready anyway, if:
// bad address (swallow request) OR idle (permit stupid masters to move FSM) // bad address (swallow request) OR idle (permit stupid masters to move FSM)
val autoready = nowhereM(m) || masters(m).isIdle() val autoready = nowhereM(m) || masters(m).isIdle()
val hready = Mux1H(unionGrantMS(m), slaves.map(_.hready ^ autoready)) ^ autoready val hready = if (nSlaves == 1)
Mux(unionGrantMS(m)(0), slaves(0).hready ^ autoready, Bool(false)) ^ autoready
else
Mux1H(unionGrantMS(m), slaves.map(_.hready ^ autoready)) ^ autoready
masters(m).hready := hready masters(m).hready := hready
// If we diverted a master, we need to absorb his address phase to replay later // If we diverted a master, we need to absorb his address phase to replay later
diversions(m).io.divert := (bubbleM(m) || blockedM(m)) && NSeq(m) && hready diversions(m).io.divert := (bubbleM(m) || blockedM(m)) && NSeq(m) && hready