From aac77b3d74c6033eb03f9055a2304bd645529db8 Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Wed, 10 Mar 2021 14:46:53 -0800 Subject: [PATCH 1/3] Move TileResetCtrl before the ResetSynchronizers, and give them an async reset --- generators/chipyard/src/main/scala/Clocks.scala | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/generators/chipyard/src/main/scala/Clocks.scala b/generators/chipyard/src/main/scala/Clocks.scala index 9ca6a801..e29f8392 100644 --- a/generators/chipyard/src/main/scala/Clocks.scala +++ b/generators/chipyard/src/main/scala/Clocks.scala @@ -70,16 +70,16 @@ object ClockingSchemeGenerators { // Add a control register for each tile's reset val resetSetter = chiptop.lazySystem match { - case sys: BaseSubsystem with InstantiatesTiles => TLTileResetCtrl(sys) - case _ => ClockGroupEphemeralNode() + case sys: BaseSubsystem with InstantiatesTiles => Some(TLTileResetCtrl(sys)) + case _ => None } + val resetSetterResetProvider = resetSetter.map(_.tileResetProviderNode).getOrElse(ClockGroupEphemeralNode()) val aggregator = LazyModule(new ClockGroupAggregator("allClocks")).node (chiptop.implicitClockSinkNode := ClockGroup() := aggregator) (systemAsyncClockGroup - :*= resetSetter :*= ClockGroupNamePrefixer() :*= aggregator) @@ -87,10 +87,16 @@ object ClockingSchemeGenerators { (aggregator := ClockGroupFrequencySpecifier(p(ClockFrequencyAssignersKey), p(DefaultClockFrequencyKey)) := ClockGroupResetSynchronizer() + := resetSetterResetProvider := DividerOnlyClockGenerator() := referenceClockSource) + val asyncResetBroadcast = FixedClockBroadcast(None) + resetSetter.foreach(_.asyncResetSinkNode := asyncResetBroadcast) + val asyncResetSource = ClockSourceNode(Seq(ClockSourceParameters())) + asyncResetBroadcast := asyncResetSource + InModuleBody { val clock_wire = Wire(Input(Clock())) val reset_wire = GenerateReset(chiptop, clock_wire) @@ -102,6 +108,11 @@ object ClockingSchemeGenerators { 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) => { clock_io := th.harnessClock Nil }) From c5cb8f13294f873da0dd62b25a4b8731b5337efb Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Thu, 11 Mar 2021 18:23:36 -0800 Subject: [PATCH 2/3] Bump testchipip for TileResetCtrl changes --- generators/testchipip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/testchipip b/generators/testchipip index f2705592..cca134d6 160000 --- a/generators/testchipip +++ b/generators/testchipip @@ -1 +1 @@ -Subproject commit f27055929a2d4c091bfe10c3b64761e281844a2b +Subproject commit cca134d6f23b11d9ae3d3112bc409476bd461ff1 From 2260fffc9c12e740e43e7c7314d91df529262d75 Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Fri, 12 Mar 2021 09:33:50 -0800 Subject: [PATCH 3/3] Bump testchipip --- generators/testchipip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/testchipip b/generators/testchipip index cca134d6..282ca2e2 160000 --- a/generators/testchipip +++ b/generators/testchipip @@ -1 +1 @@ -Subproject commit cca134d6f23b11d9ae3d3112bc409476bd461ff1 +Subproject commit 282ca2e25e191e63051afafc8808561f6a54c695