put memory into the address map and no longer use MMIOBase
This commit is contained in:
parent
325d3671c4
commit
f7af908969
2
chisel2
2
chisel2
@ -1 +1 @@
|
|||||||
Subproject commit 1ee157fea9bc5816bce04aadaa554b8970cb8871
|
Subproject commit c736c900aed0dc71f5d1189044ef902f6a3627f6
|
2
firrtl
2
firrtl
@ -1 +1 @@
|
|||||||
Subproject commit 484262d6ce6979276853cbe202fc038b4700ce2d
|
Subproject commit ec32c852b57a42c7741f8ae27d59c21fcdb86a82
|
@ -1 +1 @@
|
|||||||
Subproject commit 88de2b8e0a8b5e6e0e672cccdf1ddc25c6698374
|
Subproject commit 0204a9679bf1c2e79e6e603fd555abaf9892d0f5
|
@ -1 +1 @@
|
|||||||
Subproject commit f49e4bbb2910959f326218ff6f86a671c4e1c412
|
Subproject commit cd3d2ca2190f1c16fa65840dbc86527e50613b5f
|
2
rocket
2
rocket
@ -1 +1 @@
|
|||||||
Subproject commit f519082ff320f34ae7971c5590c8c8a919857cf4
|
Subproject commit bcc378aa717daf1a3dfcadd6cd1f77c58ba3ed47
|
@ -35,9 +35,10 @@ class DefaultConfig extends Config (
|
|||||||
new AddrMap(deviceTree +: csrs :+ scr)
|
new AddrMap(deviceTree +: csrs :+ scr)
|
||||||
}
|
}
|
||||||
def makeConfigString() = {
|
def makeConfigString() = {
|
||||||
val addrMap = new AddrHashMap(site(GlobalAddrMap), site(MMIOBase))
|
val addrMap = new AddrHashMap(site(GlobalAddrMap))
|
||||||
val xLen = site(XLen)
|
val xLen = site(XLen)
|
||||||
val res = new StringBuilder
|
val res = new StringBuilder
|
||||||
|
val memSize = addrMap(s"mem").size
|
||||||
res append "platform {\n"
|
res append "platform {\n"
|
||||||
res append " vendor ucb;\n"
|
res append " vendor ucb;\n"
|
||||||
res append " arch rocket;\n"
|
res append " arch rocket;\n"
|
||||||
@ -45,7 +46,7 @@ class DefaultConfig extends Config (
|
|||||||
res append "ram {\n"
|
res append "ram {\n"
|
||||||
res append " 0 {\n"
|
res append " 0 {\n"
|
||||||
res append " addr 0;\n"
|
res append " addr 0;\n"
|
||||||
res append s" size 0x${site(MMIOBase).toString(16)};\n"
|
res append s" size 0x${memSize.toString(16)};\n"
|
||||||
res append " };\n"
|
res append " };\n"
|
||||||
res append "};\n"
|
res append "};\n"
|
||||||
res append "core {\n"
|
res append "core {\n"
|
||||||
@ -222,11 +223,11 @@ class DefaultConfig extends Config (
|
|||||||
maxClientsPerPort = site(MaxBanksPerMemoryChannel),
|
maxClientsPerPort = site(MaxBanksPerMemoryChannel),
|
||||||
dataBeats = site(MIFDataBeats))
|
dataBeats = site(MIFDataBeats))
|
||||||
case TLKey("L2toMMIO") => {
|
case TLKey("L2toMMIO") => {
|
||||||
val addrMap = new AddrHashMap(site(GlobalAddrMap), site(MMIOBase))
|
val addrMap = new AddrHashMap(site(GlobalAddrMap))
|
||||||
TileLinkParameters(
|
TileLinkParameters(
|
||||||
coherencePolicy = new MICoherence(
|
coherencePolicy = new MICoherence(
|
||||||
new NullRepresentation(site(NBanksPerMemoryChannel))),
|
new NullRepresentation(site(NBanksPerMemoryChannel))),
|
||||||
nManagers = addrMap.nEntries,
|
nManagers = addrMap.nEntries - 1,
|
||||||
nCachingClients = 0,
|
nCachingClients = 0,
|
||||||
nCachelessClients = 1,
|
nCachelessClients = 1,
|
||||||
maxClientXacts = 4,
|
maxClientXacts = 4,
|
||||||
@ -246,10 +247,12 @@ class DefaultConfig extends Config (
|
|||||||
case CacheBlockOffsetBits => log2Up(here(CacheBlockBytes))
|
case CacheBlockOffsetBits => log2Up(here(CacheBlockBytes))
|
||||||
case UseBackupMemoryPort => false
|
case UseBackupMemoryPort => false
|
||||||
case UseHtifClockDiv => true
|
case UseHtifClockDiv => true
|
||||||
case MMIOBase => Dump("MEM_SIZE", BigInt(1L << 30)) // 1 GB
|
|
||||||
case ConfigString => makeConfigString()
|
case ConfigString => makeConfigString()
|
||||||
case GlobalAddrMap => {
|
case GlobalAddrMap => {
|
||||||
|
val memsize = BigInt(1L << 30)
|
||||||
|
Dump("MEM_SIZE", memsize)
|
||||||
AddrMap(
|
AddrMap(
|
||||||
|
AddrMapEntry("mem", None, MemSize(memsize, AddrMapConsts.RWX, true)),
|
||||||
AddrMapEntry("conf", None,
|
AddrMapEntry("conf", None,
|
||||||
MemSubmap(BigInt(1L << 30), genCsrAddrMap)),
|
MemSubmap(BigInt(1L << 30), genCsrAddrMap)),
|
||||||
AddrMapEntry("devices", None,
|
AddrMapEntry("devices", None,
|
||||||
|
@ -169,14 +169,14 @@ class Uncore(implicit val p: Parameters) extends Module
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Arbitrate SCR access between MMIO and HTIF
|
// Arbitrate SCR access between MMIO and HTIF
|
||||||
val addrHashMap = new AddrHashMap(p(GlobalAddrMap), p(MMIOBase))
|
val addrHashMap = new AddrHashMap(p(GlobalAddrMap))
|
||||||
val scrFile = Module(new SCRFile("UNCORE_SCR",addrHashMap("conf:scr").start))
|
val scrFile = Module(new SCRFile("UNCORE_SCR",addrHashMap("conf:scr").start))
|
||||||
val scrArb = Module(new SmiArbiter(2, scrDataBits, scrAddrBits))
|
val scrArb = Module(new SmiArbiter(2, scrDataBits, scrAddrBits))
|
||||||
scrArb.io.in(0) <> htif.io.scr
|
scrArb.io.in(0) <> htif.io.scr
|
||||||
scrArb.io.in(1) <> outmemsys.io.scr
|
scrArb.io.in(1) <> outmemsys.io.scr
|
||||||
scrFile.io.smi <> scrArb.io.out
|
scrFile.io.smi <> scrArb.io.out
|
||||||
scrFile.io.scr.attach(Wire(init = UInt(nTiles)), "N_CORES")
|
scrFile.io.scr.attach(Wire(init = UInt(nTiles)), "N_CORES")
|
||||||
scrFile.io.scr.attach(Wire(init = UInt(p(MMIOBase) >> 20)), "MMIO_BASE")
|
scrFile.io.scr.attach(Wire(init = UInt(addrHashMap("mem").size >> 20)), "MMIO_BASE")
|
||||||
// scrFile.io.scr <> (... your SCR connections ...)
|
// scrFile.io.scr <> (... your SCR connections ...)
|
||||||
|
|
||||||
// Configures the enabled memory channels. This can't be changed while the
|
// Configures the enabled memory channels. This can't be changed while the
|
||||||
@ -221,16 +221,18 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
val deviceTree = new NastiIO
|
val deviceTree = new NastiIO
|
||||||
}
|
}
|
||||||
|
|
||||||
val mmioBase = p(MMIOBase)
|
val addrMap = p(GlobalAddrMap)
|
||||||
|
val addrHashMap = new AddrHashMap(addrMap)
|
||||||
val rtc = Module(new RTC(CSRs.mtime))
|
val memSize = addrHashMap("mem").size
|
||||||
|
|
||||||
// Create a simple L1toL2 NoC between the tiles+htif and the banks of outer memory
|
// Create a simple L1toL2 NoC between the tiles+htif and the banks of outer memory
|
||||||
// Cached ports are first in client list, making sharerToClientId just an indentity function
|
// Cached ports are first in client list, making sharerToClientId just an indentity function
|
||||||
// addrToBank is sed to hash physical addresses (of cache blocks) to banks (and thereby memory channels)
|
// addrToBank is sed to hash physical addresses (of cache blocks) to banks (and thereby memory channels)
|
||||||
def sharerToClientId(sharerId: UInt) = sharerId
|
def sharerToClientId(sharerId: UInt) = sharerId
|
||||||
def addrToBank(addr: Bits): UInt = {
|
def addrToBank(addr: Bits): UInt = {
|
||||||
Mux(addr.toUInt < UInt(mmioBase >> log2Up(p(CacheBlockBytes))),
|
val isMemory = addrHashMap.isInRegion("mem",
|
||||||
|
addr.toUInt << log2Up(p(CacheBlockBytes)))
|
||||||
|
Mux(isMemory,
|
||||||
if (nBanks > 1) addr(lsb + log2Up(nBanks) - 1, lsb) else UInt(0),
|
if (nBanks > 1) addr(lsb + log2Up(nBanks) - 1, lsb) else UInt(0),
|
||||||
UInt(nBanks))
|
UInt(nBanks))
|
||||||
}
|
}
|
||||||
@ -247,6 +249,8 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
case OuterTLId => "L2toMMIO"
|
case OuterTLId => "L2toMMIO"
|
||||||
})))
|
})))
|
||||||
|
|
||||||
|
val rtc = Module(new RTC(CSRs.mtime))
|
||||||
|
|
||||||
// Wire the tiles and htif to the TileLink client ports of the L1toL2 network,
|
// Wire the tiles and htif to the TileLink client ports of the L1toL2 network,
|
||||||
// and coherence manager(s) to the other side
|
// and coherence manager(s) to the other side
|
||||||
l1tol2net.io.clients_cached <> io.tiles_cached
|
l1tol2net.io.clients_cached <> io.tiles_cached
|
||||||
@ -258,13 +262,10 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
val outermostTLParams = p.alterPartial({case TLId => "Outermost"})
|
val outermostTLParams = p.alterPartial({case TLId => "Outermost"})
|
||||||
val backendBuffering = TileLinkDepths(0,0,0,0,0)
|
val backendBuffering = TileLinkDepths(0,0,0,0,0)
|
||||||
|
|
||||||
val addrMap = p(GlobalAddrMap)
|
|
||||||
val addrHashMap = new AddrHashMap(addrMap, mmioBase)
|
|
||||||
val nSlaves = addrHashMap.nEntries
|
|
||||||
|
|
||||||
// TODO: the code to print this stuff should live somewhere else
|
// TODO: the code to print this stuff should live somewhere else
|
||||||
println("Generated Address Map")
|
println("Generated Address Map")
|
||||||
for ((name, base, size, _) <- addrHashMap.sortedEntries) {
|
for ((name, base, size, _, _) <- addrHashMap.sortedEntries) {
|
||||||
println(f"\t$name%s $base%x - ${base + size - 1}%x")
|
println(f"\t$name%s $base%x - ${base + size - 1}%x")
|
||||||
}
|
}
|
||||||
println("Generated Configuration String")
|
println("Generated Configuration String")
|
||||||
@ -298,7 +299,7 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
|
|
||||||
val mmio_narrow = Module(new TileLinkIONarrower("L2toMMIO", "MMIO_Outermost"))
|
val mmio_narrow = Module(new TileLinkIONarrower("L2toMMIO", "MMIO_Outermost"))
|
||||||
val mmio_net = Module(new TileLinkRecursiveInterconnect(
|
val mmio_net = Module(new TileLinkRecursiveInterconnect(
|
||||||
1, addrHashMap.nEntries, addrMap, mmioBase)(mmioOutermostTLParams))
|
1, addrHashMap.nEntries - 1, addrMap.tail, memSize)(mmioOutermostTLParams))
|
||||||
|
|
||||||
//val mmio_conv = Module(new NastiIOTileLinkIOConverter()(outermostTLParams))
|
//val mmio_conv = Module(new NastiIOTileLinkIOConverter()(outermostTLParams))
|
||||||
mmio_narrow.io.in <> mmioManager.io.outer
|
mmio_narrow.io.in <> mmioManager.io.outer
|
||||||
@ -312,13 +313,13 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
|
|
||||||
for (i <- 0 until nTiles) {
|
for (i <- 0 until nTiles) {
|
||||||
val csrName = s"conf:csr$i"
|
val csrName = s"conf:csr$i"
|
||||||
val csrPort = addrHashMap(csrName).port
|
val csrPort = addrHashMap(csrName).port - 1
|
||||||
val conv = Module(new SmiIONastiIOConverter(xLen, csrAddrBits))
|
val conv = Module(new SmiIONastiIOConverter(xLen, csrAddrBits))
|
||||||
connectTilelinkNasti(conv.io.nasti, mmio_net.io.out(csrPort))(mmioOutermostTLParams)
|
connectTilelinkNasti(conv.io.nasti, mmio_net.io.out(csrPort))(mmioOutermostTLParams)
|
||||||
io.csr(i) <> conv.io.smi
|
io.csr(i) <> conv.io.smi
|
||||||
}
|
}
|
||||||
|
|
||||||
val scrPort = addrHashMap("conf:scr").port
|
val scrPort = addrHashMap("conf:scr").port - 1
|
||||||
val scr_conv = Module(new SmiIONastiIOConverter(scrDataBits, scrAddrBits))
|
val scr_conv = Module(new SmiIONastiIOConverter(scrDataBits, scrAddrBits))
|
||||||
connectTilelinkNasti(scr_conv.io.nasti, mmio_net.io.out(scrPort))(mmioOutermostTLParams)
|
connectTilelinkNasti(scr_conv.io.nasti, mmio_net.io.out(scrPort))(mmioOutermostTLParams)
|
||||||
io.scr <> scr_conv.io.smi
|
io.scr <> scr_conv.io.smi
|
||||||
@ -327,12 +328,12 @@ class OuterMemorySystem(implicit val p: Parameters) extends Module with HasTopLe
|
|||||||
val lo_width = p(StreamLoopbackWidth)
|
val lo_width = p(StreamLoopbackWidth)
|
||||||
val lo_size = p(StreamLoopbackSize)
|
val lo_size = p(StreamLoopbackSize)
|
||||||
val lo_conv = Module(new NastiIOStreamIOConverter(lo_width))
|
val lo_conv = Module(new NastiIOStreamIOConverter(lo_width))
|
||||||
val lo_port = addrHashMap("devices:loopback").port
|
val lo_port = addrHashMap("devices:loopback").port - 1
|
||||||
connectTilelinkNasti(lo_conv.io.nasti, mmio_net.io.out(lo_port))(mmioOutermostTLParams)
|
connectTilelinkNasti(lo_conv.io.nasti, mmio_net.io.out(lo_port))(mmioOutermostTLParams)
|
||||||
lo_conv.io.stream.in <> Queue(lo_conv.io.stream.out, lo_size)
|
lo_conv.io.stream.in <> Queue(lo_conv.io.stream.out, lo_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
val dtPort = addrHashMap("conf:devicetree").port
|
val dtPort = addrHashMap("conf:devicetree").port - 1
|
||||||
connectTilelinkNasti(io.deviceTree, mmio_net.io.out(dtPort))(mmioOutermostTLParams)
|
connectTilelinkNasti(io.deviceTree, mmio_net.io.out(dtPort))(mmioOutermostTLParams)
|
||||||
|
|
||||||
val mem_channels = Wire(Vec(nMemChannels, new NastiIO))
|
val mem_channels = Wire(Vec(nMemChannels, new NastiIO))
|
||||||
|
2
uncore
2
uncore
@ -1 +1 @@
|
|||||||
Subproject commit 83bcedf87be79fffb5372cc66c61312bf28eadcc
|
Subproject commit 6aac33ff3eefdca9e0eda2540e7f4a311cd3c02c
|
Loading…
Reference in New Issue
Block a user