aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorKevin Laeufer2021-12-21 12:07:30 -0500
committerGitHub2021-12-21 09:07:30 -0800
commit2d197c841c5400c6deaa1592525be6a1d81dc1e2 (patch)
tree70c27ea58339cb1cfbc6abbe016295f869a9298b /src/test
parentc00a4ebb0608f9ef98729e9b610a2678be2bc4fd (diff)
smt: deal correctly with negative SInt literals (#2447)
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemanticsSpec.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemanticsSpec.scala b/src/test/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemanticsSpec.scala
index 7476b20c..52021625 100644
--- a/src/test/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemanticsSpec.scala
+++ b/src/test/scala/firrtl/backends/experimental/smt/FirrtlExpressionSemanticsSpec.scala
@@ -278,4 +278,35 @@ class FirrtlExpressionSemanticsSpec extends AnyFlatSpec {
assert(primop(false, "tail", 4, List(5), List(1)) == "i0[3:0]")
assert(primop(false, "tail", 2, List(5), List(3)) == "i0[1:0]")
}
+
+ private def literalSource(resTpe: String, lit: String) =
+ s"""circuit m:
+ | module m:
+ | output res: $resTpe
+ | res <= $lit
+ |
+ |""".stripMargin
+ private def literalExpr(resTpe: String, lit: String) = {
+ val src = literalSource(resTpe, lit)
+ val sys = SMTBackendHelpers.toSys(src, modelUndef = true)
+ sys.signals.last.e.toString
+ }
+
+ private def uIntLit(lit: String) = literalExpr("UInt", lit)
+ it should "correctly translate unsigned integer literals" in {
+ assert(uIntLit("UInt(5)") == "3'b101")
+ assert(uIntLit("UInt<4>(5)") == "4'b101")
+ assert(uIntLit("UInt(0)") == "1'b0")
+ }
+
+ private def sIntLit(lit: String) = literalExpr("SInt", lit)
+ it should "correctly translate signed integer literals" in {
+ assert(sIntLit("SInt(5)") == "4'b101")
+ assert(sIntLit("SInt<4>(5)") == "4'b101")
+ assert(sIntLit("SInt(0)") == "1'b0")
+ assert(sIntLit("SInt(-1)") == "1'b1")
+ assert(sIntLit("SInt(-2)") == "2'b10")
+ assert(sIntLit("SInt(-5)") == "4'b1011")
+ assert(sIntLit("SInt<4>(-5)") == "4'b1011")
+ }
}