summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/LiteralExtractorSpec.scala
diff options
context:
space:
mode:
authorchick2019-12-12 12:06:15 -0800
committerchick2019-12-18 13:57:50 -0800
commit0bcce65d5e3001b1b7098aa2c1ccd60fcc2a6628 (patch)
treeba737c4c886005552b0e95fb48f5ff5cbdc31ea9 /src/test/scala/chiselTests/LiteralExtractorSpec.scala
parent954cc41e1349d0df6d2250d6270590340cd36e82 (diff)
- New trait HasBinaryPoint which provides literal values as double and big decimal
- made .F and .I work for creating fixed point and interval lits from big decimal - Added NumObject trait which provides new math conversions - Made a Num object that extends NumObject - Add this trait to FixedPoint and Interval for backward compatibility - Removed code that is now in NumObject, keeping things DRY - Add tests to FixedPointSpec to show lit conversion to double and big decimal - Add tests to IntervalSpec to show lit conversion to double and big decimal - Add tests to LiteralExtractorSpec to show general math conversions between BigInts with binary points and double and big decimal
Diffstat (limited to 'src/test/scala/chiselTests/LiteralExtractorSpec.scala')
-rw-r--r--src/test/scala/chiselTests/LiteralExtractorSpec.scala43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/test/scala/chiselTests/LiteralExtractorSpec.scala b/src/test/scala/chiselTests/LiteralExtractorSpec.scala
index b56672af..145c1ef2 100644
--- a/src/test/scala/chiselTests/LiteralExtractorSpec.scala
+++ b/src/test/scala/chiselTests/LiteralExtractorSpec.scala
@@ -3,7 +3,7 @@
package chiselTests
import chisel3._
-import chisel3.experimental.FixedPoint
+import chisel3.experimental._
import chisel3.experimental.BundleLiterals._
import chisel3.testers.BasicTester
@@ -55,6 +55,47 @@ class LiteralExtractorSpec extends ChiselFlatSpec {
}}
}
+ "doubles and big decimals" should "round trip properly" in {
+ intercept[ChiselException] {
+ Num.toBigDecimal(BigInt("1" * 109, 2), 0.BP) // this only works if number takes less than 109 bits
+ }
+
+ intercept[ChiselException] {
+ Num.toDouble(BigInt("1" * 54, 2), 0.BP) // this only works if number takes less than 54 bits
+ }
+
+ val bigInt108 = BigInt("1" * 108, 2)
+ val bigDecimal = Num.toBigDecimal(bigInt108, 2)
+
+ val bigIntFromBigDecimal = Num.toBigInt(bigDecimal, 2)
+
+ bigIntFromBigDecimal should be (bigInt108)
+
+ val bigInt53 = BigInt("1" * 53, 2)
+
+ val double = Num.toDouble(bigInt53, 2)
+
+ val bigIntFromDouble = Num.toBigInt(double, 2)
+
+ bigIntFromDouble should be (bigInt53)
+ }
+
+ "encoding and decoding of Intervals" should "round trip" in {
+ val rangeMin = BigDecimal(-31.5)
+ val rangeMax = BigDecimal(32.5)
+ val range = range"($rangeMin, $rangeMax).2"
+ for(value <- (rangeMin - 4) to (rangeMax + 4) by 2.25) {
+ if (value < rangeMin || value > rangeMax) {
+ intercept[ChiselException] {
+ val literal = value.I(range)
+ }
+ } else {
+ val literal = value.I(range)
+ literal.isLit() should be(true)
+ literal.litValue().toDouble / 4.0 should be(value)
+ }
+ }
+ }
"literals declared outside a builder context" should "compare with those inside builder context" in {
class InsideBundle extends Bundle {