summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/experimental
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/scala/chisel3/experimental')
-rw-r--r--core/src/main/scala/chisel3/experimental/package.scala6
-rw-r--r--core/src/main/scala/chisel3/experimental/verification/package.scala28
2 files changed, 28 insertions, 6 deletions
diff --git a/core/src/main/scala/chisel3/experimental/package.scala b/core/src/main/scala/chisel3/experimental/package.scala
index e8360430..8018159f 100644
--- a/core/src/main/scala/chisel3/experimental/package.scala
+++ b/core/src/main/scala/chisel3/experimental/package.scala
@@ -2,6 +2,7 @@
package chisel3
+import chisel3.internal.NamedComponent
import chisel3.internal.sourceinfo.SourceInfo
/** Package for experimental features, which may have their API changed, be removed, etc.
@@ -165,4 +166,9 @@ package object experimental {
val prefix = chisel3.internal.prefix
// Use to remove prefixes not in provided scope
val noPrefix = chisel3.internal.noPrefix
+
+ /** Base simulation-only component. */
+ abstract class BaseSim extends NamedComponent {
+ _parent.foreach(_.addId(this))
+ }
}
diff --git a/core/src/main/scala/chisel3/experimental/verification/package.scala b/core/src/main/scala/chisel3/experimental/verification/package.scala
index 816299a3..ca15a5c4 100644
--- a/core/src/main/scala/chisel3/experimental/verification/package.scala
+++ b/core/src/main/scala/chisel3/experimental/verification/package.scala
@@ -8,36 +8,52 @@ import chisel3.internal.firrtl.{Formal, Verification}
import chisel3.internal.sourceinfo.SourceInfo
package object verification {
+
+ /** Named class for assertions. */
+ final class Assert(val predicate: Bool) extends BaseSim
+
+ /** Named class for assumes. */
+ final class Assume(val predicate: Bool) extends BaseSim
+
+ /** Named class for covers. */
+ final class Cover(val predicate: Bool) extends BaseSim
+
object assert {
def apply(predicate: Bool, msg: String = "")(
implicit sourceInfo: SourceInfo,
- compileOptions: CompileOptions): Unit = {
+ compileOptions: CompileOptions): Assert = {
+ val a = new Assert(predicate)
when (!Module.reset.asBool) {
val clock = Module.clock
- Builder.pushCommand(Verification(Formal.Assert, sourceInfo, clock.ref, predicate.ref, msg))
+ Builder.pushCommand(Verification(a, Formal.Assert, sourceInfo, clock.ref, predicate.ref, msg))
}
+ a
}
}
object assume {
def apply(predicate: Bool, msg: String = "")(
implicit sourceInfo: SourceInfo,
- compileOptions: CompileOptions): Unit = {
+ compileOptions: CompileOptions): Assume = {
+ val a = new Assume(predicate)
when (!Module.reset.asBool) {
val clock = Module.clock
- Builder.pushCommand(Verification(Formal.Assume, sourceInfo, clock.ref, predicate.ref, msg))
+ Builder.pushCommand(Verification(a, Formal.Assume, sourceInfo, clock.ref, predicate.ref, msg))
}
+ a
}
}
object cover {
def apply(predicate: Bool, msg: String = "")(
implicit sourceInfo: SourceInfo,
- compileOptions: CompileOptions): Unit = {
+ compileOptions: CompileOptions): Cover = {
val clock = Module.clock
+ val c = new Cover(predicate)
when (!Module.reset.asBool) {
- Builder.pushCommand(Verification(Formal.Cover, sourceInfo, clock.ref, predicate.ref, msg))
+ Builder.pushCommand(Verification(c, Formal.Cover, sourceInfo, clock.ref, predicate.ref, msg))
}
+ c
}
}
}