diff options
| author | Richard Lin | 2017-03-24 14:08:11 -0700 |
|---|---|---|
| committer | GitHub | 2017-03-24 14:08:11 -0700 |
| commit | 347bd2f9b23eb8cf67089c314741d571adf82aac (patch) | |
| tree | 747726947f73242a80a997f7993071bacce217a1 /chiselFrontend/src/main/scala/chisel3/core | |
| parent | b572319a15bfdbefd535c0ea5c3767535c19707c (diff) | |
Fixed fix, allow Mux of different binary points and widths (#559)
Allow muxing FxP of different widths and BPs
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/core')
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/core/Data.scala | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Data.scala b/chiselFrontend/src/main/scala/chisel3/core/Data.scala index 66720f7c..c9cfe27b 100644 --- a/chiselFrontend/src/main/scala/chisel3/core/Data.scala +++ b/chiselFrontend/src/main/scala/chisel3/core/Data.scala @@ -48,8 +48,15 @@ private[core] object cloneSupertype { case (elt1: UInt, elt2: UInt) => if (elt1.width == (elt1.width max elt2.width)) elt1 else elt2 // TODO: perhaps redefine Widths to allow >= op? case (elt1: SInt, elt2: SInt) => if (elt1.width == (elt1.width max elt2.width)) elt1 else elt2 case (elt1: FixedPoint, elt2: FixedPoint) => { - require(elt1.binaryPoint == elt2.binaryPoint, s"can't create $createdType with FixedPoint with differing binaryPoints") - if (elt1.width == (elt1.width max elt2.width)) elt1 else elt2 + (elt1.binaryPoint, elt2.binaryPoint, elt1.width, elt2.width) match { + case (KnownBinaryPoint(bp1), KnownBinaryPoint(bp2), KnownWidth(w1), KnownWidth(w2)) => + val maxBinaryPoint = bp1 max bp2 + val maxIntegerWidth = (w1 - bp1) max (w2 - bp2) + FixedPoint((maxIntegerWidth + maxBinaryPoint).W, (maxBinaryPoint).BP) + case (KnownBinaryPoint(bp1), KnownBinaryPoint(bp2), _, _) => + FixedPoint(Width(), (bp1 max bp2).BP) + case _ => FixedPoint() + } } case (elt1, elt2) => throw new AssertionError(s"can't create $createdType with heterogeneous Bits types ${elt1.getClass} and ${elt2.getClass}") |
