aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Magyar2020-04-14 15:14:14 -0700
committerAlbert Magyar2020-07-27 08:50:09 -0700
commitb373b5a6f1b1c45ed474e3b037afb3ec8ec03d9a (patch)
tree939dc18c2ece8384a3e4e890e5c562cdb20adf09 /src
parent3c1a8e88844f2df41a60f5a8902b61ccf67b1382 (diff)
Add adapter to make current CHIRRTL mport scoping legal
* See #1505 * Inferred mports are implicitly added to scope of their parent mem * This allows current chisel3 emission to work with new scope checks * This may change in a future refactor of CHIRRTL memory ports
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/passes/CheckHighForm.scala9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/passes/CheckHighForm.scala b/src/main/scala/firrtl/passes/CheckHighForm.scala
index 5aba26ae..512602cf 100644
--- a/src/main/scala/firrtl/passes/CheckHighForm.scala
+++ b/src/main/scala/firrtl/passes/CheckHighForm.scala
@@ -22,6 +22,10 @@ trait CheckHighFormLike { this: Pass =>
moduleNS += name
scopes.head += name
}
+ def expandMPortVisibility(port: CDefMPort): Unit = {
+ // Legacy CHIRRTL ports are visible in any scope where their parent memory is visible
+ scopes.find(_.contains(port.mem)).getOrElse(scopes.head) += port.name
+ }
def legalDecl(name: String): Boolean = !moduleNS.contains(name)
def legalRef(name: String): Boolean = scopes.exists(_.contains(name))
def childScope(): ScopeView = new ScopeView(moduleNS, new NameSet +: scopes)
@@ -243,7 +247,10 @@ trait CheckHighFormLike { this: Pass =>
case sx: Connect => checkValidLoc(info, mname, sx.loc)
case sx: PartialConnect => checkValidLoc(info, mname, sx.loc)
case sx: Print => checkFstring(info, mname, sx.string, sx.args.length)
- case _: CDefMemory | _: CDefMPort => errorOnChirrtl(info, mname, s).foreach { e => errors.append(e) }
+ case _: CDefMemory => errorOnChirrtl(info, mname, s).foreach { e => errors.append(e) }
+ case mport: CDefMPort =>
+ errorOnChirrtl(info, mname, s).foreach { e => errors.append(e) }
+ names.expandMPortVisibility(mport)
case sx => // Do Nothing
}
s foreach checkHighFormT(info, mname)