aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorAlbert Magyar2020-02-05 18:50:25 -0700
committerGitHub2020-02-06 01:50:25 +0000
commitbf0ea92752cfb3db1797b8ffc8ff0c776552b1cf (patch)
tree13db1ada11921921ff6e46e2c775a3f275a0d56b /src/test
parent9b64b3376b6278b90f746e7dfa3e27ea78c8c3dc (diff)
Emit 'else' case for trivial-valued async reset regs to avoid latches (#1359)
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/firrtlTests/AsyncResetSpec.scala23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/AsyncResetSpec.scala b/src/test/scala/firrtlTests/AsyncResetSpec.scala
index f347ec14..98d51ac8 100644
--- a/src/test/scala/firrtlTests/AsyncResetSpec.scala
+++ b/src/test/scala/firrtlTests/AsyncResetSpec.scala
@@ -319,6 +319,29 @@ class AsyncResetSpec extends FirrtlFlatSpec {
)
}
+ "AsyncReset registers" should "emit 'else' case for reset even for trivial valued registers" in {
+ val withDontTouch = s"""
+ |circuit m :
+ | module m :
+ | input clock : Clock
+ | input reset : AsyncReset
+ | input x : UInt<8>
+ | reg r : UInt<8>, clock with : (reset => (reset, UInt(123)))
+ |""".stripMargin
+ val annos = Seq(dontTouch("m.r")) // dontTouch prevents ConstantPropagation from fixing this problem
+ val result = (new VerilogCompiler).compileAndEmit(CircuitState(parse(withDontTouch), ChirrtlForm, annos))
+ result should containLines (
+ "always @(posedge clock or posedge reset) begin",
+ "if (reset) begin",
+ "r <= 8'h7b;",
+ "end else begin",
+ "r <= 8'h7b;",
+ "end",
+ "end"
+ )
+
+ }
+
}
class AsyncResetExecutionTest extends ExecutionTest("AsyncResetTester", "/features")