aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/passes')
-rw-r--r--src/main/scala/firrtl/passes/memlib/MemConf.scala19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/passes/memlib/MemConf.scala b/src/main/scala/firrtl/passes/memlib/MemConf.scala
index 637b57e0..8063c627 100644
--- a/src/main/scala/firrtl/passes/memlib/MemConf.scala
+++ b/src/main/scala/firrtl/passes/memlib/MemConf.scala
@@ -13,7 +13,21 @@ case object MaskedReadWritePort extends MemPort("mrw")
object MemPort {
- val all = Set(ReadPort, WritePort, MaskedWritePort, ReadWritePort, MaskedReadWritePort)
+ // This is the order that ports will render in MemConf.portsStr
+ val ordered: Seq[MemPort] = Seq(
+ MaskedReadWritePort,
+ MaskedWritePort,
+ ReadWritePort,
+ WritePort,
+ ReadPort
+ )
+
+ val all: Set[MemPort] = ordered.toSet
+ // uses orderedPorts when sorting MemPorts
+ implicit def ordering: Ordering[MemPort] = {
+ val orderedPorts = ordered.zipWithIndex.toMap
+ Ordering.by(e => orderedPorts(e))
+ }
def apply(s: String): Option[MemPort] = MemPort.all.find(_.name == s)
@@ -38,7 +52,8 @@ case class MemConf(
ports: Map[MemPort, Int],
maskGranularity: Option[Int]) {
- private def portsStr = ports.map { case (port, num) => Seq.fill(num)(port.name).mkString(",") }.mkString(",")
+ private def portsStr =
+ ports.toSeq.sortBy(_._1).map { case (port, num) => Seq.fill(num)(port.name).mkString(",") }.mkString(",")
private def maskGranStr = maskGranularity.map((p) => s"mask_gran $p").getOrElse("")
// Assert that all of the entries in the port map are greater than zero to make it easier to compare two of these case classes