diff options
| author | Adam Izraelevitz | 2017-01-11 13:02:47 -0800 |
|---|---|---|
| committer | GitHub | 2017-01-11 13:02:47 -0800 |
| commit | 3215df07a97b58babb1deb3fab0928198b1daad2 (patch) | |
| tree | 0099c332f9a629a0b41eb3680f6c493e18bf57ca /chiselFrontend/src/main/scala/chisel3 | |
| parent | 06df5adfd78061aa5ae7567882fb8c42d7260a46 (diff) | |
| parent | 514eadb99e6715e161c73f487347872eed004230 (diff) | |
Merge pull request #391 from grebe/fixedPointFromBits
Have FixedPoint use asFixedPoint in fromBits.
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3')
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/core/Bits.scala | 14 | ||||
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/core/package.scala | 6 |
2 files changed, 18 insertions, 2 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Bits.scala b/chiselFrontend/src/main/scala/chisel3/core/Bits.scala index 035ac213..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") + } } } @@ -911,6 +917,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 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 + } } } |
