[clocking] Add a fragment to set bus clock-sink freqs more intuitively
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package chipyard.config
|
package chipyard.config
|
||||||
|
|
||||||
|
import scala.util.matching.Regex
|
||||||
import chisel3._
|
import chisel3._
|
||||||
import chisel3.util.{log2Up}
|
import chisel3.util.{log2Up}
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ import freechips.rocketchip.devices.debug.{Debug, ExportDebug, DebugModuleKey, D
|
|||||||
import freechips.rocketchip.groundtest.{GroundTestSubsystem}
|
import freechips.rocketchip.groundtest.{GroundTestSubsystem}
|
||||||
import freechips.rocketchip.tile._
|
import freechips.rocketchip.tile._
|
||||||
import freechips.rocketchip.rocket.{RocketCoreParams, MulDivParams, DCacheParams, ICacheParams}
|
import freechips.rocketchip.rocket.{RocketCoreParams, MulDivParams, DCacheParams, ICacheParams}
|
||||||
|
import freechips.rocketchip.tilelink.{HasTLBusParams}
|
||||||
import freechips.rocketchip.util.{AsyncResetReg, Symmetric}
|
import freechips.rocketchip.util.{AsyncResetReg, Symmetric}
|
||||||
import freechips.rocketchip.prci._
|
import freechips.rocketchip.prci._
|
||||||
|
|
||||||
@@ -183,6 +185,34 @@ class WithPeripheryBusFrequencyAsDefault extends Config((site, here, up) => {
|
|||||||
case DefaultClockFrequencyKey => (site(PeripheryBusKey).dtsFrequency.get / (1000 * 1000)).toDouble
|
case DefaultClockFrequencyKey => (site(PeripheryBusKey).dtsFrequency.get / (1000 * 1000)).toDouble
|
||||||
})
|
})
|
||||||
|
|
||||||
|
class WithSystemBusFrequencyAsDefault extends Config((site, here, up) => {
|
||||||
|
case DefaultClockFrequencyKey => (site(SystemBusKey).dtsFrequency.get / (1000 * 1000)).toDouble
|
||||||
|
})
|
||||||
|
|
||||||
|
class BusFrequencyAssignment[T <: HasTLBusParams](re: Regex, key: Field[T]) extends Config((site, here, up) => {
|
||||||
|
case ClockFrequencyAssignersKey => up(ClockFrequencyAssignersKey, site) ++
|
||||||
|
Seq((cName: String) => site(key).dtsFrequency.flatMap { f =>
|
||||||
|
re.findFirstIn(cName).map {_ => (f / (1000 * 1000)).toDouble }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a diplomatic frequency for all clock sinks with an unspecified
|
||||||
|
* frequency bound to each bus.
|
||||||
|
*
|
||||||
|
* For example, the L2 cache, when bound to the sbus, receives a separate
|
||||||
|
* clock that appears as "subsystem_sbus_<num>". This fragment ensures that
|
||||||
|
* clock requests the same frequency as the sbus itself.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class WithInheritBusFrequencyAssignments extends Config(
|
||||||
|
new BusFrequencyAssignment("subsystem_sbus_\\d+".r, SystemBusKey) ++
|
||||||
|
new BusFrequencyAssignment("subsystem_pbus_\\d+".r, PeripheryBusKey) ++
|
||||||
|
new BusFrequencyAssignment("subsystem_cbus_\\d+".r, ControlBusKey) ++
|
||||||
|
new BusFrequencyAssignment("subsystem_fbus_\\d+".r, FrontBusKey) ++
|
||||||
|
new BusFrequencyAssignment("subsystem_mbus_\\d+".r, MemoryBusKey)
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mixins to specify crossing types between the 5 traditional TL buses
|
* Mixins to specify crossing types between the 5 traditional TL buses
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem
|
|||||||
// driveClockFromMaster = Some(true) results in all cbus-attached device and
|
// driveClockFromMaster = Some(true) results in all cbus-attached device and
|
||||||
// bus clocks to be given names of the form "subsystem_sbus_[0-9]*".
|
// bus clocks to be given names of the form "subsystem_sbus_[0-9]*".
|
||||||
// Conversly, if an async crossing is used, they instead receive names of the
|
// Conversly, if an async crossing is used, they instead receive names of the
|
||||||
// form "subsystem_cbus_[0-9]*". The assignment below the latter names in all cases.
|
// form "subsystem_cbus_[0-9]*". The assignment below provides the latter names in all cases.
|
||||||
Seq(PBUS, FBUS, MBUS, CBUS).foreach { loc =>
|
Seq(PBUS, FBUS, MBUS, CBUS).foreach { loc =>
|
||||||
tlBusWrapperLocationMap.lift(loc).foreach { _.clockGroupNode := asyncClockGroupsNode }
|
tlBusWrapperLocationMap.lift(loc).foreach { _.clockGroupNode := asyncClockGroupsNode }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user