summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Lin2018-11-01 17:06:35 -0700
committerGitHub2018-11-01 17:06:35 -0700
commit1910f708bb99e906bf83dc13fbedd95d40410d98 (patch)
treeb5a36df0d64f1f2de2a9b0d435c342832b2dabc5
parent4dddde56d0c1a66a05457c7dda409238d2de8e8a (diff)
Add BigInt / Int to Bool conversion (0.B, 1.B) (#913)
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/package.scala7
-rw-r--r--src/test/scala/chiselTests/LiteralExtractorSpec.scala3
2 files changed, 10 insertions, 0 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/package.scala b/chiselFrontend/src/main/scala/chisel3/core/package.scala
index f68ce0e8..99c9a7ae 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/package.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/package.scala
@@ -24,6 +24,13 @@ package chisel3 {
* `0.asUInt(16)` (instead of `16.W`) compile without error and produce undesired results.
*/
implicit class fromBigIntToLiteral(bigint: BigInt) {
+ /** Int to Bool conversion, allowing compact syntax like 1.B and 0.B
+ */
+ def B: Bool = bigint match {
+ case bigint if bigint == 0 => Bool.Lit(false)
+ case bigint if bigint == 1 => Bool.Lit(true)
+ case bigint => Builder.error(s"Cannot convert $bigint to Bool, must be 0 or 1"); Bool.Lit(false)
+ }
/** Int to UInt conversion, recommended style for constants.
*/
def U: UInt = UInt.Lit(bigint, Width()) // scalastyle:ignore method.name
diff --git a/src/test/scala/chiselTests/LiteralExtractorSpec.scala b/src/test/scala/chiselTests/LiteralExtractorSpec.scala
index e3cf2587..2879f2d9 100644
--- a/src/test/scala/chiselTests/LiteralExtractorSpec.scala
+++ b/src/test/scala/chiselTests/LiteralExtractorSpec.scala
@@ -32,6 +32,9 @@ class LiteralExtractorSpec extends ChiselFlatSpec {
"litToBoolean" should "return the literal value" in {
assert(true.B.litToBoolean === true)
assert(false.B.litToBoolean === false)
+
+ assert(1.B.litToBoolean === true)
+ assert(0.B.litToBoolean === false)
}
"litToDouble" should "return the literal value" in {