diff options
| author | Donggyu Kim | 2016-08-30 17:13:59 -0700 |
|---|---|---|
| committer | Donggyu Kim | 2016-09-07 16:34:31 -0700 |
| commit | db584ed4cb31731e1561e447d5b3609f234fc8db (patch) | |
| tree | 6b6d2200aab20d09ce865f87a8bee6234e143d5d /src | |
| parent | a404cf5b2c4ca6457c964eb32aae8330c48422e1 (diff) | |
clean up WIR.scala
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/WIR.scala | 204 |
1 files changed, 86 insertions, 118 deletions
diff --git a/src/main/scala/firrtl/WIR.scala b/src/main/scala/firrtl/WIR.scala index eddd723b..9583175e 100644 --- a/src/main/scala/firrtl/WIR.scala +++ b/src/main/scala/firrtl/WIR.scala @@ -88,33 +88,29 @@ case object Dshlw extends PrimOp { override def toString = "dshlw" } case object Shlw extends PrimOp { override def toString = "shlw" } object WrappedExpression { - def apply (e:Expression) = new WrappedExpression(e) - def we (e:Expression) = new WrappedExpression(e) - def weq (e1:Expression,e2:Expression) = we(e1) == we(e2) -} -class WrappedExpression (val e1:Expression) { - override def equals (we:Any) = { - we match { - case (we:WrappedExpression) => { - (e1,we.e1) match { - case (e1:UIntLiteral,e2:UIntLiteral) => if (e1.value == e2.value) eqw(e1.width,e2.width) else false - case (e1:SIntLiteral,e2:SIntLiteral) => if (e1.value == e2.value) eqw(e1.width,e2.width) else false - case (e1:WRef,e2:WRef) => e1.name equals e2.name - case (e1:WSubField,e2:WSubField) => (e1.name equals e2.name) && weq(e1.exp,e2.exp) - case (e1:WSubIndex,e2:WSubIndex) => (e1.value == e2.value) && weq(e1.exp,e2.exp) - case (e1:WSubAccess,e2:WSubAccess) => weq(e1.index,e2.index) && weq(e1.exp,e2.exp) - case (e1:WVoid,e2:WVoid) => true - case (e1:WInvalid,e2:WInvalid) => true - case (e1:DoPrim,e2:DoPrim) => e1.op == e2.op && - ((e1.consts zip e2.consts) forall {case (x, y) => x == y}) && - ((e1.args zip e2.args) forall {case (x, y) => weq(x, y)}) - case (e1:Mux,e2:Mux) => weq(e1.cond,e2.cond) && weq(e1.tval,e2.tval) && weq(e1.fval,e2.fval) - case (e1:ValidIf,e2:ValidIf) => weq(e1.cond,e2.cond) && weq(e1.value,e2.value) - case (e1,e2) => false - } - } - case _ => false - } + def apply(e: Expression) = new WrappedExpression(e) + def we(e: Expression) = new WrappedExpression(e) + def weq(e1: Expression, e2: Expression) = we(e1) == we(e2) +} +class WrappedExpression (val e1: Expression) { + override def equals (we: Any) = we match { + case (we:WrappedExpression) => (e1,we.e1) match { + case (e1: UIntLiteral, e2: UIntLiteral) => e1.value == e2.value && eqw(e1.width, e2.width) + case (e1: SIntLiteral, e2: SIntLiteral) => e1.value == e2.value && eqw(e1.width, e2.width) + case (e1: WRef, e2: WRef) => e1.name equals e2.name + case (e1: WSubField, e2: WSubField) => (e1.name equals e2.name) && weq(e1.exp,e2.exp) + case (e1: WSubIndex, e2: WSubIndex) => (e1.value == e2.value) && weq(e1.exp,e2.exp) + case (e1: WSubAccess, e2: WSubAccess) => weq(e1.index,e2.index) && weq(e1.exp,e2.exp) + case (e1: WVoid, e2: WVoid) => true + case (e1: WInvalid, e2: WInvalid) => true + case (e1: DoPrim, e2: DoPrim) => e1.op == e2.op && + ((e1.consts zip e2.consts) forall {case (x, y) => x == y}) && + ((e1.args zip e2.args) forall {case (x, y) => weq(x, y)}) + case (e1: Mux, e2: Mux) => weq(e1.cond,e2.cond) && weq(e1.tval,e2.tval) && weq(e1.fval,e2.fval) + case (e1: ValidIf, e2: ValidIf) => weq(e1.cond,e2.cond) && weq(e1.value,e2.value) + case (e1, e2) => false + } + case _ => false } override def hashCode = e1.serialize.hashCode override def toString = e1.serialize @@ -141,107 +137,79 @@ case class ExpWidth(arg1: Width) extends Width { } object WrappedType { - def apply (t:Type) = new WrappedType(t) - def wt (t:Type) = apply(t) -} -class WrappedType (val t:Type) { - def wt (tx:Type) = new WrappedType(tx) - override def equals (o:Any) : Boolean = { - o match { - case (t2:WrappedType) => { - (t,t2.t) match { - case (t1:UIntType,t2:UIntType) => true - case (t1:SIntType,t2:SIntType) => true - case (ClockType, ClockType) => true - case (t1:VectorType,t2:VectorType) => - t1.size == t2.size && wt(t1.tpe) == wt(t2.tpe) - case (t1:BundleType,t2:BundleType) => - t1.fields.size == t2.fields.size && ( - (t1.fields zip t2.fields) forall {case (f1, f2) => - f1.flip == f2.flip && f1.name == f2.name && wt(f1.tpe) == wt(f2.tpe) - }) - case (t1,t2) => false - } - } - case _ => false - } - } + def apply (t:Type) = new WrappedType(t) + def wt (t:Type) = apply(t) +} +class WrappedType(val t: Type) { + def wt(tx: Type) = new WrappedType(tx) + override def equals(o:Any): Boolean = o match { + case (t2: WrappedType) => (t, t2.t) match { + case (_: UIntType, _: UIntType) => true + case (_: SIntType, _: SIntType) => true + case (ClockType, ClockType) => true + case (t1: VectorType, t2: VectorType) => + t1.size == t2.size && wt(t1.tpe) == wt(t2.tpe) + case (t1:BundleType,t2:BundleType) => + t1.fields.size == t2.fields.size && ( + (t1.fields zip t2.fields) forall {case (f1, f2) => + f1.flip == f2.flip && f1.name == f2.name + }) && ((t1.fields zip t2.fields) forall {case (f1, f2) => + wt(f1.tpe) == wt(f2.tpe) + }) + case _ => false + } + case _ => false + } } object WrappedWidth { - def eqw (w1:Width,w2:Width) : Boolean = { - (new WrappedWidth(w1)) == (new WrappedWidth(w2)) - } + def eqw(w1: Width, w2: Width): Boolean = new WrappedWidth(w1) == new WrappedWidth(w2) } -class WrappedWidth (val w:Width) { - override def toString = { - w match { - case (w:VarWidth) => w.name - case (w:MaxWidth) => "max(" + w.args.map(_.toString).reduce(_ + _) + ")" - case (w:MinWidth) => "min(" + w.args.map(_.toString).reduce(_ + _) + ")" - case (w:PlusWidth) => "(" + w.arg1 + " + " + w.arg2 + ")" - case (w:MinusWidth) => "(" + w.arg1 + " - " + w.arg2 + ")" - case (w:ExpWidth) => "exp(" + w.arg1 + ")" - case (w:IntWidth) => w.width.toString - case UnknownWidth => "?" - } - } - def ww (w:Width) : WrappedWidth = new WrappedWidth(w) - override def equals (o:Any) : Boolean = { - o match { - case (w2:WrappedWidth) => { - (w,w2.w) match { - case (w1:VarWidth,w2:VarWidth) => w1.name.equals(w2.name) - case (w1:MaxWidth,w2:MaxWidth) => { - var ret = true - if (w1.args.size != w2.args.size) ret = false - else { - for (a1 <- w1.args) { - var found = false - for (a2 <- w2.args) { if (eqw(a1,a2)) found = true } - if (found == false) ret = false - } - } - ret - } - case (w1:MinWidth,w2:MinWidth) => { - var ret = true - if (w1.args.size != w2.args.size) ret = false - else { - for (a1 <- w1.args) { - var found = false - for (a2 <- w2.args) { if (eqw(a1,a2)) found = true } - if (found == false) ret = false - } - } - ret - } - case (w1:IntWidth,w2:IntWidth) => w1.width == w2.width - case (w1:PlusWidth,w2:PlusWidth) => - (ww(w1.arg1) == ww(w2.arg1) && ww(w1.arg2) == ww(w2.arg2)) || (ww(w1.arg1) == ww(w2.arg2) && ww(w1.arg2) == ww(w2.arg1)) - case (w1:MinusWidth,w2:MinusWidth) => - (ww(w1.arg1) == ww(w2.arg1) && ww(w1.arg2) == ww(w2.arg2)) || (ww(w1.arg1) == ww(w2.arg2) && ww(w1.arg2) == ww(w2.arg1)) - case (w1:ExpWidth,w2:ExpWidth) => ww(w1.arg1) == ww(w2.arg1) - case (UnknownWidth, UnknownWidth) => true - case (w1,w2) => false - } - } - case _ => false - } - } +class WrappedWidth (val w: Width) { + def ww(w: Width): WrappedWidth = new WrappedWidth(w) + override def toString = w match { + case (w: VarWidth) => w.name + case (w: MaxWidth) => s"max(${w.args.mkString})" + case (w: MinWidth) => s"min(${w.args.mkString})" + case (w: PlusWidth) => s"(${w.arg1} + ${w.arg2})" + case (w: MinusWidth) => s"(${w.arg1} -${w.arg2})" + case (w: ExpWidth) => s"exp(${w.arg1})" + case (w: IntWidth) => w.width.toString + case UnknownWidth => "?" + } + override def equals(o: Any): Boolean = o match { + case (w2: WrappedWidth) => (w, w2.w) match { + case (w1: VarWidth, w2: VarWidth) => w1.name.equals(w2.name) + case (w1: MaxWidth, w2: MaxWidth) => w1.args.size == w2.args.size && + (w1.args forall (a1 => w2.args exists (a2 => eqw(a1, a2)))) + case (w1: MinWidth, w2: MinWidth) => w1.args.size == w2.args.size && + (w1.args forall (a1 => w2.args exists (a2 => eqw(a1, a2)))) + case (w1: IntWidth, w2: IntWidth) => w1.width == w2.width + case (w1: PlusWidth, w2: PlusWidth) => + (ww(w1.arg1) == ww(w2.arg1) && ww(w1.arg2) == ww(w2.arg2)) || + (ww(w1.arg1) == ww(w2.arg2) && ww(w1.arg2) == ww(w2.arg1)) + case (w1: MinusWidth,w2: MinusWidth) => + (ww(w1.arg1) == ww(w2.arg1) && ww(w1.arg2) == ww(w2.arg2)) || + (ww(w1.arg1) == ww(w2.arg2) && ww(w1.arg2) == ww(w2.arg1)) + case (w1: ExpWidth, w2: ExpWidth) => ww(w1.arg1) == ww(w2.arg1) + case (UnknownWidth, UnknownWidth) => true + case _ => false + } + case _ => false + } } trait Constraint -class WGeq(val loc:Width,val exp:Width) extends Constraint { - override def toString = { - val wloc = new WrappedWidth(loc) - val wexp = new WrappedWidth(exp) - wloc.toString + " >= " + wexp.toString - } +class WGeq(val loc: Width, val exp: Width) extends Constraint { + override def toString = { + val wloc = new WrappedWidth(loc) + val wexp = new WrappedWidth(exp) + wloc.toString + " >= " + wexp.toString + } } object WGeq { - def apply (loc:Width,exp:Width) = new WGeq(loc,exp) + def apply(loc: Width, exp: Width) = new WGeq(loc, exp) } abstract class MPortDir extends FirrtlNode |
