tile: remove global Field ResetVectorBits
Reset vector width is determined by systemBus.busView. Also move some defs from HasCoreParameters to HasTileParameters.
This commit is contained in:
@ -25,17 +25,32 @@ trait TileParams {
|
||||
|
||||
trait HasTileParameters {
|
||||
implicit val p: Parameters
|
||||
val tileParams: TileParams = p(TileKey)
|
||||
def tileParams: TileParams = p(TileKey)
|
||||
|
||||
val usingVM = tileParams.core.useVM
|
||||
val usingUser = tileParams.core.useUser || usingVM
|
||||
val usingDebug = tileParams.core.useDebug
|
||||
val usingRoCC = !tileParams.rocc.isEmpty
|
||||
val usingBTB = tileParams.btb.isDefined && tileParams.btb.get.nEntries > 0
|
||||
val usingPTW = usingVM
|
||||
val usingDataScratchpad = tileParams.dcache.flatMap(_.scratch).isDefined
|
||||
def usingVM: Boolean = tileParams.core.useVM
|
||||
def usingUser: Boolean = tileParams.core.useUser || usingVM
|
||||
def usingDebug: Boolean = tileParams.core.useDebug
|
||||
def usingRoCC: Boolean = !tileParams.rocc.isEmpty
|
||||
def usingBTB: Boolean = tileParams.btb.isDefined && tileParams.btb.get.nEntries > 0
|
||||
def usingPTW: Boolean = usingVM
|
||||
def usingDataScratchpad: Boolean = tileParams.dcache.flatMap(_.scratch).isDefined
|
||||
|
||||
val hartIdLen = p(MaxHartIdBits)
|
||||
def xLen: Int = p(XLen)
|
||||
def xBytes: Int = xLen / 8
|
||||
def pgIdxBits: Int = 12
|
||||
def pgLevelBits: Int = 10 - log2Ceil(xLen / 32)
|
||||
def vaddrBits: Int = pgIdxBits + pgLevels * pgLevelBits
|
||||
def paddrBits: Int = p(SharedMemoryTLEdge).bundle.addressBits
|
||||
def vpnBits: Int = vaddrBits - pgIdxBits
|
||||
def ppnBits: Int = paddrBits - pgIdxBits
|
||||
def pgLevels: Int = p(PgLevels)
|
||||
def asIdBits: Int = p(ASIdBits)
|
||||
def vpnBitsExtended: Int = vpnBits + (vaddrBits < xLen).toInt
|
||||
def vaddrBitsExtended: Int = vpnBitsExtended + pgIdxBits
|
||||
def maxPAddrBits: Int = xLen match { case 32 => 34; case 64 => 56 }
|
||||
|
||||
def hartIdLen: Int = p(MaxHartIdBits)
|
||||
def resetVectorLen: Int = paddrBits min vaddrBitsExtended
|
||||
|
||||
def dcacheArbPorts = 1 + usingVM.toInt + usingDataScratchpad.toInt + tileParams.rocc.size
|
||||
}
|
||||
@ -72,10 +87,9 @@ trait HasTileLinkMasterPortModule {
|
||||
}
|
||||
|
||||
/** Some other standard inputs */
|
||||
trait HasExternallyDrivenTileConstants extends Bundle {
|
||||
implicit val p: Parameters
|
||||
val hartid = UInt(INPUT, p(MaxHartIdBits))
|
||||
val resetVector = UInt(INPUT, p(ResetVectorBits))
|
||||
trait HasExternallyDrivenTileConstants extends Bundle with HasTileParameters {
|
||||
val hartid = UInt(INPUT, hartIdLen)
|
||||
val reset_vector = UInt(INPUT, resetVectorLen)
|
||||
}
|
||||
|
||||
/** Base class for all Tiles that use TileLink */
|
||||
@ -90,4 +104,10 @@ class BaseTileBundle[+L <: BaseTile](_outer: L) extends BareTileBundle(_outer)
|
||||
with HasExternallyDrivenTileConstants
|
||||
|
||||
class BaseTileModule[+L <: BaseTile, +B <: BaseTileBundle[L]](_outer: L, _io: () => B) extends BareTileModule(_outer, _io)
|
||||
with HasTileLinkMasterPortModule
|
||||
with HasTileParameters
|
||||
with HasTileLinkMasterPortModule {
|
||||
require(xLen == 32 || xLen == 64)
|
||||
require(paddrBits <= maxPAddrBits)
|
||||
require(resetVectorLen <= xLen)
|
||||
require(resetVectorLen <= vaddrBitsExtended)
|
||||
}
|
||||
|
@ -35,9 +35,7 @@ trait CoreParams {
|
||||
trait HasCoreParameters extends HasTileParameters {
|
||||
val coreParams: CoreParams = tileParams.core
|
||||
|
||||
val xLen = p(XLen)
|
||||
val fLen = xLen // TODO relax this
|
||||
require(xLen == 32 || xLen == 64)
|
||||
|
||||
val usingMulDiv = coreParams.mulDiv.nonEmpty
|
||||
val usingFPU = coreParams.fpu.nonEmpty
|
||||
@ -52,24 +50,11 @@ trait HasCoreParameters extends HasTileParameters {
|
||||
val coreInstBytes = coreInstBits/8
|
||||
val coreDataBits = xLen max fLen
|
||||
val coreDataBytes = coreDataBits/8
|
||||
val coreMaxAddrBits = paddrBits max vaddrBitsExtended
|
||||
|
||||
val coreDCacheReqTagBits = 6
|
||||
val dcacheReqTagBits = coreDCacheReqTagBits + log2Ceil(dcacheArbPorts)
|
||||
|
||||
def pgIdxBits = 12
|
||||
def pgLevelBits = 10 - log2Ceil(xLen / 32)
|
||||
def vaddrBits = pgIdxBits + pgLevels * pgLevelBits
|
||||
def paddrBits: Int = p(SharedMemoryTLEdge).bundle.addressBits
|
||||
def ppnBits = paddrBits - pgIdxBits
|
||||
def vpnBits = vaddrBits - pgIdxBits
|
||||
val pgLevels = p(PgLevels)
|
||||
val asIdBits = p(ASIdBits)
|
||||
val vpnBitsExtended = vpnBits + (vaddrBits < xLen).toInt
|
||||
val vaddrBitsExtended = vpnBitsExtended + pgIdxBits
|
||||
def coreMaxAddrBits = paddrBits max vaddrBitsExtended
|
||||
val maxPAddrBits = xLen match { case 32 => 34; case 64 => 56 }
|
||||
require(paddrBits <= maxPAddrBits)
|
||||
|
||||
// Print out log of committed instructions and their writeback values.
|
||||
// Requires post-processing due to out-of-order writebacks.
|
||||
val enableCommitLog = false
|
||||
|
@ -232,7 +232,7 @@ object FType {
|
||||
|
||||
trait HasFPUParameters {
|
||||
val fLen: Int
|
||||
val xLen: Int
|
||||
def xLen: Int
|
||||
val minXLen = 32
|
||||
val nIntTypes = log2Ceil(xLen/minXLen) + 1
|
||||
val floatTypes = FType.all.filter(_.ieeeWidth <= fLen)
|
||||
|
@ -140,7 +140,7 @@ class RocketTileModule(outer: RocketTile) extends BaseTileModule(outer, () => ne
|
||||
decodeCoreInterrupts(core.io.interrupts) // Decode the interrupt vector
|
||||
core.io.hartid := io.hartid // Pass through the hartid
|
||||
outer.frontend.module.io.cpu <> core.io.imem
|
||||
outer.frontend.module.io.resetVector := io.resetVector
|
||||
outer.frontend.module.io.reset_vector := io.reset_vector
|
||||
outer.frontend.module.io.hartid := io.hartid
|
||||
outer.dcache.module.io.hartid := io.hartid
|
||||
dcachePorts += core.io.dmem // TODO outer.dcachePorts += () => module.core.io.dmem ??
|
||||
@ -205,7 +205,7 @@ abstract class RocketTileWrapper(rtp: RocketTileParams, hartid: Int)(implicit p:
|
||||
}
|
||||
// signals that do not change based on crossing type:
|
||||
rocket.module.io.hartid := io.hartid
|
||||
rocket.module.io.resetVector := io.resetVector
|
||||
rocket.module.io.reset_vector := io.reset_vector
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user