xref: /XiangShan/src/test/scala/xiangshan/DecodeTest.scala (revision 39c59369af6e7d78fa72e13aae3735f1a6e98f5c)
151981c77SbugGeneratorpackage xiangshan
251981c77SbugGenerator
351981c77SbugGeneratorimport chisel3._
451981c77SbugGeneratorimport chisel3.stage._
551981c77SbugGeneratorimport chiseltest._
651981c77SbugGeneratorimport chiseltest.ChiselScalatestTester
751981c77SbugGeneratorimport chiseltest.VerilatorBackendAnnotation
88a00ff56SXuan Huimport chiseltest.simulator.{VerilatorCFlags, VerilatorFlags}
9876196b7SMaxpicca-Liimport freechips.rocketchip.util.HasRocketChipStageUtils
1051981c77SbugGeneratorimport org.scalatest.flatspec.AnyFlatSpec
1151981c77SbugGeneratorimport org.scalatest.matchers.must.Matchers
1251981c77SbugGeneratorimport firrtl.stage.RunFirrtlTransformAnnotation
1351981c77SbugGeneratorimport xstransforms.PrintModuleName
1451981c77SbugGeneratorimport firrtl.options.TargetDirAnnotation
1551981c77SbugGeneratorimport top.ArgParser
16876196b7SMaxpicca-Liimport utility.FileRegisters
1751981c77SbugGeneratorimport xiangshan.backend.decode.DecodeUnit
188a00ff56SXuan Huimport xiangshan.backend.regfile.IntPregParams
1951981c77SbugGenerator
2051981c77SbugGeneratorobject DecodeMain extends App with HasRocketChipStageUtils {
2151981c77SbugGenerator  override def main(args: Array[String]): Unit = {
22b665b650STang Haojin    val (config, firrtlOpts, firrtlComplier, firtoolOpts) = ArgParser.parse(args)
2351981c77SbugGenerator    // //val soc = DisableMonitors(p => LazyModule(new XSTop()(p)))(config)
2451981c77SbugGenerator    // If Complex Params are needed, wrap it with a Top Module to do dirty works,
2551981c77SbugGenerator    // and use "chisel3.aop.Select.collectDeep[ModuleWanted](WrapperModule){case a: ModuleWanted => a}.head.Params"
2651981c77SbugGenerator    val defaultConfig = config.alterPartial({
2751981c77SbugGenerator      // Get XSCoreParams and pass it to the "small module"
2851981c77SbugGenerator      case XSCoreParamsKey => config(XSTileKey).head.copy(
2951981c77SbugGenerator        // Example of how to change params
308a00ff56SXuan Hu        intPreg = IntPregParams(
318a00ff56SXuan Hu          numEntries = 64,
32*39c59369SXuan Hu          numRead = Some(14),
33*39c59369SXuan Hu          numWrite = Some(8),
348a00ff56SXuan Hu        ),
3551981c77SbugGenerator      )
3651981c77SbugGenerator    })
3751981c77SbugGenerator    (new ChiselStage).execute(args, Seq(
3851981c77SbugGenerator      ChiselGeneratorAnnotation(() => new DecodeUnit()(defaultConfig)
3951981c77SbugGenerator    )))
4051981c77SbugGenerator//    // Generate files when compiling. Used by ChiselDB.
41876196b7SMaxpicca-Li//    FileRegisters.write("./build")
4251981c77SbugGenerator  }
4351981c77SbugGenerator}
4451981c77SbugGenerator
4551981c77SbugGeneratorclass DecodeUnitTest extends XSTester {
4651981c77SbugGenerator  behavior of "DecodeUnit"
4751981c77SbugGenerator  it should "pass" in {
4851981c77SbugGenerator    test(new DecodeUnit()(config)).withAnnotations(Seq(
4951981c77SbugGenerator      VerilatorBackendAnnotation,
5051981c77SbugGenerator      VerilatorFlags(Seq()),
5151981c77SbugGenerator      WriteVcdAnnotation,
5251981c77SbugGenerator      TargetDirAnnotation("./build"),
5351981c77SbugGenerator      RunFirrtlTransformAnnotation(new PrintModuleName)
5451981c77SbugGenerator    )){ dut =>
5551981c77SbugGenerator      dut.clock.step(10)
5651981c77SbugGenerator    }
5751981c77SbugGenerator  }
5851981c77SbugGenerator}