aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/firrtl/passes/Passes.scala2
-rw-r--r--src/main/scala/firrtl/passes/memlib/MemUtils.scala15
2 files changed, 14 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala
index 87458a2b..0e91c642 100644
--- a/src/main/scala/firrtl/passes/Passes.scala
+++ b/src/main/scala/firrtl/passes/Passes.scala
@@ -210,7 +210,7 @@ object Legalize extends Pass {
val expr = t match {
case UIntType(_) => bits
case SIntType(_) => DoPrim(AsSInt, Seq(bits), Seq(), SIntType(IntWidth(w)))
- //case FixedType(width, point) => FixedType(width, point)
+ case FixedType(_, IntWidth(p)) => DoPrim(AsFixedPoint, Seq(bits), Seq(p), t)
}
Connect(c.info, c.loc, expr)
}
diff --git a/src/main/scala/firrtl/passes/memlib/MemUtils.scala b/src/main/scala/firrtl/passes/memlib/MemUtils.scala
index ffe3bbcd..0962015e 100644
--- a/src/main/scala/firrtl/passes/memlib/MemUtils.scala
+++ b/src/main/scala/firrtl/passes/memlib/MemUtils.scala
@@ -31,7 +31,7 @@ object toBits {
hiercat(WSubIndex(e, i, t.tpe, UNKNOWNGENDER))))
case t: BundleType => seqCat(t.fields map (f =>
hiercat(WSubField(e, f.name, f.tpe, UNKNOWNGENDER))))
- case t: GroundType => e
+ case t: GroundType => DoPrim(AsUInt, Seq(e), Seq.empty, UnknownType)
case t => error("Unknown type encountered in toBits!")
}
}
@@ -89,6 +89,16 @@ object bitWidth {
}
}
+object castRhs {
+ def apply(lhst: Type, rhs: Expression) = {
+ lhst match {
+ case _: SIntType => DoPrim(AsSInt, Seq(rhs), Seq.empty, lhst)
+ case FixedType(_, IntWidth(p)) => DoPrim(AsFixedPoint, Seq(rhs), Seq(p), lhst)
+ case _: UIntType => rhs
+ }
+ }
+}
+
object fromBits {
def apply(lhs: Expression, rhs: Expression): Statement = {
val fbits = lhs match {
@@ -103,7 +113,8 @@ object fromBits {
offset: BigInt): (BigInt, Seq[Statement]) = {
val intWidth = bitWidth(lhst)
val sel = DoPrim(PrimOps.Bits, Seq(rhs), Seq(offset + intWidth - 1, offset), UnknownType)
- (offset + intWidth, Seq(Connect(NoInfo, lhs, sel)))
+ val rhsConnect = castRhs(lhst, sel)
+ (offset + intWidth, Seq(Connect(NoInfo, lhs, rhsConnect)))
}
private def getPart(lhs: Expression,
lhst: Type,