summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/chisel3/Module.scala1
-rw-r--r--core/src/main/scala/chisel3/aop/Aspect.scala7
-rw-r--r--core/src/main/scala/chisel3/internal/Builder.scala11
3 files changed, 11 insertions, 8 deletions
diff --git a/core/src/main/scala/chisel3/Module.scala b/core/src/main/scala/chisel3/Module.scala
index 9f8087bf..ede9ccc6 100644
--- a/core/src/main/scala/chisel3/Module.scala
+++ b/core/src/main/scala/chisel3/Module.scala
@@ -14,6 +14,7 @@ import chisel3.internal.firrtl._
import chisel3.internal.sourceinfo.{InstTransform, SourceInfo, UnlocatableSourceInfo}
import chisel3.experimental.BaseModule
import _root_.firrtl.annotations.{IsModule, ModuleName, ModuleTarget}
+import _root_.firrtl.AnnotationSeq
object Module extends SourceInfoDoc {
/** A wrapper method that all Module instantiations must be wrapped in
diff --git a/core/src/main/scala/chisel3/aop/Aspect.scala b/core/src/main/scala/chisel3/aop/Aspect.scala
index 59add417..be9b8975 100644
--- a/core/src/main/scala/chisel3/aop/Aspect.scala
+++ b/core/src/main/scala/chisel3/aop/Aspect.scala
@@ -12,6 +12,10 @@ import firrtl.AnnotationSeq
* @tparam T Type of top-level module
*/
abstract class Aspect[T <: RawModule] extends Annotation with Unserializable with NoTargetAnnotation {
+ /** variable to save [[AnnotationSeq]] from [[chisel3.stage.phases.AspectPhase]]
+ * to be used at [[chisel3.aop.injecting.InjectorAspect]], exposes annotations to [[chisel3.internal.DynamicContext]]
+ */
+ private[aop] var annotationsInAspect: AnnotationSeq = Seq()
/** Convert this Aspect to a seq of FIRRTL annotation
* @param top
* @return
@@ -22,7 +26,8 @@ abstract class Aspect[T <: RawModule] extends Annotation with Unserializable wit
* @param top
* @return
*/
- private[chisel3] def resolveAspect(top: RawModule): AnnotationSeq = {
+ private[chisel3] def resolveAspect(top: RawModule, remainingAnnotations: AnnotationSeq): AnnotationSeq = {
+ annotationsInAspect = remainingAnnotations
toAnnotation(top.asInstanceOf[T])
}
}
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala
index 31d4666c..e95384cd 100644
--- a/core/src/main/scala/chisel3/internal/Builder.scala
+++ b/core/src/main/scala/chisel3/internal/Builder.scala
@@ -9,7 +9,8 @@ import chisel3.experimental._
import chisel3.internal.firrtl._
import chisel3.internal.naming._
import _root_.firrtl.annotations.{CircuitName, ComponentName, IsMember, ModuleName, Named, ReferenceTarget}
-import _root_.firrtl.annotations.AnnotationUtils.{validComponentName}
+import _root_.firrtl.annotations.AnnotationUtils.validComponentName
+import _root_.firrtl.AnnotationSeq
import chisel3.internal.Builder.Prefix
import logger.LazyLogging
@@ -305,7 +306,7 @@ private[chisel3] class ChiselContext() {
var prefixStack: Prefix = Nil
}
-private[chisel3] class DynamicContext() {
+private[chisel3] class DynamicContext(val annotationSeq: AnnotationSeq) {
val globalNamespace = Namespace.empty
val components = ArrayBuffer[Component]()
val annotations = ArrayBuffer[ChiselAnnotation]()
@@ -364,6 +365,7 @@ private[chisel3] object Builder extends LazyLogging {
def globalNamespace: Namespace = dynamicContext.globalNamespace
def components: ArrayBuffer[Component] = dynamicContext.components
def annotations: ArrayBuffer[ChiselAnnotation] = dynamicContext.annotations
+ def annotationSeq: AnnotationSeq = dynamicContext.annotationSeq
def namingStack: NamingStack = dynamicContext.namingStack
// Puts a prefix string onto the prefix stack
@@ -632,11 +634,6 @@ private[chisel3] object Builder extends LazyLogging {
}
}
-
- def build[T <: RawModule](f: => T): (Circuit, T) = {
- build(f, new DynamicContext())
- }
-
private [chisel3] def build[T <: RawModule](f: => T, dynamicContext: DynamicContext): (Circuit, T) = {
dynamicContextVar.withValue(Some(dynamicContext)) {
checkScalaVersion()