1*84226e46SZihao Yu// See LICENSE.SiFive for license details. 2*84226e46SZihao Yu 3*84226e46SZihao Yupackage device 4*84226e46SZihao Yu 5*84226e46SZihao Yuimport chisel3._ 6*84226e46SZihao Yuimport chisel3.util._ 7*84226e46SZihao Yu 8*84226e46SZihao Yuimport memory.{AXI4, AXI4Parameters} 9*84226e46SZihao Yu 10*84226e46SZihao Yuclass AXI4Timer() extends Module { 11*84226e46SZihao Yu val io = IO(new Bundle{ 12*84226e46SZihao Yu val in = Flipped(new AXI4) 13*84226e46SZihao Yu }) 14*84226e46SZihao Yu 15*84226e46SZihao Yu val in = io.in 16*84226e46SZihao Yu 17*84226e46SZihao Yu val clk = 50000 // 50MHz / 1000 18*84226e46SZihao Yu val tick = Counter(true.B, clk)._2 19*84226e46SZihao Yu val ms = Counter(tick, 0x40000000)._1 20*84226e46SZihao Yu 21*84226e46SZihao Yu in.ar.ready := true.B 22*84226e46SZihao Yu in.aw.ready := true.B 23*84226e46SZihao Yu in.w.ready := true.B 24*84226e46SZihao Yu in.b.valid := true.B 25*84226e46SZihao Yu in.r.valid := true.B 26*84226e46SZihao Yu 27*84226e46SZihao Yu in.r.bits.data := ms 28*84226e46SZihao Yu in.r.bits.id := in.ar.bits.id 29*84226e46SZihao Yu in.r.bits.user := in.ar.bits.user 30*84226e46SZihao Yu in.r.bits.resp := AXI4Parameters.RESP_OKAY 31*84226e46SZihao Yu in.r.bits.last := true.B 32*84226e46SZihao Yu in.b.bits.id := in.aw.bits.id 33*84226e46SZihao Yu in.b.bits.user := in.aw.bits.user 34*84226e46SZihao Yu in.b.bits.resp := AXI4Parameters.RESP_OKAY 35*84226e46SZihao Yu} 36*84226e46SZihao Yu 37*84226e46SZihao Yuobject TopAXI4Timer extends App { 38*84226e46SZihao Yu Driver.execute(args, () => new AXI4Timer) 39*84226e46SZihao Yu} 40