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}