summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/experimental
diff options
context:
space:
mode:
authormergify[bot]2022-06-22 02:01:31 +0000
committerGitHub2022-06-22 02:01:31 +0000
commit7e67ca1ef93e53d4b9b6f8e13a21d69e0c5daac4 (patch)
tree86cffa0bb07590835426df7664510d5515502c61 /core/src/main/scala/chisel3/experimental
parentcea238bb9f6cb364d0c6c6229ff316eebc8224ec (diff)
Pass optional name in ImportDefinitionAnno (#2592) (#2594)
Used for separate elaboration of Definition and Instance (cherry picked from commit 48d57cc8db6f38fdf0e23b7dce36caa404c871b8) Co-authored-by: Girish Pai <girish.pai@sifive.com>
Diffstat (limited to 'core/src/main/scala/chisel3/experimental')
-rw-r--r--core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala4
-rw-r--r--core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala9
2 files changed, 11 insertions, 2 deletions
diff --git a/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala b/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
index c79c26dc..36bf6f87 100644
--- a/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
+++ b/core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
@@ -120,5 +120,7 @@ object Definition extends SourceInfoDoc {
/** Stores a [[Definition]] that is imported so that its Instances can be
* compiled separately.
*/
-case class ImportDefinitionAnnotation[T <: BaseModule with IsInstantiable](definition: Definition[T])
+case class ImportDefinitionAnnotation[T <: BaseModule with IsInstantiable](
+ definition: Definition[T],
+ overrideDefName: Option[String] = None)
extends NoTargetAnnotation
diff --git a/core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala b/core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala
index 9f96dff1..861023a1 100644
--- a/core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala
+++ b/core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala
@@ -10,6 +10,7 @@ import chisel3.internal.sourceinfo.{InstanceTransform, SourceInfo}
import chisel3.experimental.{BaseModule, ExtModule}
import chisel3.internal.firrtl.{Component, DefBlackBox, DefModule, Port}
import firrtl.annotations.IsModule
+import chisel3.internal.throwException
/** User-facing Instance type.
* Represents a unique instance of type [[A]] which are marked as @instantiable
@@ -118,8 +119,14 @@ object Instance extends SourceInfoDoc {
if (existingMod.isEmpty) {
// Add a Definition that will get emitted as an ExtModule so that FIRRTL
// does not complain about a missing element
+ val extModName = Builder.importDefinitionMap.getOrElse(
+ definition.proto.name,
+ throwException(
+ "Imported Definition information not found - possibly forgot to add ImportDefinition annotation?"
+ )
+ )
class EmptyExtModule extends ExtModule {
- override def desiredName: String = definition.proto.name
+ override def desiredName: String = extModName
override def generateComponent(): Option[Component] = {
require(!_closed, s"Can't generate $desiredName module more than once")
_closed = true