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