xref: /XiangShan/src/test/scala/top/SimMMIO.scala (revision 9c43f7c7a82f1e814463c15d7002db50222253e2)
1package top
2
3import chisel3._
4import chisel3.util._
5
6import bus.simplebus._
7import device._
8
9class DeviceHelper extends BlackBox {
10  val io = IO(new Bundle {
11    val clk = Input(Clock())
12    val reset = Input(Bool())
13    val reqValid = Input(Bool())
14    val reqWen = Input(Bool())
15    val reqAddr = Input(UInt(64.W))
16    val reqWdata = Input(UInt(64.W))
17    val reqWmask = Input(UInt(8.W))
18    val respRdata = Output(UInt(64.W))
19  })
20}
21
22class SimMMIO extends Module {
23  val io = IO(new Bundle {
24    val rw = Flipped(new SimpleBusUC)
25  })
26
27  val devAddrSpace = List(
28    (0x40600000L, 0x10L), // uart
29    (0x40700000L, 0x10L)  // timer
30  )
31
32  val xbar = Module(new SimpleBusCrossbar(1, devAddrSpace))
33  xbar.io.in(0) <> io.rw
34
35  val timer = Module(new AXI4Timer)
36  timer.io.in <> xbar.io.out(1).toAXI4Lite()
37
38  val helper = Module(new DeviceHelper)
39  val helperIO = xbar.io.out(0)
40  helper.io.clk := clock
41  helper.io.reset := reset.asBool
42  helper.io.reqValid := helperIO.req.valid
43  helper.io.reqWen := helperIO.isWrite()
44  helper.io.reqAddr := helperIO.req.bits.addr
45  helper.io.reqWdata := helperIO.req.bits.wdata
46  helper.io.reqWmask := helperIO.req.bits.wmask
47  helperIO.resp.bits.rdata := helper.io.respRdata
48  helperIO.resp.bits.cmd := 0.U
49  helperIO.resp.bits.user := 0.U
50
51  helperIO.req.ready := true.B
52  helperIO.resp.valid := RegNext(helperIO.req.valid)
53}
54