summaryrefslogtreecommitdiff
path: root/chiselFrontend
diff options
context:
space:
mode:
authorJim Lawson2016-08-08 16:54:05 -0700
committerDonggyu Kim2016-08-16 11:26:42 -0700
commite1e7c7ea3359df1351ba979287b62458e411e846 (patch)
tree2460183946a0eca844e907a86accf1ee3c46789a /chiselFrontend
parentddb7278760029be9d960ba8bf2b06ac8a8aac767 (diff)
Provide public SignalID trait to be used to conjure up a signal identifier.
Diffstat (limited to 'chiselFrontend')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/Module.scala3
-rw-r--r--chiselFrontend/src/main/scala/chisel3/internal/Builder.scala21
2 files changed, 23 insertions, 1 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Module.scala b/chiselFrontend/src/main/scala/chisel3/core/Module.scala
index 5af744c4..4f25515b 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/Module.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/Module.scala
@@ -63,6 +63,9 @@ extends HasId {
/** Legalized name of this module. */
final val name = Builder.globalNamespace.name(desiredName)
+ /** Signal name (for simulation). */
+ override def signalName(component: Component) = name
+
/** IO for this Module. At the Scala level (pre-FIRRTL transformations),
* connections in and out of a Module may only go through `io` elements.
*/
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
index cecbd91e..dd4b3264 100644
--- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
+++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
@@ -55,11 +55,30 @@ private[chisel3] class IdGen {
}
}
-private[chisel3] trait HasId {
+/** Public API to Nodes.
+ * currently, the node's name, the full path name, and a reference to its parent.
+ */
+trait SignalID {
+ def signalName(component: Component): String
+ def signalPathName(component: Component, separator: String = "_"): String
+ def signalParent: Module
+}
+
+private[chisel3] trait HasId extends SignalID {
private[chisel3] def _onModuleClose {} // scalastyle:ignore method.name
private[chisel3] val _parent = Builder.dynamicContext.currentModule
_parent.foreach(_.addId(this))
+ // Implementation of public methods.
+ override def signalParent = _parent.get
+ override def signalName(component: Component) = _ref.get.fullName(component)
+ override def signalPathName(component: Component, separator: String = "_"): String = {
+ _parent match {
+ case Some(p) => p.signalPathName(component, separator) + separator + signalName(component)
+ case None => signalName(component)
+ }
+ }
+
private[chisel3] val _id = Builder.idGen.next
override def hashCode: Int = _id.toInt
override def equals(that: Any): Boolean = that match {