diff options
| author | Jack Koenig | 2017-06-12 13:58:26 -0700 |
|---|---|---|
| committer | Jack Koenig | 2017-06-12 18:52:46 -0700 |
| commit | 541003c59c73ecce6d38020ecc3cf537dd214fd9 (patch) | |
| tree | 22e8518a40673c408ec06c907c3f61c6449cdfab /src/main/scala/firrtl/transforms | |
| parent | 317115b7a0ce21d5848e985988c777f9931af241 (diff) | |
Add option to disable combinational loop detection
Resolves #600
Diffstat (limited to 'src/main/scala/firrtl/transforms')
| -rw-r--r-- | src/main/scala/firrtl/transforms/CheckCombLoops.scala | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/transforms/CheckCombLoops.scala b/src/main/scala/firrtl/transforms/CheckCombLoops.scala index d0eec02c..d2d8b449 100644 --- a/src/main/scala/firrtl/transforms/CheckCombLoops.scala +++ b/src/main/scala/firrtl/transforms/CheckCombLoops.scala @@ -11,6 +11,7 @@ import firrtl._ import firrtl.ir._ import firrtl.passes.{Errors, PassException} import firrtl.Mappers._ +import firrtl.annotations._ import firrtl.Utils.throwInternalError import firrtl.graph.{MutableDiGraph,DiGraph} import firrtl.analyses.InstanceGraph @@ -21,6 +22,16 @@ object CheckCombLoops { } +object DontCheckCombLoopsAnnotation { + private val marker = "DontCheckCombLoops!" + private val transform = classOf[CheckCombLoops] + def apply(): Annotation = Annotation(CircuitTopName, transform, marker) + def unapply(a: Annotation): Boolean = a match { + case Annotation(_, targetXform, value) if targetXform == transform && value == marker => true + case _ => false + } +} + /** Finds and detects combinational logic loops in a circuit, if any * exist. Returns the input circuit with no modifications. * @@ -179,7 +190,7 @@ class CheckCombLoops extends Transform { * and only if it combinationally depends on input Y. Associate this * reduced graph with the module for future use. */ - def run(c: Circuit): Circuit = { + private def run(c: Circuit): Circuit = { val errors = new Errors() /* TODO(magyar): deal with exmodules! No pass warnings currently * exist. Maybe warn when iterating through modules. @@ -210,8 +221,15 @@ class CheckCombLoops extends Transform { } def execute(state: CircuitState): CircuitState = { - val result = run(state.circuit) - CircuitState(result, outputForm, state.annotations, state.renames) + val dontRun = getMyAnnotations(state).collectFirst { + case DontCheckCombLoopsAnnotation() => true + }.getOrElse(false) + if (dontRun) { + logger.warn("Skipping Combinational Loop Detection") + state + } else { + val result = run(state.circuit) + CircuitState(result, outputForm, state.annotations, state.renames) + } } - } |
