Formatting code to chisel standard
- ran sbt scalafmtAll - lot of small formatting changes - added test that code must stay formatted - part of github actions workflow
This commit is contained in:
@@ -128,7 +128,7 @@ object DefaultMetric extends CostMetric with CostMetricCompanion {
|
||||
}
|
||||
val maskPenalty = (memMask, libMask) match {
|
||||
case (None, Some(m)) => 0.001
|
||||
case (_, _) => 0
|
||||
case (_, _) => 0
|
||||
}
|
||||
val depthCost = math.ceil(mem.src.depth.toDouble / lib.src.depth.toDouble)
|
||||
val widthCost = math.ceil(memWidth.toDouble / lib.src.width.toDouble)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
package barstools.macros
|
||||
|
||||
import barstools.macros.Utils._
|
||||
import firrtl.Utils.{BoolType, one, zero}
|
||||
import firrtl.Utils.{one, zero, BoolType}
|
||||
import firrtl.annotations._
|
||||
import firrtl.ir._
|
||||
import firrtl.stage.{FirrtlSourceAnnotation, FirrtlStage, Forms, OutputFileAnnotation, RunFirrtlTransformAnnotation}
|
||||
@@ -109,16 +109,16 @@ object MacroCompilerAnnotation {
|
||||
* @param forceSynflops Set of memories to force compiling as flops regardless of the mode
|
||||
*/
|
||||
case class Params(
|
||||
mem: String,
|
||||
memFormat: Option[String],
|
||||
lib: Option[String],
|
||||
hammerIR: Option[String],
|
||||
costMetric: CostMetric,
|
||||
mode: CompilerMode,
|
||||
useCompiler: Boolean,
|
||||
forceCompile: Set[String],
|
||||
forceSynflops: Set[String]
|
||||
) extends Serializable
|
||||
mem: String,
|
||||
memFormat: Option[String],
|
||||
lib: Option[String],
|
||||
hammerIR: Option[String],
|
||||
costMetric: CostMetric,
|
||||
mode: CompilerMode,
|
||||
useCompiler: Boolean,
|
||||
forceCompile: Set[String],
|
||||
forceSynflops: Set[String])
|
||||
extends Serializable
|
||||
|
||||
/** Create a MacroCompilerAnnotation.
|
||||
* @param c Top-level circuit name (see class description)
|
||||
@@ -869,8 +869,7 @@ object MacroCompiler extends App {
|
||||
case Some("conf") =>
|
||||
filterForSRAM(readConfFromPath(params.get(Macros))).get.map(x => (new Macro(x)).blackbox)
|
||||
case _ =>
|
||||
filterForSRAM(mdf.macrolib.Utils.readMDFFromPath(params.get(Macros)))
|
||||
.get
|
||||
filterForSRAM(mdf.macrolib.Utils.readMDFFromPath(params.get(Macros))).get
|
||||
.map(x => (new Macro(x)).blackbox)
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
package barstools.macros
|
||||
|
||||
import barstools.macros.Utils._
|
||||
import firrtl.Utils.{zero, one}
|
||||
import firrtl.Utils.{one, zero}
|
||||
import firrtl._
|
||||
import firrtl.ir._
|
||||
import firrtl.passes.MemPortUtils.memPortField
|
||||
|
||||
@@ -13,20 +13,20 @@ import logger.LazyLogging
|
||||
// Requires two phases, one to collect modules below synTop in the hierarchy
|
||||
// and a second to remove those modules to generate the test harness
|
||||
private class GenerateTopAndHarness(annotations: AnnotationSeq) extends LazyLogging {
|
||||
val synTop: Option[String] = annotations.collectFirst { case SynTopAnnotation(s) => s }
|
||||
val topFir: Option[String] = annotations.collectFirst { case TopFirAnnotation(s) => s }
|
||||
val harnessFir: Option[String] = annotations.collectFirst { case HarnessFirAnnotation(s) => s }
|
||||
val topAnnoOut: Option[String] = annotations.collectFirst { case TopAnnoOutAnnotation(s) => s }
|
||||
val synTop: Option[String] = annotations.collectFirst { case SynTopAnnotation(s) => s }
|
||||
val topFir: Option[String] = annotations.collectFirst { case TopFirAnnotation(s) => s }
|
||||
val harnessFir: Option[String] = annotations.collectFirst { case HarnessFirAnnotation(s) => s }
|
||||
val topAnnoOut: Option[String] = annotations.collectFirst { case TopAnnoOutAnnotation(s) => s }
|
||||
val harnessAnnoOut: Option[String] = annotations.collectFirst { case HarnessAnnoOutAnnotation(s) => s }
|
||||
val harnessTop: Option[String] = annotations.collectFirst { case HarnessTopAnnotation(h) => h }
|
||||
val harnessConf: Option[String] = annotations.collectFirst { case HarnessConfAnnotation(h) => h }
|
||||
val harnessOutput: Option[String] = annotations.collectFirst { case HarnessOutputAnnotation(h) => h }
|
||||
val topDotfOut: Option[String] = annotations.collectFirst { case TopDotfOutAnnotation(h) => h }
|
||||
val harnessTop: Option[String] = annotations.collectFirst { case HarnessTopAnnotation(h) => h }
|
||||
val harnessConf: Option[String] = annotations.collectFirst { case HarnessConfAnnotation(h) => h }
|
||||
val harnessOutput: Option[String] = annotations.collectFirst { case HarnessOutputAnnotation(h) => h }
|
||||
val topDotfOut: Option[String] = annotations.collectFirst { case TopDotfOutAnnotation(h) => h }
|
||||
val harnessDotfOut: Option[String] = annotations.collectFirst { case HarnessDotfOutAnnotation(h) => h }
|
||||
|
||||
val annoFiles: List[String] = annotations.flatMap {
|
||||
case InputAnnotationFileAnnotation(f) => Some(f)
|
||||
case _ => None
|
||||
case _ => None
|
||||
}.toList
|
||||
|
||||
lazy val rootCircuitTarget = CircuitTarget(harnessTop.get)
|
||||
@@ -36,11 +36,11 @@ private class GenerateTopAndHarness(annotations: AnnotationSeq) extends LazyLogg
|
||||
|
||||
// Dump firrtl and annotation files
|
||||
protected def dump(
|
||||
circuit: Circuit,
|
||||
annotations: AnnotationSeq,
|
||||
firFile: Option[String],
|
||||
annoFile: Option[String]
|
||||
): Unit = {
|
||||
circuit: Circuit,
|
||||
annotations: AnnotationSeq,
|
||||
firFile: Option[String],
|
||||
annoFile: Option[String]
|
||||
): Unit = {
|
||||
firFile.foreach { firPath =>
|
||||
val outputFile = new java.io.PrintWriter(firPath)
|
||||
outputFile.write(circuit.serialize)
|
||||
@@ -49,9 +49,9 @@ private class GenerateTopAndHarness(annotations: AnnotationSeq) extends LazyLogg
|
||||
annoFile.foreach { annoPath =>
|
||||
val outputFile = new java.io.PrintWriter(annoPath)
|
||||
outputFile.write(JsonProtocol.serialize(annotations.filter(_ match {
|
||||
case _: DeletedAnnotation => false
|
||||
case _: EmittedComponent => false
|
||||
case _: EmittedAnnotation[_] => false
|
||||
case _: DeletedAnnotation => false
|
||||
case _: EmittedComponent => false
|
||||
case _: EmittedAnnotation[_] => false
|
||||
case _: FirrtlCircuitAnnotation => false
|
||||
case _ => true
|
||||
})))
|
||||
@@ -104,10 +104,10 @@ private class GenerateTopAndHarness(annotations: AnnotationSeq) extends LazyLogg
|
||||
val generatorAnnotations = annotations
|
||||
.filterNot(_.isInstanceOf[OutputFileAnnotation])
|
||||
.map {
|
||||
case ReplSeqMemAnnotation(i, _) => ReplSeqMemAnnotation(i, harnessConf.get)
|
||||
case HarnessOutputAnnotation(s) => OutputFileAnnotation(s)
|
||||
case anno => anno
|
||||
} ++ harnessAnnos
|
||||
case ReplSeqMemAnnotation(i, _) => ReplSeqMemAnnotation(i, harnessConf.get)
|
||||
case HarnessOutputAnnotation(s) => OutputFileAnnotation(s)
|
||||
case anno => anno
|
||||
} ++ harnessAnnos
|
||||
|
||||
val annos = new FirrtlStage().execute(Array.empty, generatorAnnotations)
|
||||
annos.collectFirst { case FirrtlCircuitAnnotation(circuit) => circuit } match {
|
||||
@@ -119,7 +119,6 @@ private class GenerateTopAndHarness(annotations: AnnotationSeq) extends LazyLogg
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
object GenerateTop extends StageMain(new TapeoutStage(doHarness = false))
|
||||
|
||||
object GenerateTopAndHarness extends StageMain(new TapeoutStage(doHarness = true))
|
||||
|
||||
@@ -34,33 +34,42 @@ class ReParentCircuit extends Transform with DependencyAPIMigration {
|
||||
rmap
|
||||
}
|
||||
|
||||
val newAnnotations = newTopName.map({ topName =>
|
||||
// Update InstanceTargets and ReferenceTargets
|
||||
// Yes, these are identical functions, but the copy methods force separate implementations
|
||||
def updateInstance(t: InstanceTarget): Option[InstanceTarget] = {
|
||||
val idx = t.path.lastIndexWhere(_._2.value == topName)
|
||||
if (idx == -1) Some(t.copy(circuit=topName)) else Some(t.copy(circuit=topName, module=topName, path=t.path.drop(idx+1)))
|
||||
}
|
||||
def updateReference(t: ReferenceTarget): Option[ReferenceTarget] = {
|
||||
val idx = t.path.lastIndexWhere(_._2.value == topName)
|
||||
if (idx == -1) Some(t.copy(circuit=topName)) else Some(t.copy(circuit=topName, module=topName, path=t.path.drop(idx+1)))
|
||||
}
|
||||
val newAnnotations = newTopName
|
||||
.map({ topName =>
|
||||
// Update InstanceTargets and ReferenceTargets
|
||||
// Yes, these are identical functions, but the copy methods force separate implementations
|
||||
def updateInstance(t: InstanceTarget): Option[InstanceTarget] = {
|
||||
val idx = t.path.lastIndexWhere(_._2.value == topName)
|
||||
if (idx == -1) Some(t.copy(circuit = topName))
|
||||
else Some(t.copy(circuit = topName, module = topName, path = t.path.drop(idx + 1)))
|
||||
}
|
||||
def updateReference(t: ReferenceTarget): Option[ReferenceTarget] = {
|
||||
val idx = t.path.lastIndexWhere(_._2.value == topName)
|
||||
if (idx == -1) Some(t.copy(circuit = topName))
|
||||
else Some(t.copy(circuit = topName, module = topName, path = t.path.drop(idx + 1)))
|
||||
}
|
||||
|
||||
AnnotationSeq(state.annotations.toSeq.map({
|
||||
case x: SingleTargetAnnotation[InstanceTarget] if x.target.isInstanceOf[InstanceTarget] =>
|
||||
updateInstance(x.target).map(y => x.duplicate(y))
|
||||
case x: SingleTargetAnnotation[ReferenceTarget] if x.target.isInstanceOf[ReferenceTarget] =>
|
||||
updateReference(x.target).map(y => x.duplicate(y))
|
||||
case x: MultiTargetAnnotation =>
|
||||
val newTargets: Seq[Seq[Option[Target]]] = x.targets.map(_.map({
|
||||
case y: InstanceTarget => updateInstance(y)
|
||||
case y: ReferenceTarget => updateReference(y)
|
||||
case y => Some(y)
|
||||
}))
|
||||
if (newTargets.flatten.forall(_.isDefined)) Some(x.duplicate(newTargets.map(_.map(_.get)))) else None
|
||||
case x => Some(x)
|
||||
}).filter(_.isDefined).map(_.get))
|
||||
}).getOrElse(state.annotations)
|
||||
AnnotationSeq(
|
||||
state.annotations.toSeq
|
||||
.map({
|
||||
case x: SingleTargetAnnotation[InstanceTarget] if x.target.isInstanceOf[InstanceTarget] =>
|
||||
updateInstance(x.target).map(y => x.duplicate(y))
|
||||
case x: SingleTargetAnnotation[ReferenceTarget] if x.target.isInstanceOf[ReferenceTarget] =>
|
||||
updateReference(x.target).map(y => x.duplicate(y))
|
||||
case x: MultiTargetAnnotation =>
|
||||
val newTargets: Seq[Seq[Option[Target]]] = x.targets.map(_.map({
|
||||
case y: InstanceTarget => updateInstance(y)
|
||||
case y: ReferenceTarget => updateReference(y)
|
||||
case y => Some(y)
|
||||
}))
|
||||
if (newTargets.flatten.forall(_.isDefined)) Some(x.duplicate(newTargets.map(_.map(_.get)))) else None
|
||||
case x => Some(x)
|
||||
})
|
||||
.filter(_.isDefined)
|
||||
.map(_.get)
|
||||
)
|
||||
})
|
||||
.getOrElse(state.annotations)
|
||||
|
||||
state.copy(circuit = newCircuit, renames = mainRename, annotations = newAnnotations)
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ class RemoveUnusedModules extends Transform with DependencyAPIMigration {
|
||||
|
||||
def execute(state: CircuitState): CircuitState = {
|
||||
val modulesByName = state.circuit.modules.map {
|
||||
case m: Module => (m.name, Some(m))
|
||||
case m: Module => (m.name, Some(m))
|
||||
case m: ExtModule => (m.name, None)
|
||||
}.toMap
|
||||
|
||||
|
||||
@@ -178,4 +178,3 @@ class TapeoutStage(doHarness: Boolean) extends Stage {
|
||||
annotations
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package barstools.tapeout.transforms.utils
|
||||
|
||||
import chisel3.experimental.{ChiselAnnotation, annotate}
|
||||
import chisel3.experimental.{annotate, ChiselAnnotation}
|
||||
import firrtl._
|
||||
import firrtl.annotations._
|
||||
import firrtl.stage.Forms
|
||||
|
||||
@@ -45,7 +45,7 @@ object Utils {
|
||||
} catch {
|
||||
case f: FileNotFoundException =>
|
||||
println(s"FILE NOT FOUND $p in dir ${os.pwd}")
|
||||
throw f
|
||||
throw f
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user