diff options
| author | Angie | 2016-08-23 17:32:15 -0700 |
|---|---|---|
| committer | jackkoenig | 2016-09-06 00:17:18 -0700 |
| commit | b0252c1f56b92d4bde83cf73059a1c2566a8ba55 (patch) | |
| tree | 5794f87574b4d06ad95e741b90fee86ef8e2eed3 /src/main/scala/firrtl/passes/ReplSeqMem.scala | |
| parent | 6bf15386079d862d042968f5d2ac30c9d092134c (diff) | |
Edited conf generation to handle mem namespace collision
* Also started separate pass for annotating valid memory
Diffstat (limited to 'src/main/scala/firrtl/passes/ReplSeqMem.scala')
| -rw-r--r-- | src/main/scala/firrtl/passes/ReplSeqMem.scala | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/passes/ReplSeqMem.scala b/src/main/scala/firrtl/passes/ReplSeqMem.scala index 72b69f3b..29274e54 100644 --- a/src/main/scala/firrtl/passes/ReplSeqMem.scala +++ b/src/main/scala/firrtl/passes/ReplSeqMem.scala @@ -12,6 +12,10 @@ case object InputConfigFileName extends PassOption case object OutputConfigFileName extends PassOption case object PassCircuitName extends PassOption +object Error { + def apply[T <: Any](msg: String) = throw new Exception(msg) +} + object PassConfigUtil { def getPassOptions(t: String, usage: String = "") = { @@ -31,7 +35,7 @@ object PassConfigUtil { case "-c" :: value :: tail => nextPassOption(map + (PassCircuitName -> value), tail) case option :: tail => - throw new Exception("Unknown option " + option + usage) + Error("Unknown option " + option + usage) } } nextPassOption(Map[PassOption, String](), passArgList) @@ -50,7 +54,7 @@ class ConfWriter(filename: String) { val ports = (writers ++ readers ++ readwriters).mkString(",") val maskGranConf = if (maskGran == None) "" else s"mask_gran ${maskGran.get}" val width = bitWidth(m.dataType) - val conf = s"name ${m.name}_ext depth ${m.depth} width ${width} ports ${ports} ${maskGranConf} \n" + val conf = s"name ${m.name} depth ${m.depth} width ${width} ports ${ports} ${maskGranConf} \n" outputBuffer.append(conf) } def serialize = { @@ -68,7 +72,7 @@ case class ReplSeqMemAnnotation(t: String, tID: TransID) Pass to replace sequential memories with blackboxes + configuration file Usage: - --replSeqMem -c:<circuit>:-i<filename>:-o<filename> + --replSeqMem -c:<circuit>:-i:<filename>:-o:<filename> *** Note: sub-arguments to --replSeqMem should be delimited by : and not white space! Required Arguments: @@ -82,11 +86,11 @@ Optional Arguments: val passOptions = PassConfigUtil.getPassOptions(t,usage) val outputConfig = passOptions.getOrElse( OutputConfigFileName, - throw new Exception("No output config file provided for ReplSeqMem!" + usage) + Error("No output config file provided for ReplSeqMem!" + usage) ) val passCircuit = passOptions.getOrElse( PassCircuitName, - throw new Exception("No circuit name specified for ReplSeqMem!" + usage) + Error("No circuit name specified for ReplSeqMem!" + usage) ) val target = CircuitName(passCircuit) def duplicate(n: Named) = this.copy(t=t.replace("-c:"+passCircuit,"-c:"+n.name)) @@ -98,6 +102,14 @@ class ReplSeqMem(transID: TransID) extends Transform with LazyLogging { map get transID match { case Some(p) => p get CircuitName(circuit.main) match { case Some(ReplSeqMemAnnotation(t, _)) => { + + val inputFileName = PassConfigUtil.getPassOptions(t).getOrElse(InputConfigFileName,"") + val inConfigFile = { + if (inputFileName.isEmpty) None + else if (new java.io.File(inputFileName).exists) Some(new YamlFileReader(inputFileName)) + else Error("Input configuration file does not exist!") + } + val outConfigFile = new ConfWriter(PassConfigUtil.getPassOptions(t).get(OutputConfigFileName).get) TransformResult( ( @@ -105,6 +117,7 @@ class ReplSeqMem(transID: TransID) extends Transform with LazyLogging { Legalize, AnnotateMemMacros, UpdateDuplicateMemMacros, + new AnnotateValidMemConfigs(inConfigFile), new ReplaceMemMacros(outConfigFile), RemoveEmpty, CheckInitialization, |
