summaryrefslogtreecommitdiff
path: root/chiselFrontend/src/main/scala/chisel3/MultiClock.scala
diff options
context:
space:
mode:
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/MultiClock.scala')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/MultiClock.scala70
1 files changed, 70 insertions, 0 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/MultiClock.scala b/chiselFrontend/src/main/scala/chisel3/MultiClock.scala
new file mode 100644
index 00000000..239e745a
--- /dev/null
+++ b/chiselFrontend/src/main/scala/chisel3/MultiClock.scala
@@ -0,0 +1,70 @@
+// See LICENSE for license details.
+
+package chisel3
+
+import chisel3.internal._
+
+import scala.language.experimental.macros
+
+object withClockAndReset { // scalastyle:ignore object.name
+ /** Creates a new Clock and Reset scope
+ *
+ * @param clock the new implicit Clock
+ * @param reset the new implicit Reset
+ * @param block the block of code to run with new implicit Clock and Reset
+ * @return the result of the block
+ */
+ def apply[T](clock: Clock, reset: Reset)(block: => T): T = {
+ // Save parentScope
+ val parentClock = Builder.currentClock
+ val parentReset = Builder.currentReset
+
+ Builder.currentClock = Some(clock)
+ Builder.currentReset = Some(reset)
+
+ val res = block // execute block
+
+ // Return to old scope
+ Builder.currentClock = parentClock
+ Builder.currentReset = parentReset
+ res
+ }
+}
+
+object withClock { // scalastyle:ignore object.name
+ /** Creates a new Clock scope
+ *
+ * @param clock the new implicit Clock
+ * @param block the block of code to run with new implicit Clock
+ * @return the result of the block
+ */
+ def apply[T](clock: Clock)(block: => T): T = {
+ // Save parentScope
+ val parentClock = Builder.currentClock
+ Builder.currentClock = Some(clock)
+ val res = block // execute block
+ // Return to old scope
+ Builder.currentClock = parentClock
+ res
+ }
+}
+
+object withReset { // scalastyle:ignore object.name
+ /** Creates a new Reset scope
+ *
+ * @param reset the new implicit Reset
+ * @param block the block of code to run with new implicit Reset
+ * @return the result of the block
+ */
+ def apply[T](reset: Reset)(block: => T): T = {
+ // Save parentScope
+ val parentReset = Builder.currentReset
+ Builder.currentReset = Some(reset)
+ val res = block // execute block
+ // Return to old scope
+ Builder.currentReset = parentReset
+ res
+ }
+
+}
+