summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorDeborah Soung2021-06-24 14:03:28 -0700
committerGitHub2021-06-24 21:03:28 +0000
commitf8053db3d20b733e0119b77595f0cdfcdab71057 (patch)
tree07d6a6a109c632989d7bd9b46a433c05ea533841 /core/src/main
parent04de237e91192b884bbc51c78c57932b2ad7754a (diff)
create and extend annotatable BaseSim class for verification nodes (#1968)
* prototype annotating verif constructs * switch to final class * name emissions * moving BaseSim to experimental * adding name tests * fixing quotation escapes * emitting names, but everything has a default name * only name things with provided/suggested names * name every BaseSim node * removing msg, unused imports * fixing file exist calls
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/scala/chisel3/RawModule.scala4
-rw-r--r--core/src/main/scala/chisel3/experimental/package.scala6
-rw-r--r--core/src/main/scala/chisel3/experimental/verification/package.scala28
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/Converter.scala4
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/IR.scala5
5 files changed, 34 insertions, 13 deletions
diff --git a/core/src/main/scala/chisel3/RawModule.scala b/core/src/main/scala/chisel3/RawModule.scala
index f678c587..de93e781 100644
--- a/core/src/main/scala/chisel3/RawModule.scala
+++ b/core/src/main/scala/chisel3/RawModule.scala
@@ -5,8 +5,7 @@ package chisel3
import scala.collection.mutable.{ArrayBuffer, HashMap}
import scala.util.Try
import scala.language.experimental.macros
-
-import chisel3.experimental.BaseModule
+import chisel3.experimental.{BaseModule, BaseSim}
import chisel3.internal._
import chisel3.internal.Builder._
import chisel3.internal.firrtl._
@@ -77,6 +76,7 @@ abstract class RawModule(implicit moduleCompileOptions: CompileOptions)
id match {
case id: BaseModule => id.forceName(None, default=id.desiredName, _namespace)
case id: MemBase[_] => id.forceName(None, default="MEM", _namespace)
+ case id: BaseSim => id.forceName(None, default="SIM", _namespace)
case id: Data =>
if (id.isSynthesizable) {
id.topBinding match {
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
}
}
}
diff --git a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
index ff0fa770..40d3691c 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
@@ -136,14 +136,14 @@ private[chisel3] object Converter {
val (fmt, args) = unpack(pable, ctx)
Some(fir.Print(convert(info), fir.StringLit(fmt),
args.map(a => convert(a, ctx, info)), convert(clock, ctx, info), firrtl.Utils.one))
- case Verification(op, info, clk, pred, msg) =>
+ case e @ Verification(_, op, info, clk, pred, msg) =>
val firOp = op match {
case Formal.Assert => fir.Formal.Assert
case Formal.Assume => fir.Formal.Assume
case Formal.Cover => fir.Formal.Cover
}
Some(fir.Verification(firOp, convert(info), convert(clk, ctx, info),
- convert(pred, ctx, info), firrtl.Utils.one, fir.StringLit(msg)))
+ convert(pred, ctx, info), firrtl.Utils.one, fir.StringLit(msg), e.name))
case _ => None
}
diff --git a/core/src/main/scala/chisel3/internal/firrtl/IR.scala b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
index 81b4f7ab..5dc72a43 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/IR.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
@@ -3,7 +3,6 @@
package chisel3.internal.firrtl
import firrtl.{ir => fir}
-
import chisel3._
import chisel3.internal._
import chisel3.internal.sourceinfo.SourceInfo
@@ -765,8 +764,8 @@ object Formal extends Enumeration {
val Assume = Value("assume")
val Cover = Value("cover")
}
-case class Verification(op: Formal.Value, sourceInfo: SourceInfo, clock: Arg,
- predicate: Arg, message: String) extends Command
+case class Verification[T <: BaseSim](id: T, op: Formal.Value, sourceInfo: SourceInfo, clock: Arg,
+ predicate: Arg, message: String) extends Definition
abstract class Component extends Arg {
def id: BaseModule
def name: String