Fft changes (#17)
* modified CustomBundle to also apply on Int * programmatic bundle should take T <: Data instead of Data * turns out indexedElements doesn't synthesize * had to change a bunch of files to get clk/pads compiling again with recent firrtl mods * modified CustomBundle to also apply on Int * programmatic bundle should take T <: Data instead of Data * turns out indexedElements doesn't synthesize * had to change a bunch of files to get clk/pads compiling again with recent firrtl mods * clk phases should be less than divby amount * make clkconstraint error more descriptive * don't make custom*bundle final * nevermind. bundles need to be final. * turns out making the bundle non-final was ok... * removed infertypes from clksrctransform. seems like it doesn't work @ low firrtl?
This commit is contained in:
@@ -72,6 +72,9 @@ class SEClkDivider(divBy: Int, phases: Seq[Int], analogFile: String = "", syncRe
|
||||
extends Module with IsClkModule {
|
||||
|
||||
require(phases.distinct.length == phases.length, "Phases should be distinct!")
|
||||
phases foreach { p =>
|
||||
require(p < divBy, "Phases must be < divBy")
|
||||
}
|
||||
|
||||
val io = IO(new SEClkDividerIO(phases))
|
||||
|
||||
|
||||
@@ -18,7 +18,8 @@ class ClkSrcTransform extends Transform with SimpleRun {
|
||||
case Some((clkModAnnos, clkPortAnnos)) =>
|
||||
val targetDir = barstools.tapeout.transforms.GetTargetDir(state)
|
||||
val passSeq = Seq(
|
||||
InferTypes,
|
||||
// TODO: Enable when it's legal?
|
||||
// InferTypes,
|
||||
new CreateClkConstraints(clkModAnnos, clkPortAnnos, targetDir)
|
||||
)
|
||||
state.copy(circuit = runPasses(state.circuit, passSeq))
|
||||
|
||||
@@ -117,7 +117,7 @@ class CreateClkConstraints(
|
||||
// sources of sinks are generated clks or top level clk inputs
|
||||
if (clkSrcsFlip.contains(sourceAbsPath)) clkSrcsFlip(sourceAbsPath)
|
||||
else if (topClksFlip.contains(sourceAbsPath)) topClksFlip(sourceAbsPath)
|
||||
else throw new Exception(s"Absolute path of clk source for $sinkId not found!")
|
||||
else throw new Exception(s"Absolute path $sourceAbsPath of clk source for $sinkId not found!")
|
||||
}
|
||||
sinkId -> sourceId
|
||||
}
|
||||
@@ -131,7 +131,8 @@ class CreateClkConstraints(
|
||||
clkPortAnnos.find(x =>
|
||||
// TODO: Not sufficiently general for output clks? Might have forgotten to label a clk module...
|
||||
LowerName(x.target.name) == n && x.target.module.name == mod.name).getOrElse(
|
||||
throw new Exception("All top module input clks/clk module output clocks must be sinks/sources!"))
|
||||
throw new Exception(
|
||||
s"All top module input clks/clk module output clocks must be sinks/sources! $n not annotated!"))
|
||||
case _ =>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,18 +3,18 @@ package barstools.tapeout.transforms
|
||||
import chisel3._
|
||||
import scala.collection.immutable.ListMap
|
||||
|
||||
final class CustomBundle[T <: Data](elts: (String, T)*) extends Record {
|
||||
class CustomBundle[T <: Data](elts: (String, T)*) extends Record {
|
||||
val elements = ListMap(elts map { case (field, elt) => field -> elt.chiselCloneType }: _*)
|
||||
def apply(elt: String): T = elements(elt)
|
||||
def apply(elt: Int): T = elements(elt.toString)
|
||||
override def cloneType = (new CustomBundle(elements.toList: _*)).asInstanceOf[this.type]
|
||||
}
|
||||
|
||||
final class CustomIndexedBundle[T <: Data](elts: (Int, T)*) extends Record {
|
||||
class CustomIndexedBundle[T <: Data](elts: (Int, T)*) extends Record {
|
||||
// Must be String, Data
|
||||
val elements = ListMap(elts map { case (field, elt) => field.toString -> elt.chiselCloneType }: _*)
|
||||
// TODO: Make an equivalent to the below work publicly
|
||||
private def indexedElements = ListMap(elts map { case (field, elt) => field -> elt.chiselCloneType }: _*)
|
||||
// TODO: Make an equivalent to the below work publicly (or only on subclasses?)
|
||||
def indexedElements = ListMap(elts map { case (field, elt) => field -> elt.chiselCloneType }: _*)
|
||||
def apply(elt: Int): T = elements(elt.toString)
|
||||
override def cloneType = (new CustomIndexedBundle(indexedElements.toList: _*)).asInstanceOf[this.type]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user