package top import system._ import noop.NOOPConfig import chisel3._ import chisel3.util._ import chisel3.util.experimental.BoringUtils import bus.axi4._ import device.AXI4RAM class DiffTestIO extends Bundle { val r = Output(Vec(32, UInt(64.W))) val commit = Output(Bool()) val thisPC = Output(UInt(64.W)) val thisINST = Output(UInt(32.W)) val isMMIO = Output(Bool()) val isRVC = Output(Bool()) val intrNO = Output(UInt(64.W)) val priviledgeMode = Output(UInt(2.W)) val mstatus = Output(UInt(64.W)) val sstatus = Output(UInt(64.W)) val mepc = Output(UInt(64.W)) val sepc = Output(UInt(64.W)) val mcause = Output(UInt(64.W)) val scause = Output(UInt(64.W)) } class NOOPSimTop extends Module { val io = IO(new Bundle{ val difftest = new DiffTestIO }) lazy val config = NOOPConfig(FPGAPlatform = false) val soc = Module(new NOOPSoC()(config)) val mem = Module(new AXI4RAM(memByte = 256 * 1024 * 1024, useBlackBox = true)) // Be careful with the commit checking of emu. // A large delay will make emu incorrectly report getting stuck. val memdelay = Module(new AXI4Delayer(0)) val mmio = Module(new SimMMIO) soc.io.frontend := DontCare memdelay.io.in <> soc.io.mem mem.io.in <> memdelay.io.out mmio.io.rw <> soc.io.mmio // soc.io.meip := Counter(true.B, 9973)._2 // use prime here to not overlapped by mtip soc.io.meip := false.B // use prime here to not overlapped by mtip val difftest = WireInit(0.U.asTypeOf(new DiffTestIO)) BoringUtils.addSink(difftest.commit, "difftestCommit") BoringUtils.addSink(difftest.thisPC, "difftestThisPC") BoringUtils.addSink(difftest.thisINST, "difftestThisINST") BoringUtils.addSink(difftest.isMMIO, "difftestIsMMIO") BoringUtils.addSink(difftest.isRVC, "difftestIsRVC") BoringUtils.addSink(difftest.intrNO, "difftestIntrNO") BoringUtils.addSink(difftest.r, "difftestRegs") BoringUtils.addSink(difftest.priviledgeMode, "difftestMode") BoringUtils.addSink(difftest.mstatus, "difftestMstatus") BoringUtils.addSink(difftest.sstatus, "difftestSstatus") BoringUtils.addSink(difftest.mepc, "difftestMepc") BoringUtils.addSink(difftest.sepc, "difftestSepc") BoringUtils.addSink(difftest.mcause, "difftestMcause") BoringUtils.addSink(difftest.scause, "difftestScause") io.difftest := difftest } object TestMain extends App { chisel3.Driver.execute(args, () => new NOOPSimTop) }