Refactor tapeout for Chisel 3.4, Firrtl 1.4
- Remove clk package based on discussion with Colin - Annotations need to be refactored to using latest API - Generally that involves making annos generated by a anonymous ChiselAnnotation - The chisel annotations will use RunFirrtlTransform to queue up its associated transform - Chisel annotation provieds toFirrtl to generate Firrtl form of annotation - Usages of unapply on firrtl annotations cannot use generic unapply(target, transform, data) which has been eliminated - Have transforms use with DependencyAPIMigration to avoid deprecated `form`s - Added some 'see License comments - TechnologyLocation section of AddIOPadsSpec does not currently run because there is no content for it. - Added some tests for annotation serialization here
This commit is contained in:
@@ -2,13 +2,12 @@
|
||||
|
||||
package barstools.tapeout.transforms.retime.test
|
||||
|
||||
import chisel3._
|
||||
import firrtl._
|
||||
import org.scalatest.{FlatSpec, Matchers}
|
||||
import chisel3.experimental._
|
||||
import chisel3.util.HasBlackBoxInline
|
||||
import chisel3.iotesters._
|
||||
import barstools.tapeout.transforms.retime._
|
||||
import chisel3._
|
||||
import chisel3.stage.ChiselStage
|
||||
import firrtl._
|
||||
import logger.Logger
|
||||
import org.scalatest.{FlatSpec, Matchers}
|
||||
|
||||
class RetimeSpec extends FlatSpec with Matchers {
|
||||
def normalized(s: String): String = {
|
||||
@@ -25,20 +24,47 @@ class RetimeSpec extends FlatSpec with Matchers {
|
||||
it should "pass simple retime module annotation" in {
|
||||
val gen = () => new RetimeModule()
|
||||
val dir = uniqueDirName(gen, "RetimeModule")
|
||||
chisel3.Driver.execute(Array("-td", s"test_run_dir/$dir", "-foaf", s"test_run_dir/$dir/final"), gen) shouldBe a [ChiselExecutionSuccess]
|
||||
|
||||
val lines = io.Source.fromFile(s"test_run_dir/$dir/test_run_dir/$dir/final.anno.json").getLines().map(normalized).mkString("\n")
|
||||
lines should include("barstools.tapeout.transforms.retime.RetimeTransform")
|
||||
Logger.makeScope(Seq.empty) {
|
||||
val captor = new Logger.OutputCaptor
|
||||
Logger.setOutput(captor.printStream)
|
||||
val firrtl = (new ChiselStage).emitFirrtl(
|
||||
new RetimeModule(),
|
||||
Array("-td", s"test_run_dir/$dir", "-foaf", s"test_run_dir/$dir/final", "--log-level", "info")
|
||||
)
|
||||
firrtl.nonEmpty should be(true)
|
||||
//Make sure we got the RetimeTransform scheduled
|
||||
captor.getOutputAsString should include ("barstools.tapeout.transforms.retime.RetimeTransform")
|
||||
}
|
||||
|
||||
val lines = FileUtils.getLines(s"test_run_dir/$dir/test_run_dir/$dir/final.anno.json")
|
||||
.map(normalized)
|
||||
.mkString("\n")
|
||||
lines should include("barstools.tapeout.transforms.retime.RetimeAnnotation")
|
||||
lines should include(""""target":"RetimeModule.RetimeModule"""")
|
||||
}
|
||||
|
||||
// TODO(azidar): need to fix/add instance annotations
|
||||
ignore should "pass simple retime instance annotation" in {
|
||||
it should "pass simple retime instance annotation" in {
|
||||
val gen = () => new RetimeInstance()
|
||||
val dir = uniqueDirName(gen, "RetimeInstance")
|
||||
chisel3.Driver.execute(Array("-td", s"test_run_dir/$dir", "-foaf", s"test_run_dir/$dir/final.anno"), gen) shouldBe a [ChiselExecutionSuccess]
|
||||
|
||||
val lines = io.Source.fromFile(s"test_run_dir/$dir/final.anno").getLines().map(normalized).toSeq
|
||||
lines should contain ("Annotation(ComponentName(instance, ModuleName(RetimeInstance,CircuitName(RetimeInstance))),class barstools.tapeout.transforms.retime.RetimeTransform,retime)")
|
||||
Logger.makeScope(Seq.empty) {
|
||||
val captor = new Logger.OutputCaptor
|
||||
Logger.setOutput(captor.printStream)
|
||||
val firrtl = (new ChiselStage).emitFirrtl(
|
||||
new RetimeInstance(),
|
||||
Array("-td", s"test_run_dir/$dir", "-foaf", s"test_run_dir/$dir/final", "--log-level", "info")
|
||||
)
|
||||
firrtl.nonEmpty should be(true)
|
||||
//Make sure we got the RetimeTransform scheduled
|
||||
captor.getOutputAsString should include ("barstools.tapeout.transforms.retime.RetimeTransform")
|
||||
}
|
||||
|
||||
val lines = FileUtils.getLines(s"test_run_dir/$dir/test_run_dir/$dir/final.anno.json")
|
||||
.map(normalized)
|
||||
.mkString("\n")
|
||||
lines should include("barstools.tapeout.transforms.retime.RetimeAnnotation")
|
||||
lines should include(""""target":"RetimeInstance.MyModule"""")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user