- Make transfrorms run in as close to same order as before

- Fix parsing of PadPlacement JSON
This commit is contained in:
chick
2020-09-29 10:11:46 -07:00
parent f51156bf1f
commit 1a82c082b3
8 changed files with 66 additions and 17 deletions

View File

@@ -15,6 +15,7 @@ import scala.collection.mutable
class AddIOPadsTransform extends Transform with SeqTransformBased with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
val transformList = new mutable.ArrayBuffer[Transform]

View File

@@ -1,20 +1,46 @@
// See LICENSE for license details.
package barstools.tapeout.transforms.pads
import barstools.tapeout.transforms._
import net.jcazevedo.moultingyaml._
import firrtl._
import firrtl.ir._
import barstools.tapeout.transforms._
/** This is a hack to get around weird problem with yaml parser
* that without this gives PadPlacement defines additional fields
*
*/
trait HasPadPlacementFields {
def file: String
def left: String
def top: String
def right: String
def bottom: String
def instanceArray: String
def padLine: String
def template: String
}
case class PadPlacementFields(
file: String,
left: String,
top: String,
right: String,
bottom: String,
instanceArray: String,
padLine: String,
template: String
) extends HasPadPlacementFields
case class PadPlacement(
file: String,
left: String,
top: String,
right: String,
bottom: String,
instanceArray: String,
padLine: String,
template: String) {
file: String,
left: String,
top: String,
right: String,
bottom: String,
instanceArray: String,
padLine: String,
template: String
) extends HasPadPlacementFields {
require(instanceArray contains "{{signal}}", "Instance Array Template should contain {{signal}}")
require(instanceArray contains "{{idx}}", "Instance Array Template should contain {{idx}}")
@@ -33,8 +59,8 @@ case class PadPlacement(
case Bottom => bottom
}
import com.gilt.handlebars.scala.binding.dynamic._
import com.gilt.handlebars.scala.Handlebars
import com.gilt.handlebars.scala.binding.dynamic._
private val instanceArrayTemplate = Handlebars(instanceArray.stripMargin)
private val padLineTemplate = Handlebars(padLine.stripMargin)
@@ -52,10 +78,26 @@ case class PadPlacementParams(leftPads: String, rightPads: String, topPads: Stri
object PadPlacementFile extends DefaultYamlProtocol {
val exampleResource = "/PadPlacement.yaml"
implicit val _pad = yamlFormat8(PadPlacement)
def parse(file: String = ""): PadPlacement = {
(new YamlFileReader(exampleResource)).parse[PadPlacement](file).head
implicit val _pad = yamlFormat8(PadPlacementFields)
def main(args: Array[String]): Unit = {
println(parse("RealTech/PadPlacement.yaml"))
}
def parse(file: String = ""): PadPlacement = {
val fields = (new YamlFileReader(exampleResource)).parse[PadPlacementFields](file).head
PadPlacement(
file = fields.file,
left = fields.left,
top = fields.top,
right = fields.right,
bottom = fields.bottom,
instanceArray = fields.instanceArray,
padLine = fields.padLine,
template = fields.template
)
}
def generate(
techDir: String,
targetDir: String,

View File

@@ -26,6 +26,7 @@ case class ModuleNameSuffixAnnotation(target: CircuitTarget, suffix: String)
class AddSuffixToModuleNames extends Transform with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
def processAnnos(annos: AnnotationSeq): (AnnotationSeq, (String) => String) = {

View File

@@ -26,6 +26,7 @@ class EnumerateModules(enumerate: (Module) => Unit)
extends Transform with SeqTransformBased with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
def transforms: Seq[Transform] = Seq(new EnumerateModulesPass(enumerate))

View File

@@ -44,6 +44,7 @@ object ResetN extends Pass {
class ResetInverterTransform extends Transform with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
override def execute(state: CircuitState): CircuitState = {

View File

@@ -15,6 +15,7 @@ case class RetimeAnnotation(target: Named) extends SingleTargetAnnotation[Named]
class RetimeTransform extends Transform with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
override def execute(state: CircuitState): CircuitState = {

View File

@@ -54,6 +54,7 @@ case class TechnologyLocationAnnotation(dir: String) extends SingleTargetAnnotat
class TechnologyLocation extends Transform with DependencyAPIMigration {
override def prerequisites: Seq[TransformDependency] = Forms.LowForm
override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized
override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters
def execute(state: CircuitState): CircuitState = {

View File

@@ -257,9 +257,10 @@ class IOPadSpec extends FlatSpec with Matchers {
*/
it should "create proper IO pads + black box in verilog" in {
val dir = "test_run_dir/PadsVerilog"
(new ChiselStage).emitFirrtl(
(new ChiselStage).emitVerilog(
new ExampleTopModuleWithBB,
Array("-td", dir, "-X", "verilog")
// Array("-td", dir, "-X", "verilog")
Array("-td", dir)
)
checkOutputs(dir)
}