move memory width adapter from coreplex to periphery
This commit is contained in:
parent
e36441a046
commit
8a55521b01
@ -31,7 +31,7 @@ trait HasCoreplexParameters {
|
|||||||
lazy val nBanksPerMemChannel = p(NBanksPerMemoryChannel)
|
lazy val nBanksPerMemChannel = p(NBanksPerMemoryChannel)
|
||||||
lazy val lsb = p(BankIdLSB)
|
lazy val lsb = p(BankIdLSB)
|
||||||
lazy val innerParams = p.alterPartial({ case TLId => "L1toL2" })
|
lazy val innerParams = p.alterPartial({ case TLId => "L1toL2" })
|
||||||
lazy val outermostParams = p.alterPartial({ case TLId => "Outermost" })
|
lazy val outerParams = p.alterPartial({ case TLId => "L2toMC" })
|
||||||
lazy val outerMMIOParams = p.alterPartial({ case TLId => "L2toMMIO" })
|
lazy val outerMMIOParams = p.alterPartial({ case TLId => "L2toMMIO" })
|
||||||
lazy val globalAddrMap = p(rocketchip.GlobalAddrMap)
|
lazy val globalAddrMap = p(rocketchip.GlobalAddrMap)
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ abstract class BaseCoreplex(c: CoreplexConfig)(implicit p: Parameters) extends L
|
|||||||
|
|
||||||
abstract class BaseCoreplexBundle(val c: CoreplexConfig)(implicit val p: Parameters) extends Bundle with HasCoreplexParameters {
|
abstract class BaseCoreplexBundle(val c: CoreplexConfig)(implicit val p: Parameters) extends Bundle with HasCoreplexParameters {
|
||||||
val master = new Bundle {
|
val master = new Bundle {
|
||||||
val mem = Vec(c.nMemChannels, new ClientUncachedTileLinkIO()(outermostParams))
|
val mem = Vec(c.nMemChannels, new ClientUncachedTileLinkIO()(outerParams))
|
||||||
val mmio = new ClientUncachedTileLinkIO()(outerMMIOParams)
|
val mmio = new ClientUncachedTileLinkIO()(outerMMIOParams)
|
||||||
}
|
}
|
||||||
val slave = Vec(c.nSlaves, new ClientUncachedTileLinkIO()(innerParams)).flip
|
val slave = Vec(c.nSlaves, new ClientUncachedTileLinkIO()(innerParams)).flip
|
||||||
@ -112,14 +112,12 @@ abstract class BaseCoreplexModule[+L <: BaseCoreplex, +B <: BaseCoreplexBundle](
|
|||||||
l1tol2net.io.managers <> managerEndpoints.map(_.innerTL) :+ mmioManager.io.inner
|
l1tol2net.io.managers <> managerEndpoints.map(_.innerTL) :+ mmioManager.io.inner
|
||||||
|
|
||||||
// Create a converter between TileLinkIO and MemIO for each channel
|
// Create a converter between TileLinkIO and MemIO for each channel
|
||||||
val mem_ic = Module(new TileLinkMemoryInterconnect(nBanksPerMemChannel, c.nMemChannels)(outermostParams))
|
val mem_ic = Module(new TileLinkMemoryInterconnect(nBanksPerMemChannel, c.nMemChannels)(outerParams))
|
||||||
|
|
||||||
val outerTLParams = p.alterPartial({ case TLId => "L2toMC" })
|
|
||||||
val backendBuffering = TileLinkDepths(0,0,0,0,0)
|
val backendBuffering = TileLinkDepths(0,0,0,0,0)
|
||||||
for ((bank, icPort) <- managerEndpoints zip mem_ic.io.in) {
|
for ((bank, icPort) <- managerEndpoints zip mem_ic.io.in) {
|
||||||
val enqueued = TileLinkEnqueuer(bank.outerTL, backendBuffering)
|
val enqueued = TileLinkEnqueuer(bank.outerTL, backendBuffering)
|
||||||
val unwrapped = TileLinkIOUnwrapper(enqueued)
|
icPort <> TileLinkIOUnwrapper(enqueued)
|
||||||
TileLinkWidthAdapter(icPort, unwrapped)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
io.master.mem <> mem_ic.io.out
|
io.master.mem <> mem_ic.io.out
|
||||||
|
@ -132,15 +132,11 @@ class BaseCoreplexConfig extends Config (
|
|||||||
nManagers = 1,
|
nManagers = 1,
|
||||||
nCachingClients = site(NBanksPerMemoryChannel),
|
nCachingClients = site(NBanksPerMemoryChannel),
|
||||||
nCachelessClients = 0,
|
nCachelessClients = 0,
|
||||||
maxClientXacts = 1,
|
maxClientXacts = site(NAcquireTransactors) + 2,
|
||||||
maxClientsPerPort = site(NAcquireTransactors) + 2,
|
maxClientsPerPort = site(NBanksPerMemoryChannel),
|
||||||
maxManagerXacts = 1,
|
maxManagerXacts = 1,
|
||||||
dataBeats = innerDataBeats,
|
dataBeats = innerDataBeats,
|
||||||
dataBits = site(CacheBlockBytes)*8)
|
dataBits = site(CacheBlockBytes)*8)
|
||||||
case TLKey("Outermost") => site(TLKey("L2toMC")).copy(
|
|
||||||
maxClientXacts = site(NAcquireTransactors) + 2,
|
|
||||||
maxClientsPerPort = site(NBanksPerMemoryChannel),
|
|
||||||
dataBeats = site(MIFDataBeats))
|
|
||||||
case TLKey("L2toMMIO") => {
|
case TLKey("L2toMMIO") => {
|
||||||
TileLinkParameters(
|
TileLinkParameters(
|
||||||
coherencePolicy = new MICoherence(
|
coherencePolicy = new MICoherence(
|
||||||
@ -154,7 +150,6 @@ class BaseCoreplexConfig extends Config (
|
|||||||
dataBeats = innerDataBeats,
|
dataBeats = innerDataBeats,
|
||||||
dataBits = site(CacheBlockBytes) * 8)
|
dataBits = site(CacheBlockBytes) * 8)
|
||||||
}
|
}
|
||||||
case TLKey("MMIO_Outermost") => site(TLKey("L2toMMIO")).copy(dataBeats = site(MIFDataBeats))
|
|
||||||
|
|
||||||
case BootROMFile => "./bootrom/bootrom.img"
|
case BootROMFile => "./bootrom/bootrom.img"
|
||||||
case NTiles => 1
|
case NTiles => 1
|
||||||
|
@ -39,6 +39,10 @@ class BasePlatformConfig extends Config(
|
|||||||
addrBits = Dump("MEM_ADDR_BITS", site(PAddrBits)),
|
addrBits = Dump("MEM_ADDR_BITS", site(PAddrBits)),
|
||||||
idBits = Dump("MEM_ID_BITS", site(MIFTagBits)))
|
idBits = Dump("MEM_ID_BITS", site(MIFTagBits)))
|
||||||
}
|
}
|
||||||
|
case TLKey("Outermost") =>
|
||||||
|
site(TLKey("L2toMC")).copy(dataBeats = site(MIFDataBeats))
|
||||||
|
case TLKey("MMIO_Outermost") =>
|
||||||
|
site(TLKey("L2toMMIO")).copy(dataBeats = site(MIFDataBeats))
|
||||||
case BuildCoreplex =>
|
case BuildCoreplex =>
|
||||||
(c: CoreplexConfig, p: Parameters) => uncore.tilelink2.LazyModule(new DefaultCoreplex(c)(p)).module
|
(c: CoreplexConfig, p: Parameters) => uncore.tilelink2.LazyModule(new DefaultCoreplex(c)(p)).module
|
||||||
case NExtTopInterrupts => 2
|
case NExtTopInterrupts => 2
|
||||||
|
@ -82,6 +82,7 @@ trait HasPeripheryParameters {
|
|||||||
lazy val nMemAHBChannels = if (tMemChannels == BusType.AHB) nMemChannels else 0
|
lazy val nMemAHBChannels = if (tMemChannels == BusType.AHB) nMemChannels else 0
|
||||||
lazy val nMemTLChannels = if (tMemChannels == BusType.TL) nMemChannels else 0
|
lazy val nMemTLChannels = if (tMemChannels == BusType.TL) nMemChannels else 0
|
||||||
lazy val innerParams = p.alterPartial({ case TLId => "L1toL2" })
|
lazy val innerParams = p.alterPartial({ case TLId => "L1toL2" })
|
||||||
|
lazy val outerParams = p.alterPartial({ case TLId => "L2toMC" })
|
||||||
lazy val outerMMIOParams = p.alterPartial({ case TLId => "L2toMMIO" })
|
lazy val outerMMIOParams = p.alterPartial({ case TLId => "L2toMMIO" })
|
||||||
lazy val outermostParams = p.alterPartial({ case TLId => "Outermost" })
|
lazy val outermostParams = p.alterPartial({ case TLId => "Outermost" })
|
||||||
lazy val outermostMMIOParams = p.alterPartial({ case TLId => "MMIO_Outermost" })
|
lazy val outermostMMIOParams = p.alterPartial({ case TLId => "MMIO_Outermost" })
|
||||||
@ -171,8 +172,10 @@ trait PeripheryMasterMemModule extends HasPeripheryParameters {
|
|||||||
val io: PeripheryMasterMemBundle
|
val io: PeripheryMasterMemBundle
|
||||||
val coreplexIO: BaseCoreplexBundle
|
val coreplexIO: BaseCoreplexBundle
|
||||||
|
|
||||||
|
val edgeMem = coreplexIO.master.mem.map(TileLinkWidthAdapter(_, outermostParams))
|
||||||
|
|
||||||
// Abuse the fact that zip takes the shorter of the two lists
|
// Abuse the fact that zip takes the shorter of the two lists
|
||||||
((io.mem_axi zip coreplexIO.master.mem) zipWithIndex) foreach { case ((axi, mem), idx) =>
|
((io.mem_axi zip edgeMem) zipWithIndex) foreach { case ((axi, mem), idx) =>
|
||||||
val axi_sync = PeripheryUtils.convertTLtoAXI(mem)
|
val axi_sync = PeripheryUtils.convertTLtoAXI(mem)
|
||||||
axi_sync.ar.bits.cache := CACHE_NORMAL_NOCACHE_BUF
|
axi_sync.ar.bits.cache := CACHE_NORMAL_NOCACHE_BUF
|
||||||
axi_sync.aw.bits.cache := CACHE_NORMAL_NOCACHE_BUF
|
axi_sync.aw.bits.cache := CACHE_NORMAL_NOCACHE_BUF
|
||||||
@ -182,11 +185,11 @@ trait PeripheryMasterMemModule extends HasPeripheryParameters {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
(io.mem_ahb zip coreplexIO.master.mem) foreach { case (ahb, mem) =>
|
(io.mem_ahb zip edgeMem) foreach { case (ahb, mem) =>
|
||||||
ahb <> PeripheryUtils.convertTLtoAHB(mem, atomics = false)
|
ahb <> PeripheryUtils.convertTLtoAHB(mem, atomics = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
(io.mem_tl zip coreplexIO.master.mem) foreach { case (tl, mem) =>
|
(io.mem_tl zip edgeMem) foreach { case (tl, mem) =>
|
||||||
tl <> TileLinkEnqueuer(mem, 2)
|
tl <> TileLinkEnqueuer(mem, 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user