diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/firrtl/passes/memlib/ReplaceMemMacros.scala | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/main/scala/firrtl/passes/memlib/ReplaceMemMacros.scala b/src/main/scala/firrtl/passes/memlib/ReplaceMemMacros.scala index 03fd5ffa..af6761fd 100644 --- a/src/main/scala/firrtl/passes/memlib/ReplaceMemMacros.scala +++ b/src/main/scala/firrtl/passes/memlib/ReplaceMemMacros.scala @@ -18,9 +18,14 @@ import wiring._ */ object PinAnnotation { def apply(target: CircuitName, pins: Seq[String]): Annotation = { - Annotation(target, classOf[ReplaceMemMacros], pins.foldLeft("") { (str, p) => str + "pin:" + p + " " } ) + Annotation(target, classOf[ReplaceMemMacros], s"pins:${pins.mkString(" ")}") + } + private val matcher = "pins:(.*)".r + def unapply(a: Annotation): Option[(CircuitName, Seq[String])] = a match { + case Annotation(CircuitName(c), _, matcher(rest)) => + Some((CircuitName(c), rest.split(" "))) + case _ => None } - val matcher = "pin:([^ ]+)".r } /** Replace DefAnnotatedMemory with memory blackbox + wrapper + conf file. @@ -219,11 +224,7 @@ class ReplaceMemMacros(writer: ConfWriter) extends Transform { writer.serialize() val pins = getMyAnnotations(state) match { case Nil => Nil - case Seq(Annotation(c, t, string)) => - PinAnnotation.matcher.findAllIn(string).toSeq match { - case Nil => error(s"Bad Annotation: ${Annotation(c, t, string)}") - case seq => seq - } + case Seq(PinAnnotation(CircuitName(c), pins)) => pins case _ => throwInternalError } val annos = pins.foldLeft(Seq[Annotation]()) { (seq, pin) => |
