[Firechip] Add support for Tile <-> Uncore rational division
This commit is contained in:
@@ -182,3 +182,4 @@ class WithInitZeroTop extends Config((site, here, up) => {
|
||||
Module(LazyModule(new TopWithInitZero()(p)).module)
|
||||
})
|
||||
// DOC include end: WithInitZero
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ import freechips.rocketchip.rocket.DCacheParams
|
||||
import freechips.rocketchip.subsystem._
|
||||
import freechips.rocketchip.devices.tilelink.BootROMParams
|
||||
import freechips.rocketchip.devices.debug.DebugModuleParams
|
||||
import boom.common.BoomTilesKey
|
||||
import freechips.rocketchip.diplomacy.{RationalCrossing}
|
||||
import boom.common.{BoomCrossingKey, BoomTilesKey}
|
||||
import testchipip.{BlockDeviceKey, BlockDeviceConfig}
|
||||
import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams}
|
||||
import scala.math.{min, max}
|
||||
@@ -19,7 +20,7 @@ import tracegen.TraceGenKey
|
||||
import icenet._
|
||||
|
||||
import firesim.bridges._
|
||||
import firesim.util.{WithNumNodes}
|
||||
import firesim.util.{WithNumNodes, FireSimClockKey, FireSimClockParameters}
|
||||
import firesim.configs._
|
||||
|
||||
class WithBootROM extends Config((site, here, up) => {
|
||||
@@ -320,3 +321,16 @@ class FireSimTraceGenL2Config extends Config(
|
||||
outerLatencyCycles = 50) ++
|
||||
new WithTraceGenBridge ++
|
||||
new FireSimRocketChipConfig)
|
||||
|
||||
|
||||
class WithRationalTiles(multiplier: Int, divisor: Int) extends Config((site, here, up) => {
|
||||
case FireSimClockKey => FireSimClockParameters(Seq(multiplier -> divisor))
|
||||
case RocketCrossingKey => up(RocketCrossingKey, site) map { r =>
|
||||
r.copy(crossingType = RationalCrossing())
|
||||
}
|
||||
case BoomCrossingKey => up(BoomCrossingKey, site) map { r =>
|
||||
r.copy(crossingType = RationalCrossing())
|
||||
}
|
||||
})
|
||||
|
||||
class HalfRateUncore extends WithRationalTiles(2,1)
|
||||
|
||||
@@ -13,6 +13,7 @@ import freechips.rocketchip.tile.RocketTile
|
||||
import freechips.rocketchip.subsystem._
|
||||
import freechips.rocketchip.rocket.TracedInstruction
|
||||
import firesim.bridges.{TraceOutputTop, DeclockedTracedInstruction}
|
||||
import firesim.util.{HasAdditionalClocks, FireSimClockKey}
|
||||
|
||||
import midas.targetutils.MemModelAnnotation
|
||||
|
||||
@@ -73,3 +74,15 @@ trait CanHaveMultiCycleRegfileImp {
|
||||
}
|
||||
}
|
||||
|
||||
trait HasFireSimClockingImp extends HasAdditionalClocks {
|
||||
val outer: HasTiles
|
||||
val (tileClock, tileReset) = p(FireSimClockKey).additionalClocks.headOption match {
|
||||
case Some((numer, denom)) if numer != denom => (clocks(1), ResetCatchAndSync(clocks(1), reset.toBool))
|
||||
case None => (clocks(0), reset)
|
||||
}
|
||||
|
||||
outer.tiles.foreach({ case tile =>
|
||||
tile.module.clock := tileClock
|
||||
tile.module.reset := tileReset
|
||||
})
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ class FireSimModuleImp[+L <: FireSimDUT](l: L) extends SubsystemModuleImp(l)
|
||||
with HasPeripheryIceNICModuleImpValidOnly
|
||||
with HasPeripheryBlockDeviceModuleImp
|
||||
with HasTraceIOImp
|
||||
with HasFireSimClockingImp
|
||||
with CanHaveMultiCycleRegfileImp
|
||||
|
||||
class FireSim(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimDUT)
|
||||
@@ -84,6 +85,7 @@ class FireSimNoNICModuleImp[+L <: FireSimNoNICDUT](l: L) extends SubsystemModule
|
||||
with HasPeripheryUARTModuleImp
|
||||
with HasPeripheryBlockDeviceModuleImp
|
||||
with HasTraceIOImp
|
||||
with HasFireSimClockingImp
|
||||
with CanHaveMultiCycleRegfileImp
|
||||
|
||||
class FireSimNoNIC(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimNoNICDUT)
|
||||
|
||||
@@ -139,6 +139,9 @@ class RocketNICF1Tests extends FireSimTestSuite("FireSim", "DDR3FRFCFSLLC4MB_Fir
|
||||
class RamModelRocketF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipDualCoreConfig", "BaseF1Config_MCRams")
|
||||
class RamModelBoomF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimBoomConfig", "BaseF1Config_MCRams")
|
||||
|
||||
// Multiclock tests
|
||||
class RocketMulticlockF1Tests extends FireSimTestSuite("FireSimNoNIC", "HalfRateUncore_DDR3FRFCFSLLC4MB_FireSimRocketChipQuadCoreConfig", "BaseF1Config")
|
||||
|
||||
abstract class FireSimTraceGenTest(targetConfig: String, platformConfig: String)
|
||||
extends firesim.TestSuiteCommon with IsFireSimGeneratorLike {
|
||||
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs
|
||||
|
||||
Reference in New Issue
Block a user