From 6297e00aa845cf6cc1275c05d313f3237e69de9d Mon Sep 17 00:00:00 2001 From: Albert Magyar Date: Thu, 17 Aug 2017 17:55:44 -0700 Subject: Use firrtl elses in elsewhen/otherwise case emission (#510) Preprocess chisel3 IR before emission to determing whether whens have alternatives.--- src/test/scala/chiselTests/When.scala | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/test/scala/chiselTests') diff --git a/src/test/scala/chiselTests/When.scala b/src/test/scala/chiselTests/When.scala index d4491e13..d2646df7 100644 --- a/src/test/scala/chiselTests/When.scala +++ b/src/test/scala/chiselTests/When.scala @@ -53,6 +53,28 @@ class OverlappedWhenTester() extends BasicTester { } } +class NoOtherwiseOverlappedWhenTester() extends BasicTester { + val cnt = Counter(4) + when(true.B) { cnt.inc() } + + val out = Wire(UInt(3.W)) + when(cnt.value <= 0.U) { + out := 1.U + } .elsewhen (cnt.value <= 1.U) { + out := 2.U + } .elsewhen (cnt.value <= 2.U) { + out := 3.U + } .elsewhen (cnt.value <= 3.U) { + out := 0.U + } + + assert(out === cnt.value + 1.U) + + when(cnt.value === 3.U) { + stop() + } +} + class WhenSpec extends ChiselFlatSpec { "When, elsewhen, and otherwise with orthogonal conditions" should "work" in { assertTesterPasses{ new WhenTester } @@ -60,4 +82,7 @@ class WhenSpec extends ChiselFlatSpec { "When, elsewhen, and otherwise with overlapped conditions" should "work" in { assertTesterPasses{ new OverlappedWhenTester } } + "When and elsewhen without otherwise with overlapped conditions" should "work" in { + assertTesterPasses{ new NoOtherwiseOverlappedWhenTester } + } } -- cgit v1.2.3