aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJack Koenig2019-11-06 16:37:59 -0800
committermergify[bot]2019-11-07 00:37:59 +0000
commitc450cf974484d4896910c44166481d0849219751 (patch)
treeeb5c2265f9cd07be496f139d8e567aea3ece7961 /src/main
parent954777159d03bd196f6014cd885497c1502ff230 (diff)
Add check for multiple sources for same wiring pin (#1191)
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/wiring/WiringTransform.scala8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/passes/wiring/WiringTransform.scala b/src/main/scala/firrtl/passes/wiring/WiringTransform.scala
index c42d1f8b..31030375 100644
--- a/src/main/scala/firrtl/passes/wiring/WiringTransform.scala
+++ b/src/main/scala/firrtl/passes/wiring/WiringTransform.scala
@@ -54,11 +54,17 @@ class WiringTransform extends Transform {
case p =>
val sinks = mutable.HashMap[String, Seq[Named]]()
val sources = mutable.HashMap[String, ComponentName]()
- p.foreach {
+ val errors = p.flatMap {
case SinkAnnotation(m, pin) =>
sinks(pin) = sinks.getOrElse(pin, Seq.empty) :+ m
+ None
case SourceAnnotation(c, pin) =>
+ val res = if (sources.contains(pin)) Some(pin) else None
sources(pin) = c
+ res
+ }
+ if (errors.nonEmpty) {
+ throw WiringException(s"Multiple sources specified for wiring pin(s): " + errors.distinct.mkString(", "))
}
(sources.size, sinks.size) match {
case (0, p) => state