diff options
| author | Jack Koenig | 2021-03-16 10:26:38 -0700 |
|---|---|---|
| committer | GitHub | 2021-03-16 10:26:38 -0700 |
| commit | 94d1bee4c23bd3d8f99dae3ca431ffaa5dc1410d (patch) | |
| tree | d673a1024f74ca65b27329343082dc1751e1583f /src/test | |
| parent | 0eb7afd09d488507d776017c5df8f6ec56924927 (diff) | |
Fix issue where inlined cvt could cause crash (#2124)
Due to inlining of Boolean expressions, the following circuit is handled
directly by the VerilogEmitter:
input a: UInt<4>
input b: SInt<1>
output o: UInt<5>
o <= dshl(a, asUInt(cvt(b)))
Priot to this change, this could crash due to mishandling of cvt in the
logic to inject parentheses based on Verilog precedence rules.
This is a corner case, but similar bugs would drop up if we open up the
VerilogEmitter to more expression inlining.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala b/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala index 02ac3cd0..e11c4281 100644 --- a/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala +++ b/src/test/scala/firrtlTests/InlineBooleanExpressionsSpec.scala @@ -392,6 +392,22 @@ class InlineBooleanExpressionsSpec extends FirrtlFlatSpec { firrtlEquivalenceTest(input, Seq(new InlineBooleanExpressions)) } + // https://github.com/chipsalliance/firrtl/issues/2035 + // This is interesting because other ways of trying to express this get split out by + // SplitExpressions and don't get inlined again + // If we were to inline more expressions (ie. not just boolean ones) the issue this represents + // would come up more often + it should "handle cvt nested inside of a dshl" in { + val input = + """circuit DshlCvt: + | module DshlCvt: + | input a: UInt<4> + | input b: SInt<1> + | output o: UInt + | o <= dshl(a, asUInt(cvt(b)))""".stripMargin + firrtlEquivalenceTest(input, Seq(new InlineBooleanExpressions)) + } + it should s"respect --${PrettyNoExprInlining.longOption}" in { val input = """circuit Top : |
