xref: /XiangShan/src/main/scala/device/AXI4Timer.scala (revision 84226e46be37f3b3ef7ea7c572af5db5665151b8)
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