summaryrefslogtreecommitdiff
path: root/chiselFrontend/src/main/scala/chisel3/core/package.scala
diff options
context:
space:
mode:
authorducky2016-11-16 18:31:24 -0800
committerducky2016-11-21 13:26:56 -0800
commit15a8d3818a1b185051b260ffc82da1fb4a60a45e (patch)
treeccfc4e7cb11f9ef5e367c28b721a630e27abd51e /chiselFrontend/src/main/scala/chisel3/core/package.scala
parentcd6eb41275381a4399a8a88c886110d276bb805c (diff)
Break out deprecated literal constructors, refactor all the things!
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/core/package.scala')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/package.scala50
1 files changed, 50 insertions, 0 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/package.scala b/chiselFrontend/src/main/scala/chisel3/core/package.scala
new file mode 100644
index 00000000..46dfbe20
--- /dev/null
+++ b/chiselFrontend/src/main/scala/chisel3/core/package.scala
@@ -0,0 +1,50 @@
+package chisel3 {
+ package object core {
+ import internal.firrtl.Width
+
+ /**
+ * These implicit classes allow one to convert scala.Int|scala.BigInt to
+ * Chisel.UInt|Chisel.SInt by calling .asUInt|.asSInt on them, respectively.
+ * The versions .asUInt(width)|.asSInt(width) are also available to explicitly
+ * mark a width for the new literal.
+ *
+ * Also provides .asBool to scala.Boolean and .asUInt to String
+ *
+ * Note that, for stylistic reasons, one should avoid extracting immediately
+ * after this call using apply, ie. 0.asUInt(1)(0) due to potential for
+ * confusion (the 1 is a bit length and the 0 is a bit extraction position).
+ * Prefer storing the result and then extracting from it.
+ */
+ implicit class fromIntToLiteral(val x: Int) {
+ def U: UInt = UInt.Lit(BigInt(x), Width()) // scalastyle:ignore method.name
+ def S: SInt = SInt(BigInt(x), Width()) // scalastyle:ignore method.name
+
+ def asUInt(): UInt = UInt.Lit(x, Width())
+ def asSInt(): SInt = SInt(x, Width())
+ def asUInt(width: Int): UInt = UInt.Lit(x, width)
+ def asSInt(width: Int): SInt = SInt(x, width)
+ }
+
+ implicit class fromBigIntToLiteral(val x: BigInt) {
+ def U: UInt = UInt.Lit(x, Width()) // scalastyle:ignore method.name
+ def S: SInt = SInt(x, Width()) // scalastyle:ignore method.name
+
+ def asUInt(): UInt = UInt.Lit(x, Width())
+ def asSInt(): SInt = SInt(x, Width())
+ def asUInt(width: Int): UInt = UInt.Lit(x, width)
+ def asSInt(width: Int): SInt = SInt(x, width)
+ }
+
+ implicit class fromStringToLiteral(val x: String) {
+ def U: UInt = UInt.Lit(x) // scalastyle:ignore method.name
+ }
+
+ implicit class fromBooleanToLiteral(val x: Boolean) {
+ def B: Bool = Bool(x) // scalastyle:ignore method.name
+ }
+
+ implicit class fromDoubleToLiteral(val x: Double) {
+ def F(binaryPoint: Int): FixedPoint = FixedPoint.fromDouble(x, binaryPoint = binaryPoint)
+ }
+ }
+} \ No newline at end of file