don't use secondary external address map; collapse submap instead
This commit is contained in:
@ -74,7 +74,10 @@ object AddrMap {
|
||||
def apply(elems: AddrMapEntry*): AddrMap = new AddrMap(elems)
|
||||
}
|
||||
|
||||
class AddrMap(entriesIn: Seq[AddrMapEntry], val start: BigInt = BigInt(0)) extends MemRegion {
|
||||
class AddrMap(
|
||||
entriesIn: Seq[AddrMapEntry],
|
||||
val start: BigInt = BigInt(0),
|
||||
val collapse: Boolean = false) extends MemRegion {
|
||||
private val slavePorts = HashMap[String, Int]()
|
||||
private val mapping = HashMap[String, MemRegion]()
|
||||
|
||||
@ -99,19 +102,27 @@ class AddrMap(entriesIn: Seq[AddrMapEntry], val start: BigInt = BigInt(0)) exten
|
||||
|
||||
r match {
|
||||
case r: AddrMap =>
|
||||
val subMap = new AddrMap(r.entries, base)
|
||||
val subMap = new AddrMap(r.entries, base, r.collapse)
|
||||
rebasedEntries += AddrMapEntry(name, subMap)
|
||||
mapping += name -> subMap
|
||||
mapping ++= subMap.mapping.map { case (k, v) => s"$name:$k" -> v }
|
||||
slavePorts ++= subMap.slavePorts.map { case (k, v) => s"$name:$k" -> (ind + v) }
|
||||
if (r.collapse) {
|
||||
slavePorts += (name -> ind)
|
||||
ind += 1
|
||||
} else {
|
||||
slavePorts ++= subMap.slavePorts.map {
|
||||
case (k, v) => s"$name:$k" -> (ind + v)
|
||||
}
|
||||
ind += r.numSlaves
|
||||
}
|
||||
case _ =>
|
||||
val e = MemRange(base, r.size, r.attr)
|
||||
rebasedEntries += AddrMapEntry(name, e)
|
||||
mapping += name -> e
|
||||
slavePorts += name -> ind
|
||||
ind += r.numSlaves
|
||||
}
|
||||
|
||||
ind += r.numSlaves
|
||||
base += r.size
|
||||
prot |= r.attr.prot
|
||||
cacheable &&= r.attr.cacheable
|
||||
|
Reference in New Issue
Block a user