diff options
| author | Deborah Soung | 2021-04-21 14:47:03 -0700 |
|---|---|---|
| committer | GitHub | 2021-04-21 21:47:03 +0000 |
| commit | 2c7264a6d923e2d1dc645c8b7dec2add7fb6cfbc (patch) | |
| tree | e6231e4e308d31fc2591bffb9a03afa93723b57a /src/main/scala/chisel3/aop/injecting/InjectingAspect.scala | |
| parent | da5e5cb512cc9249a58b951f750b63707c1c8d83 (diff) | |
fixing context bug (#1874)
Diffstat (limited to 'src/main/scala/chisel3/aop/injecting/InjectingAspect.scala')
| -rw-r--r-- | src/main/scala/chisel3/aop/injecting/InjectingAspect.scala | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala b/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala index 170bfbad..768680ed 100644 --- a/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala +++ b/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala @@ -54,13 +54,14 @@ abstract class InjectorAspect[T <: RawModule, M <: RawModule]( * @return */ final def toAnnotation(modules: Iterable[M], circuit: String, moduleNames: Seq[String]): AnnotationSeq = { - val dynamicContext = new DynamicContext(annotationsInAspect) - // Add existing module names into the namespace. If injection logic instantiates new modules - // which would share the same name, they will get uniquified accordingly - moduleNames.foreach { n => - dynamicContext.globalNamespace.name(n) - } RunFirrtlTransformAnnotation(new InjectingTransform) +: modules.map { module => + val dynamicContext = new DynamicContext(annotationsInAspect) + // Add existing module names into the namespace. If injection logic instantiates new modules + // which would share the same name, they will get uniquified accordingly + moduleNames.foreach { n => + dynamicContext.globalNamespace.name(n) + } + val (chiselIR, _) = Builder.build(Module(new ModuleAspect(module) { module match { case x: Module => withClockAndReset(x.clock, x.reset) { injection(module) } @@ -75,11 +76,15 @@ abstract class InjectorAspect[T <: RawModule, M <: RawModule]( val annotations = chiselIR.annotations.map(_.toFirrtl).filterNot{ a => a.isInstanceOf[DesignAnnotation[_]] } + /** Statements to be injected via aspect. */ val stmts = mutable.ArrayBuffer[ir.Statement]() + /** Modules to be injected via aspect. */ val modules = Aspect.getFirrtl(chiselIR.copy(components = comps)).modules.flatMap { + // for "container" modules, inject their statements case m: firrtl.ir.Module if m.name == module.name => stmts += m.body Nil + // for modules to be injected case other: firrtl.ir.DefModule => Seq(other) } |
