diff --git a/generators/chipyard/src/main/scala/Subsystem.scala b/generators/chipyard/src/main/scala/Subsystem.scala index baed154b..3ca5ab11 100644 --- a/generators/chipyard/src/main/scala/Subsystem.scala +++ b/generators/chipyard/src/main/scala/Subsystem.scala @@ -10,7 +10,7 @@ import chisel3.internal.sourceinfo.{SourceInfo} import freechips.rocketchip.config.{Field, Parameters} import freechips.rocketchip.devices.tilelink._ -import freechips.rocketchip.devices.debug.{HasPeripheryDebug, HasPeripheryDebugModuleImp} +import freechips.rocketchip.devices.debug.{HasPeripheryDebug, HasPeripheryDebugModuleImp, ExportDebug} import freechips.rocketchip.diplomacy._ import freechips.rocketchip.diplomaticobjectmodel.model.{OMInterrupt} import freechips.rocketchip.diplomaticobjectmodel.logicaltree.{RocketTileLogicalTreeNode, LogicalModuleTree} @@ -24,10 +24,33 @@ import freechips.rocketchip.amba.axi4._ import boom.common.{BoomTile} -import testchipip.{DromajoHelper} +import testchipip.{DromajoHelper, CanHavePeripherySerial, SerialKey} + + +trait CanHaveHTIF { this: BaseSubsystem => + // Advertise HTIF if system can communicate with fesvr + if (this match { + case _: CanHavePeripherySerial if p(SerialKey) => true + case _: HasPeripheryDebug if p(ExportDebug).protocols.nonEmpty => true + case _ => false + }) { + ResourceBinding { + val htif = new Device { + def describe(resources: ResourceBindings): Description = { + val compat = resources("compat").map(_.value) + Description("htif", Map( + "compatible" -> compat)) + } + } + Resource(htif, "compat").bind(ResourceString("ucb,htif0")) + } + } +} + class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem with HasTiles + with CanHaveHTIF { def coreMonitorBundles = tiles.map { case r: RocketTile => r.module.core.rocketImpl.coreMonitorBundle @@ -36,6 +59,7 @@ class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem override lazy val module = new ChipyardSubsystemModuleImp(this) } + class ChipyardSubsystemModuleImp[+L <: ChipyardSubsystem](_outer: L) extends BaseSubsystemModuleImp(_outer) with HasResetVectorWire with HasTilesModuleImp diff --git a/scripts/firesim-setup.sh b/scripts/firesim-setup.sh index 959777d7..bb14f39e 100755 --- a/scripts/firesim-setup.sh +++ b/scripts/firesim-setup.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Sets up FireSim for use as a library within REBAR +# Sets up FireSim for use as a library within Chipyard set -e set -o pipefail