Merge pull request #826 from ucb-bar/tile-reset-async
Fix TileResetCtrl to be ahead of reset synchronizers.
This commit is contained in:
@@ -71,16 +71,16 @@ object ClockingSchemeGenerators {
|
|||||||
|
|
||||||
// Add a control register for each tile's reset
|
// Add a control register for each tile's reset
|
||||||
val resetSetter = chiptop.lazySystem match {
|
val resetSetter = chiptop.lazySystem match {
|
||||||
case sys: BaseSubsystem with InstantiatesTiles => TLTileResetCtrl(sys)
|
case sys: BaseSubsystem with InstantiatesTiles => Some(TLTileResetCtrl(sys))
|
||||||
case _ => ClockGroupEphemeralNode()
|
case _ => None
|
||||||
}
|
}
|
||||||
|
val resetSetterResetProvider = resetSetter.map(_.tileResetProviderNode).getOrElse(ClockGroupEphemeralNode())
|
||||||
|
|
||||||
val aggregator = LazyModule(new ClockGroupAggregator("allClocks")).node
|
val aggregator = LazyModule(new ClockGroupAggregator("allClocks")).node
|
||||||
(chiptop.implicitClockSinkNode
|
(chiptop.implicitClockSinkNode
|
||||||
:= ClockGroup()
|
:= ClockGroup()
|
||||||
:= aggregator)
|
:= aggregator)
|
||||||
(systemAsyncClockGroup
|
(systemAsyncClockGroup
|
||||||
:*= resetSetter
|
|
||||||
:*= ClockGroupNamePrefixer()
|
:*= ClockGroupNamePrefixer()
|
||||||
:*= aggregator)
|
:*= aggregator)
|
||||||
|
|
||||||
@@ -88,10 +88,16 @@ object ClockingSchemeGenerators {
|
|||||||
(aggregator
|
(aggregator
|
||||||
:= ClockGroupFrequencySpecifier(p(ClockFrequencyAssignersKey), p(DefaultClockFrequencyKey))
|
:= ClockGroupFrequencySpecifier(p(ClockFrequencyAssignersKey), p(DefaultClockFrequencyKey))
|
||||||
:= ClockGroupResetSynchronizer()
|
:= ClockGroupResetSynchronizer()
|
||||||
|
:= resetSetterResetProvider
|
||||||
:= DividerOnlyClockGenerator()
|
:= DividerOnlyClockGenerator()
|
||||||
:= referenceClockSource)
|
:= referenceClockSource)
|
||||||
|
|
||||||
|
|
||||||
|
val asyncResetBroadcast = FixedClockBroadcast(None)
|
||||||
|
resetSetter.foreach(_.asyncResetSinkNode := asyncResetBroadcast)
|
||||||
|
val asyncResetSource = ClockSourceNode(Seq(ClockSourceParameters()))
|
||||||
|
asyncResetBroadcast := asyncResetSource
|
||||||
|
|
||||||
InModuleBody {
|
InModuleBody {
|
||||||
val clock_wire = Wire(Input(Clock()))
|
val clock_wire = Wire(Input(Clock()))
|
||||||
val reset_wire = GenerateReset(chiptop, clock_wire)
|
val reset_wire = GenerateReset(chiptop, clock_wire)
|
||||||
@@ -103,6 +109,11 @@ object ClockingSchemeGenerators {
|
|||||||
o.reset := reset_wire
|
o.reset := reset_wire
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asyncResetSource.out.unzip._1.map { o =>
|
||||||
|
o.clock := false.B.asClock // async reset broadcast network does not provide a clock
|
||||||
|
o.reset := reset_wire
|
||||||
|
}
|
||||||
|
|
||||||
chiptop.harnessFunctions += ((th: HasHarnessSignalReferences) => {
|
chiptop.harnessFunctions += ((th: HasHarnessSignalReferences) => {
|
||||||
clock_io := th.harnessClock
|
clock_io := th.harnessClock
|
||||||
Nil })
|
Nil })
|
||||||
|
|||||||
Submodule generators/testchipip updated: f27055929a...282ca2e25e
Reference in New Issue
Block a user