diff options
| author | Jack Koenig | 2017-02-16 11:02:21 -0800 |
|---|---|---|
| committer | GitHub | 2017-02-16 11:02:21 -0800 |
| commit | 563f348ca3e4a984ad23caba9e980dab8fa808bb (patch) | |
| tree | 46dfe1e3a0a76b2f106a48332e55237ef237f441 /chiselFrontend/src/main/scala/chisel3/internal | |
| parent | d00a3fe9a3df5ce888b5c461181aadbd4a293bf3 (diff) | |
Add support for clock and reset scoping (#509)
withClockAndReset, withReset, and withClock allow changing the implicit clock and reset.
Module.clock and Module.reset provide access to the current implicit clock and reset.
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/internal')
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/internal/Builder.scala | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala index 9e389788..e6e69e03 100644 --- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala +++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala @@ -151,6 +151,7 @@ private[chisel3] class DynamicContext() { // Used to distinguish between no Module() wrapping, multiple wrappings, and rewrapping var readyForModuleConstr: Boolean = false var whenDepth: Int = 0 // Depth of when nesting + var currentClockAndReset: Option[ClockAndReset] = None val errors = new ErrorLog val namingStack = new internal.naming.NamingStack } @@ -186,6 +187,16 @@ private[chisel3] object Builder { def whenDepth_=(target: Int): Unit = { dynamicContext.whenDepth = target } + def currentClockAndReset: Option[ClockAndReset] = dynamicContext.currentClockAndReset + def currentClockAndReset_=(target: Option[ClockAndReset]): Unit = { + dynamicContext.currentClockAndReset = target + } + def forcedClockAndReset: ClockAndReset = currentClockAndReset match { + case Some(clockAndReset) => clockAndReset + case None => throwException("Error: No implicit clock and reset.") + } + def forcedClock: Clock = forcedClockAndReset.clock + def forcedReset: Bool = forcedClockAndReset.reset // TODO(twigg): Ideally, binding checks and new bindings would all occur here // However, rest of frontend can't support this yet. |
