[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)
|
Module(LazyModule(new TopWithInitZero()(p)).module)
|
||||||
})
|
})
|
||||||
// DOC include end: WithInitZero
|
// DOC include end: WithInitZero
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ import freechips.rocketchip.rocket.DCacheParams
|
|||||||
import freechips.rocketchip.subsystem._
|
import freechips.rocketchip.subsystem._
|
||||||
import freechips.rocketchip.devices.tilelink.BootROMParams
|
import freechips.rocketchip.devices.tilelink.BootROMParams
|
||||||
import freechips.rocketchip.devices.debug.DebugModuleParams
|
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 testchipip.{BlockDeviceKey, BlockDeviceConfig}
|
||||||
import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams}
|
import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams}
|
||||||
import scala.math.{min, max}
|
import scala.math.{min, max}
|
||||||
@@ -19,7 +20,7 @@ import tracegen.TraceGenKey
|
|||||||
import icenet._
|
import icenet._
|
||||||
|
|
||||||
import firesim.bridges._
|
import firesim.bridges._
|
||||||
import firesim.util.{WithNumNodes}
|
import firesim.util.{WithNumNodes, FireSimClockKey, FireSimClockParameters}
|
||||||
import firesim.configs._
|
import firesim.configs._
|
||||||
|
|
||||||
class WithBootROM extends Config((site, here, up) => {
|
class WithBootROM extends Config((site, here, up) => {
|
||||||
@@ -320,3 +321,16 @@ class FireSimTraceGenL2Config extends Config(
|
|||||||
outerLatencyCycles = 50) ++
|
outerLatencyCycles = 50) ++
|
||||||
new WithTraceGenBridge ++
|
new WithTraceGenBridge ++
|
||||||
new FireSimRocketChipConfig)
|
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.subsystem._
|
||||||
import freechips.rocketchip.rocket.TracedInstruction
|
import freechips.rocketchip.rocket.TracedInstruction
|
||||||
import firesim.bridges.{TraceOutputTop, DeclockedTracedInstruction}
|
import firesim.bridges.{TraceOutputTop, DeclockedTracedInstruction}
|
||||||
|
import firesim.util.{HasAdditionalClocks, FireSimClockKey}
|
||||||
|
|
||||||
import midas.targetutils.MemModelAnnotation
|
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 HasPeripheryIceNICModuleImpValidOnly
|
||||||
with HasPeripheryBlockDeviceModuleImp
|
with HasPeripheryBlockDeviceModuleImp
|
||||||
with HasTraceIOImp
|
with HasTraceIOImp
|
||||||
|
with HasFireSimClockingImp
|
||||||
with CanHaveMultiCycleRegfileImp
|
with CanHaveMultiCycleRegfileImp
|
||||||
|
|
||||||
class FireSim(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimDUT)
|
class FireSim(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimDUT)
|
||||||
@@ -84,6 +85,7 @@ class FireSimNoNICModuleImp[+L <: FireSimNoNICDUT](l: L) extends SubsystemModule
|
|||||||
with HasPeripheryUARTModuleImp
|
with HasPeripheryUARTModuleImp
|
||||||
with HasPeripheryBlockDeviceModuleImp
|
with HasPeripheryBlockDeviceModuleImp
|
||||||
with HasTraceIOImp
|
with HasTraceIOImp
|
||||||
|
with HasFireSimClockingImp
|
||||||
with CanHaveMultiCycleRegfileImp
|
with CanHaveMultiCycleRegfileImp
|
||||||
|
|
||||||
class FireSimNoNIC(implicit p: Parameters) extends DefaultFireSimHarness(() => new FireSimNoNICDUT)
|
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 RamModelRocketF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimRocketChipDualCoreConfig", "BaseF1Config_MCRams")
|
||||||
class RamModelBoomF1Tests extends FireSimTestSuite("FireSimNoNIC", "FireSimBoomConfig", "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)
|
abstract class FireSimTraceGenTest(targetConfig: String, platformConfig: String)
|
||||||
extends firesim.TestSuiteCommon with IsFireSimGeneratorLike {
|
extends firesim.TestSuiteCommon with IsFireSimGeneratorLike {
|
||||||
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs
|
val longName = names.topModuleProject + "." + names.topModuleClass + "." + names.configs
|
||||||
|
|||||||
Reference in New Issue
Block a user