From 32c3c0d46dcd24ae3430ec151eacab5049bf07a9 Mon Sep 17 00:00:00 2001 From: Paul Rigge Date: Thu, 1 Dec 2016 13:35:48 -0800 Subject: Have FixedPoint use asFixedPoint in fromBits. --- chiselFrontend/src/main/scala/chisel3/core/Bits.scala | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'chiselFrontend') diff --git a/chiselFrontend/src/main/scala/chisel3/core/Bits.scala b/chiselFrontend/src/main/scala/chisel3/core/Bits.scala index 035ac213..a769342d 100644 --- a/chiselFrontend/src/main/scala/chisel3/core/Bits.scala +++ b/chiselFrontend/src/main/scala/chisel3/core/Bits.scala @@ -911,6 +911,12 @@ sealed class FixedPoint private (width: Width, val binaryPoint: BinaryPoint, lit override def do_asUInt(implicit sourceInfo: SourceInfo): UInt = pushOp(DefPrim(sourceInfo, UInt(this.width), AsUIntOp, ref)) override def do_asSInt(implicit sourceInfo: SourceInfo): SInt = pushOp(DefPrim(sourceInfo, SInt(this.width), AsSIntOp, ref)) //TODO(chick): Consider "convert" as an arithmetic conversion to UInt/SInt + + override def do_fromBits(that: Bits)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): this.type = { + val res = Wire(this, null).asInstanceOf[this.type] + res := that.asFixedPoint(this.binaryPoint) + res + } } /** Use PrivateObject to force users to specify width and binaryPoint by name -- cgit v1.2.3 From 316d749df58421b52a72344c27137284d1413131 Mon Sep 17 00:00:00 2001 From: Paul Rigge Date: Tue, 13 Dec 2016 15:10:05 -0800 Subject: Checkpoint --- chiselFrontend/src/main/scala/chisel3/core/package.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'chiselFrontend') diff --git a/chiselFrontend/src/main/scala/chisel3/core/package.scala b/chiselFrontend/src/main/scala/chisel3/core/package.scala index 87dca1f3..9fa20f49 100644 --- a/chiselFrontend/src/main/scala/chisel3/core/package.scala +++ b/chiselFrontend/src/main/scala/chisel3/core/package.scala @@ -2,7 +2,7 @@ package chisel3 { import internal.Builder package object core { - import internal.firrtl.Width + import internal.firrtl.{Width, BinaryPoint} /** * These implicit classes allow one to convert scala.Int|scala.BigInt to @@ -100,5 +100,9 @@ package chisel3 { implicit class fromIntToWidth(val int: Int) { def W: Width = Width(int) // scalastyle:ignore method.name } + + implicit class fromIntToBinaryPoint(val int: Int) { + def BP: BinaryPoint = BinaryPoint(int) // scalastyle:ignore method.name + } } } -- cgit v1.2.3 From f9d528b3763429275430b84839ccf0b4570531a2 Mon Sep 17 00:00:00 2001 From: Paul Rigge Date: Tue, 13 Dec 2016 15:54:36 -0800 Subject: Fix test. --- chiselFrontend/src/main/scala/chisel3/core/Bits.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'chiselFrontend') diff --git a/chiselFrontend/src/main/scala/chisel3/core/Bits.scala b/chiselFrontend/src/main/scala/chisel3/core/Bits.scala index a769342d..c5fc10e7 100644 --- a/chiselFrontend/src/main/scala/chisel3/core/Bits.scala +++ b/chiselFrontend/src/main/scala/chisel3/core/Bits.scala @@ -647,7 +647,13 @@ sealed class SInt private[core] (width: Width, lit: Option[SLit] = None) override def do_asUInt(implicit sourceInfo: SourceInfo): UInt = pushOp(DefPrim(sourceInfo, UInt(this.width), AsUIntOp, ref)) override def do_asSInt(implicit sourceInfo: SourceInfo): SInt = this override def do_asFixedPoint(binaryPoint: BinaryPoint)(implicit sourceInfo: SourceInfo): FixedPoint = { - pushOp(DefPrim(sourceInfo, FixedPoint(width, binaryPoint), AsFixedPointOp, ref)) + binaryPoint match { + case KnownBinaryPoint(value) => + val iLit = ILit(value) + pushOp(DefPrim(sourceInfo, FixedPoint(width, binaryPoint), AsFixedPointOp, ref, iLit)) + case _ => + throwException(s"cannot call $this.asFixedPoint(binaryPoint=$binaryPoint), you must specify a known binaryPoint") + } } } -- cgit v1.2.3