summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3
diff options
context:
space:
mode:
authorDeborah Soung2021-07-06 14:40:59 -0700
committerGitHub2021-07-06 14:40:59 -0700
commit503ae520e7f997bcbc639b79869c9a4214d402ed (patch)
tree7e72d44b7e023fac04fdbe8d95d5bfdc01001988 /core/src/main/scala/chisel3
parent4b7499f7c6287c696111bd7c6ee060f33f667419 (diff)
Make printf return BaseSim subclass so it can be named/annotated (#1992)
Diffstat (limited to 'core/src/main/scala/chisel3')
-rw-r--r--core/src/main/scala/chisel3/Printf.scala22
-rw-r--r--core/src/main/scala/chisel3/experimental/verification/package.scala17
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/Converter.scala4
-rw-r--r--core/src/main/scala/chisel3/internal/firrtl/IR.scala2
4 files changed, 26 insertions, 19 deletions
diff --git a/core/src/main/scala/chisel3/Printf.scala b/core/src/main/scala/chisel3/Printf.scala
index 7cbd1918..cf7821b8 100644
--- a/core/src/main/scala/chisel3/Printf.scala
+++ b/core/src/main/scala/chisel3/Printf.scala
@@ -3,11 +3,10 @@
package chisel3
import scala.language.experimental.macros
-
import chisel3.internal._
import chisel3.internal.Builder.pushCommand
-import chisel3.internal.firrtl._
import chisel3.internal.sourceinfo.SourceInfo
+import chisel3.experimental.BaseSim
/** Prints a message in simulation
*
@@ -34,6 +33,9 @@ object printf {
formatIn map escaped mkString ""
}
+ /** Named class for [[printf]]s. */
+ final class Printf(val pable: Printable) extends BaseSim
+
/** Prints a message in simulation
*
* Prints a message every cycle. If defined within the scope of a [[when]] block, the message
@@ -71,7 +73,7 @@ object printf {
* @param fmt printf format string
* @param data format string varargs containing data to print
*/
- def apply(fmt: String, data: Bits*)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Unit =
+ def apply(fmt: String, data: Bits*)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Printf =
apply(Printable.pack(fmt, data:_*))
/** Prints a message in simulation
*
@@ -87,16 +89,20 @@ object printf {
* @see [[Printable]] documentation
* @param pable [[Printable]] to print
*/
- def apply(pable: Printable)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Unit = {
+ def apply(pable: Printable)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Printf = {
+ var printfId: Printf = null
when (!Module.reset.asBool) {
- printfWithoutReset(pable)
+ printfId = printfWithoutReset(pable)
}
+ printfId
}
- private[chisel3] def printfWithoutReset(pable: Printable)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Unit = {
+ private[chisel3] def printfWithoutReset(pable: Printable)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Printf = {
val clock = Builder.forcedClock
- pushCommand(Printf(sourceInfo, clock.ref, pable))
+ val printfId = new Printf(pable)
+ pushCommand(chisel3.internal.firrtl.Printf(printfId, sourceInfo, clock.ref, pable))
+ printfId
}
- private[chisel3] def printfWithoutReset(fmt: String, data: Bits*)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Unit =
+ private[chisel3] def printfWithoutReset(fmt: String, data: Bits*)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): Printf =
printfWithoutReset(Printable.pack(fmt, data:_*))
}
diff --git a/core/src/main/scala/chisel3/experimental/verification/package.scala b/core/src/main/scala/chisel3/experimental/verification/package.scala
index ca15a5c4..190083fd 100644
--- a/core/src/main/scala/chisel3/experimental/verification/package.scala
+++ b/core/src/main/scala/chisel3/experimental/verification/package.scala
@@ -9,16 +9,11 @@ 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
+ object assert {
+ /** Named class for assertions. */
+ final class Assert(private[chisel3] 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): Assert = {
@@ -32,6 +27,9 @@ package object verification {
}
object assume {
+ /** Named class for assumes. */
+ final class Assume(private[chisel3] val predicate: Bool) extends BaseSim
+
def apply(predicate: Bool, msg: String = "")(
implicit sourceInfo: SourceInfo,
compileOptions: CompileOptions): Assume = {
@@ -45,6 +43,9 @@ package object verification {
}
object cover {
+ /** Named class for covers. */
+ final class Cover(private[chisel3] val predicate: Bool) extends BaseSim
+
def apply(predicate: Bool, msg: String = "")(
implicit sourceInfo: SourceInfo,
compileOptions: CompileOptions): Cover = {
diff --git a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
index 093d4848..8efb2abc 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/Converter.scala
@@ -143,10 +143,10 @@ private[chisel3] object Converter {
Some(fir.DefInstance(convert(info), e.name, id.name))
case Stop(info, clock, ret) =>
Some(fir.Stop(convert(info), ret, convert(clock, ctx, info), firrtl.Utils.one))
- case Printf(info, clock, pable) =>
+ case e @ Printf(_, info, clock, pable) =>
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))
+ args.map(a => convert(a, ctx, info)), convert(clock, ctx, info), firrtl.Utils.one, e.name))
case e @ Verification(_, op, info, clk, pred, msg) =>
val firOp = op match {
case Formal.Assert => fir.Formal.Assert
diff --git a/core/src/main/scala/chisel3/internal/firrtl/IR.scala b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
index a4f6d26d..5796522c 100644
--- a/core/src/main/scala/chisel3/internal/firrtl/IR.scala
+++ b/core/src/main/scala/chisel3/internal/firrtl/IR.scala
@@ -773,7 +773,7 @@ case class Attach(sourceInfo: SourceInfo, locs: Seq[Node]) extends Command
case class ConnectInit(sourceInfo: SourceInfo, loc: Node, exp: Arg) extends Command
case class Stop(sourceInfo: SourceInfo, clock: Arg, ret: Int) extends Command
case class Port(id: Data, dir: SpecifiedDirection)
-case class Printf(sourceInfo: SourceInfo, clock: Arg, pable: Printable) extends Command
+case class Printf(id: printf.Printf, sourceInfo: SourceInfo, clock: Arg, pable: Printable) extends Definition
object Formal extends Enumeration {
val Assert = Value("assert")
val Assume = Value("assume")