diff options
| author | azidar | 2016-02-04 09:23:19 -0800 |
|---|---|---|
| committer | azidar | 2016-02-09 18:57:06 -0800 |
| commit | b32acb9a52a426087226284f4a1e2890cbdadc00 (patch) | |
| tree | e1771c82f9e707d95b507e67455a1e7fbbffea6a /src/main/scala/firrtl/WIR.scala | |
| parent | ddeac42c426dbda9000eef1b74f8d5032c55f58f (diff) | |
Added Expand Whens pass
Diffstat (limited to 'src/main/scala/firrtl/WIR.scala')
| -rw-r--r-- | src/main/scala/firrtl/WIR.scala | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/WIR.scala b/src/main/scala/firrtl/WIR.scala index 6fc57b8e..35fcb93a 100644 --- a/src/main/scala/firrtl/WIR.scala +++ b/src/main/scala/firrtl/WIR.scala @@ -27,9 +27,42 @@ case class WSubIndex(exp:Expression,value:Int,tpe:Type,gender:Gender) extends Ex case class WSubAccess(exp:Expression,index:Expression,tpe:Type,gender:Gender) extends Expression case class WVoid() extends Expression case class WInvalid() extends Expression - case class WDefInstance(info:Info,name:String,module:String,tpe:Type) extends Stmt +class WrappedExpression (val e1:Expression) { + override def equals (we:Any) = { + we match { + case (we:WrappedExpression) => { + (e1,we.e1) match { + case (e1:UIntValue,e2:UIntValue) => if (e1.value == e2.value) true else false + // TODO is this necessary? width(e1) == width(e2) + case (e1:SIntValue,e2:SIntValue) => if (e1.value == e2.value) true else false + // TODO is this necessary? width(e1) == width(e2) + case (e1:WRef,e2:WRef) => e1.name equals e2.name + case (e1:WSubField,e2:WSubField) => (e1.name equals e2.name) && (e1.exp == e2.exp) + case (e1:WSubIndex,e2:WSubIndex) => (e1.value == e2.value) && (e1.exp == e2.exp) + case (e1:WSubAccess,e2:WSubAccess) => (e1.index == e2.index) && (e1.exp == e2.exp) + case (e1:WVoid,e2:WVoid) => true + case (e1:WInvalid,e2:WInvalid) => true + case (e1:DoPrim,e2:DoPrim) => { + var are_equal = e1.op == e2.op + (e1.args,e2.args).zipped.foreach{ (x,y) => { if (x != y) are_equal = false }} + (e1.consts,e2.consts).zipped.foreach{ (x,y) => { if (x != y) are_equal = false }} + are_equal + } + case (e1:Mux,e2:Mux) => (e1.cond == e2.cond) && (e1.tval == e2.tval) && (e1.fval == e2.fval) + case (e1:ValidIf,e2:ValidIf) => (e1.cond == e2.cond) && (e1.value == e2.value) + case (e1,e2) => false + } + } + case _ => false + } + } + override def hashCode = e1.serialize().hashCode + override def toString = e1.serialize() +} + + case class VarWidth(name:String) extends Width case class PlusWidth(arg1:Width,arg2:Width) extends Width case class MinusWidth(arg1:Width,arg2:Width) extends Width |
