aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiuyang Liu2020-10-27 00:48:54 +0800
committerGitHub2020-10-27 00:48:54 +0800
commitd1c0181e716c37142e233beed2efcea5c5794aa7 (patch)
treef396139f5dca9aace34be2cb8e9e1ccfeda1190f
parenta5a8c7a8f5d1dd38ac3452d7c98ac7773f692304 (diff)
parent61f3e886affce326a2c09c2f5ba8a69465c0c2ee (diff)
Merge pull request #1932 from freechipsproject/fix_VerilogPrep
Fix verilog prep
-rw-r--r--src/main/scala/firrtl/transforms/ManipulateNames.scala2
-rw-r--r--src/main/scala/firrtl/transforms/RemoveKeywordCollisions.scala2
-rw-r--r--src/test/scala/firrtlTests/LoweringCompilersSpec.scala2
-rw-r--r--src/test/scala/firrtlTests/VerilogEmitterTests.scala75
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")