From b39bc25ff76762d93300975e533ec3bd4f119d1c Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Tue, 22 Jan 2019 15:06:08 -0800 Subject: Define Data .toString (#985) toString on Data subtypes will now print the type and optionally binding information including literals and IO names as feasible.--- .../src/main/scala/chisel3/core/Aggregate.scala | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala') diff --git a/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala b/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala index 5563092e..e85b7158 100644 --- a/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala +++ b/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala @@ -150,6 +150,10 @@ object Vec extends VecFactory */ sealed class Vec[T <: Data] private[core] (gen: => T, val length: Int) extends Aggregate with VecLike[T] { + override def toString: String = { + s"$sample_element[$length]$bindingToString" + } + private[core] override def typeEquivalent(that: Data): Boolean = that match { case that: Vec[T] => this.length == that.length && @@ -448,6 +452,18 @@ abstract class Record(private[chisel3] implicit val compileOptions: CompileOptio * assert(uint === "hbeefdead".U) // This will pass * }}} */ + override def toString: String = { + val bindingString = topBindingOpt match { + case Some(BundleLitBinding(_)) => + val contents = elements.toList.reverse.map { case (name, data) => + s"$name=$data" + }.mkString(", ") + s"($contents)" + case _ => bindingToString + } + s"$className$bindingString" + } + val elements: ListMap[String, Data] /** Name for Pretty Printing */ @@ -543,8 +559,11 @@ class AutoClonetypeException(message: String) extends ChiselException(message) * }}} */ abstract class Bundle(implicit compileOptions: CompileOptions) extends Record { - override def className = "Bundle" - + override def className: String = this.getClass.getSimpleName match { + case name if name.startsWith("$anon$") => "AnonymousBundle" // fallback for anonymous Bundle case + case "" => "AnonymousBundle" // ditto, but on other platforms + case name => name + } /** The collection of [[Data]] * * Elements defined earlier in the Bundle are higher order upon -- cgit v1.2.3