diff options
| author | Adam Izraelevitz | 2018-02-22 17:25:55 -0800 |
|---|---|---|
| committer | GitHub | 2018-02-22 17:25:55 -0800 |
| commit | 46b78943a726e4c9bf85ffb25a2ccf926b10dda7 (patch) | |
| tree | 39f9363400fdd39e2e55f3dc8c5221461941edec /src/main/scala/firrtl/passes | |
| parent | 65bbf155003a86cd836f7ff4a2def6af91794780 (diff) | |
Add tests for #702. Adds Utility functions. Allows clock muxing in FIRRTL, but not Emitter. (#717)
Diffstat (limited to 'src/main/scala/firrtl/passes')
| -rw-r--r-- | src/main/scala/firrtl/passes/Checks.scala | 8 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/RemoveCHIRRTL.scala | 2 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/memlib/ResolveMaskGranularity.scala | 6 |
3 files changed, 7 insertions, 9 deletions
diff --git a/src/main/scala/firrtl/passes/Checks.scala b/src/main/scala/firrtl/passes/Checks.scala index 6934fca2..5b198064 100644 --- a/src/main/scala/firrtl/passes/Checks.scala +++ b/src/main/scala/firrtl/passes/Checks.scala @@ -259,8 +259,8 @@ object CheckTypes extends Pass { s"$info: [module $mname] Attach requires all arguments to be Analog type: $exp.") class NodePassiveType(info: Info, mname: String) extends PassException( s"$info: [module $mname] Node must be a passive type.") - class MuxSameType(info: Info, mname: String) extends PassException( - s"$info: [module $mname] Must mux between equivalent types.") + class MuxSameType(info: Info, mname: String, t1: String, t2: String) extends PassException( + s"$info: [module $mname] Must mux between equivalent types: $t1 != $t2.") class MuxPassiveTypes(info: Info, mname: String) extends PassException( s"$info: [module $mname] Must mux between passive types.") class MuxCondUInt(info: Info, mname: String) extends PassException( @@ -361,15 +361,13 @@ object CheckTypes extends Pass { case (e: DoPrim) => check_types_primop(info, mname, e) case (e: Mux) => if (wt(e.tval.tpe) != wt(e.fval.tpe)) - errors.append(new MuxSameType(info, mname)) + errors.append(new MuxSameType(info, mname, e.tval.tpe.serialize, e.fval.tpe.serialize)) if (!passive(e.tpe)) errors.append(new MuxPassiveTypes(info, mname)) e.cond.tpe match { case _: UIntType => case _ => errors.append(new MuxCondUInt(info, mname)) } - if ((e.tval.tpe == ClockType) || (e.fval.tpe == ClockType)) - errors.append(new MuxClock(info, mname)) case (e: ValidIf) => if (!passive(e.tpe)) errors.append(new ValidIfPassiveTypes(info, mname)) diff --git a/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala b/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala index c841dc32..6b3508a6 100644 --- a/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala +++ b/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala @@ -4,11 +4,11 @@ package firrtl.passes // Datastructures import scala.collection.mutable.ArrayBuffer - import firrtl._ import firrtl.ir._ import firrtl.Utils._ import firrtl.Mappers._ +import firrtl.PrimOps.AsClock case class MPort(name: String, clk: Expression) case class MPorts(readers: ArrayBuffer[MPort], writers: ArrayBuffer[MPort], readwriters: ArrayBuffer[MPort]) diff --git a/src/main/scala/firrtl/passes/memlib/ResolveMaskGranularity.scala b/src/main/scala/firrtl/passes/memlib/ResolveMaskGranularity.scala index 79ecd9cd..0424b1dd 100644 --- a/src/main/scala/firrtl/passes/memlib/ResolveMaskGranularity.scala +++ b/src/main/scala/firrtl/passes/memlib/ResolveMaskGranularity.scala @@ -77,7 +77,7 @@ object AnalysisUtils { /** Checks whether the two memories are equivalent in all respects except name */ - def eqMems(a: DefAnnotatedMemory, b: DefAnnotatedMemory, noDeDupeMems: Seq[String]) = + def eqMems(a: DefAnnotatedMemory, b: DefAnnotatedMemory, noDeDupeMems: Seq[String]): Boolean = a == b.copy(info = a.info, name = a.name, memRef = a.memRef) && !(noDeDupeMems.contains(a.name) || noDeDupeMems.contains(b.name)) } @@ -120,6 +120,6 @@ object ResolveMaskGranularity extends Pass { case sx => sx map updateStmts(connects) } - def annotateModMems(m: DefModule) = m map updateStmts(getConnects(m)) - def run(c: Circuit) = c copy (modules = c.modules map annotateModMems) + def annotateModMems(m: DefModule): DefModule = m map updateStmts(getConnects(m)) + def run(c: Circuit): Circuit = c copy (modules = c.modules map annotateModMems) } |
