diff options
| author | Jiuyang Liu | 2020-10-27 00:48:54 +0800 |
|---|---|---|
| committer | GitHub | 2020-10-27 00:48:54 +0800 |
| commit | d1c0181e716c37142e233beed2efcea5c5794aa7 (patch) | |
| tree | f396139f5dca9aace34be2cb8e9e1ccfeda1190f | |
| parent | a5a8c7a8f5d1dd38ac3452d7c98ac7773f692304 (diff) | |
| parent | 61f3e886affce326a2c09c2f5ba8a69465c0c2ee (diff) | |
Merge pull request #1932 from freechipsproject/fix_VerilogPrep
Fix verilog prep
4 files changed, 50 insertions, 31 deletions
diff --git a/src/main/scala/firrtl/transforms/ManipulateNames.scala b/src/main/scala/firrtl/transforms/ManipulateNames.scala index 1dbc46ad..7be876ef 100644 --- a/src/main/scala/firrtl/transforms/ManipulateNames.scala +++ b/src/main/scala/firrtl/transforms/ManipulateNames.scala @@ -185,7 +185,7 @@ abstract class ManipulateNames[A <: ManipulateNames[_]: ClassTag] extends Transf override def optionalPrerequisites: Seq[TransformDependency] = Seq.empty override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters override def invalidates(a: Transform) = a match { - case _: analyses.GetNamespace => true + case passes.InferTypes | _: analyses.GetNamespace => true case _ => false } diff --git a/src/main/scala/firrtl/transforms/RemoveKeywordCollisions.scala b/src/main/scala/firrtl/transforms/RemoveKeywordCollisions.scala index 3cf0e40a..0bf6419f 100644 --- a/src/main/scala/firrtl/transforms/RemoveKeywordCollisions.scala +++ b/src/main/scala/firrtl/transforms/RemoveKeywordCollisions.scala @@ -47,6 +47,4 @@ class VerilogRename extends RemoveKeywordCollisions(v_keywords) { override def optionalPrerequisiteOf = Seq.empty - override def invalidates(a: Transform) = false - } diff --git a/src/test/scala/firrtlTests/LoweringCompilersSpec.scala b/src/test/scala/firrtlTests/LoweringCompilersSpec.scala index ffaaf332..54f0af8e 100644 --- a/src/test/scala/firrtlTests/LoweringCompilersSpec.scala +++ b/src/test/scala/firrtlTests/LoweringCompilersSpec.scala @@ -249,6 +249,7 @@ class LoweringCompilersSpec extends AnyFlatSpec with Matchers { new firrtl.transforms.FlattenRegUpdate, firrtl.passes.VerilogModulusCleanup, new firrtl.transforms.VerilogRename, + firrtl.passes.InferTypes, firrtl.passes.VerilogPrep, new firrtl.AddDescriptionNodes ) @@ -273,6 +274,7 @@ class LoweringCompilersSpec extends AnyFlatSpec with Matchers { new firrtl.transforms.DeadCodeElimination, firrtl.passes.VerilogModulusCleanup, new firrtl.transforms.VerilogRename, + firrtl.passes.InferTypes, firrtl.passes.VerilogPrep, new firrtl.AddDescriptionNodes ) diff --git a/src/test/scala/firrtlTests/VerilogEmitterTests.scala b/src/test/scala/firrtlTests/VerilogEmitterTests.scala index 4a3686fa..7704a0a2 100644 --- a/src/test/scala/firrtlTests/VerilogEmitterTests.scala +++ b/src/test/scala/firrtlTests/VerilogEmitterTests.scala @@ -5,10 +5,10 @@ package firrtlTests import java.io.File import firrtl._ +import firrtl.stage._ import firrtl.annotations._ import firrtl.passes._ -import firrtl.transforms.VerilogRename -import firrtl.transforms.CombineCats +import firrtl.transforms.{CombineCats, NoDCEAnnotation} import firrtl.testutils._ import firrtl.testutils.FirrtlCheckers._ import firrtl.util.BackendCompilationUtilities @@ -441,32 +441,51 @@ class VerilogEmitterSpec extends FirrtlFlatSpec { | node const = add(UInt<4>("h1"), UInt<3>("h1")) | fork <= const |""".stripMargin - val check_firrtl = - """|circuit parameter_: - | module parameter_: - | input always____: UInt<1> - | output always$: UInt<1> - | inst assign_ of endmodule__ - | inst edge_ of endmodule_ - | node always_ = not(always____) - | node always__ = and(always_, assign_.fork_) - | node always___ = and(always__, edge_.fork_) - | always$ <= always___ - | module endmodule__: - | output fork_: UInt<1> - | node const_ = add(UInt<4>("h1"), UInt<3>("h2")) - | fork_ <= const_ - | module endmodule_: - | output fork_: UInt<1> - | node const_ = add(UInt<4>("h1"), UInt<3>("h1")) - | fork_ <= const_ - |""".stripMargin - val state = CircuitState(parse(input), UnknownForm, Seq.empty, None) - val output = Seq(ToWorkingIR, ResolveKinds, InferTypes, new VerilogRename) - .foldLeft(state) { case (c, tx) => tx.runTransform(c) } - Seq(CheckHighForm) - .foldLeft(output.circuit) { case (c, tx) => tx.run(c) } - output.circuit.serialize should be(parse(check_firrtl).serialize) + val check = + """module parameter_( + | input always____, + | output always$ + |); + | wire assign__fork_; + | wire edge__fork_; + | wire always_ = ~always____; + | wire always__ = always_; + | wire always___ = 1'h0; + | endmodule__ assign_ ( + | .fork_(assign__fork_) + | ); + | endmodule_ edge_ ( + | .fork_(edge__fork_) + | ); + | assign always$ = 1'h0; + |endmodule + |module endmodule__( + | output fork_ + |); + | wire [4:0] const_ = 5'h3; + | assign fork_ = 1'h1; + |endmodule + |module endmodule_( + | output fork_ + |); + | wire [4:0] const_ = 5'h2; + | assign fork_ = 1'h0; + |endmodule + |""".stripMargin.split('\n') + val circuit = parse(input) + val annotations = (new FirrtlStage).transform( + Seq( + FirrtlCircuitAnnotation(circuit), + NoDCEAnnotation, + EmitCircuitAnnotation(classOf[VerilogEmitter]) + ) + ) + CircuitState( + annotations.collectFirst { + case FirrtlCircuitAnnotation(circuit) => circuit + }.get, + annotations + ) should containLines(check: _*) } behavior.of("Register Updates") |
