diff options
| author | mergify[bot] | 2022-05-12 17:31:59 +0000 |
|---|---|---|
| committer | GitHub | 2022-05-12 17:31:59 +0000 |
| commit | 1ee9adbec48bc8393e1c3d0ed86a548f8510d13f (patch) | |
| tree | ca16061fd438b2866f37a80d9ab74636491d8382 /core/src/main/scala/chisel3/internal | |
| parent | d5a964f6e7beea1f38f9623224fc65e2397e1fe7 (diff) | |
Support separately elaborating definition and instance in ChiselStage (backport #2512) (#2520)
* Support separately elaborating definition and instance in ChiselStage (#2512)
(cherry picked from commit a0aa4d1550e3fbde199a98529cffeb176fb4bed8)
# Conflicts:
# core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala
# core/src/main/scala/chisel3/experimental/hierarchy/Instance.scala
# core/src/main/scala/chisel3/internal/Builder.scala
* fixing imports (#2522)
Co-authored-by: Deborah Soung <debs@sifive.com>
Diffstat (limited to 'core/src/main/scala/chisel3/internal')
| -rw-r--r-- | core/src/main/scala/chisel3/internal/Builder.scala | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala index 4180f580..69455455 100644 --- a/core/src/main/scala/chisel3/internal/Builder.scala +++ b/core/src/main/scala/chisel3/internal/Builder.scala @@ -6,7 +6,7 @@ import scala.util.DynamicVariable import scala.collection.mutable.ArrayBuffer import chisel3._ import chisel3.experimental._ -import chisel3.experimental.hierarchy.{Clone, Instance} +import chisel3.experimental.hierarchy.{Clone, ImportDefinitionAnnotation, Instance} import chisel3.internal.firrtl._ import chisel3.internal.naming._ import _root_.firrtl.annotations.{CircuitName, ComponentName, IsMember, ModuleName, Named, ReferenceTarget} @@ -364,7 +364,24 @@ private[chisel3] class ChiselContext() { } private[chisel3] class DynamicContext(val annotationSeq: AnnotationSeq, val throwOnFirstError: Boolean) { + val importDefinitionAnnos = annotationSeq.collect { case a: ImportDefinitionAnnotation[_] => a } + + // Ensure there are no repeated names for imported Definitions + val importDefinitionNames = importDefinitionAnnos.map { a => a.definition.proto.name } + if (importDefinitionNames.distinct.length < importDefinitionNames.length) { + val duplicates = importDefinitionNames.diff(importDefinitionNames.distinct).mkString(", ") + throwException(s"Expected distinct imported Definition names but found duplicates for: $duplicates") + } + val globalNamespace = Namespace.empty + + // Ensure imported Definitions emit as ExtModules with the correct name so + // that instantiations will also use the correct name and prevent any name + // conflicts with Modules/Definitions in this elaboration + importDefinitionNames.foreach { importDefName => + globalNamespace.name(importDefName) + } + val components = ArrayBuffer[Component]() val annotations = ArrayBuffer[ChiselAnnotation]() var currentModule: Option[BaseModule] = None |
