diff options
| author | Albert Magyar | 2020-02-05 18:50:25 -0700 |
|---|---|---|
| committer | GitHub | 2020-02-06 01:50:25 +0000 |
| commit | bf0ea92752cfb3db1797b8ffc8ff0c776552b1cf (patch) | |
| tree | 13db1ada11921921ff6e46e2c775a3f275a0d56b /src/test | |
| parent | 9b64b3376b6278b90f746e7dfa3e27ea78c8c3dc (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.scala | 23 |
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") |
