184226e46SZihao Yu// See LICENSE.SiFive for license details. 284226e46SZihao Yu 384226e46SZihao Yupackage device 484226e46SZihao Yu 584226e46SZihao Yuimport chisel3._ 684226e46SZihao Yuimport chisel3.util._ 784226e46SZihao Yu 884226e46SZihao Yuimport memory.{AXI4, AXI4Parameters} 984226e46SZihao Yu 1084226e46SZihao Yuclass AXI4Timer() extends Module { 1184226e46SZihao Yu val io = IO(new Bundle{ 1284226e46SZihao Yu val in = Flipped(new AXI4) 1384226e46SZihao Yu }) 1484226e46SZihao Yu 1584226e46SZihao Yu val in = io.in 1684226e46SZihao Yu 1784226e46SZihao Yu val clk = 50000 // 50MHz / 1000 1884226e46SZihao Yu val tick = Counter(true.B, clk)._2 1984226e46SZihao Yu val ms = Counter(tick, 0x40000000)._1 2084226e46SZihao Yu 2184226e46SZihao Yu in.ar.ready := true.B 2284226e46SZihao Yu in.aw.ready := true.B 2384226e46SZihao Yu in.w.ready := true.B 24*e2100e14SZihao Yu 25*e2100e14SZihao Yu // should deal with non-ready master 26*e2100e14SZihao Yu in.b.valid := RegNext(in.aw.fire()) 27*e2100e14SZihao Yu in.r.valid := RegNext(in.ar.fire()) 2884226e46SZihao Yu 2984226e46SZihao Yu in.r.bits.data := ms 30*e2100e14SZihao Yu in.r.bits.id := RegNext(in.ar.bits.id) 31*e2100e14SZihao Yu in.r.bits.user := RegNext(in.ar.bits.user) 3284226e46SZihao Yu in.r.bits.resp := AXI4Parameters.RESP_OKAY 3384226e46SZihao Yu in.r.bits.last := true.B 34*e2100e14SZihao Yu in.b.bits.id := RegNext(in.aw.bits.id) 35*e2100e14SZihao Yu in.b.bits.user := RegNext(in.aw.bits.user) 3684226e46SZihao Yu in.b.bits.resp := AXI4Parameters.RESP_OKAY 3784226e46SZihao Yu} 3884226e46SZihao Yu 3984226e46SZihao Yuobject TopAXI4Timer extends App { 4084226e46SZihao Yu Driver.execute(args, () => new AXI4Timer) 4184226e46SZihao Yu} 42