diff options
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/core/package.scala | 7 | ||||
| -rw-r--r-- | src/test/scala/chiselTests/LiteralExtractorSpec.scala | 3 |
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 { |
