import migen in litex/gen
[litex.git] / litex / soc / misoc / cores / timer.py
1 from migen import *
2
3 from misoc.interconnect.csr import *
4 from misoc.interconnect.csr_eventmanager import *
5
6
7 class Timer(Module, AutoCSR):
8 def __init__(self, width=32):
9 self._load = CSRStorage(width)
10 self._reload = CSRStorage(width)
11 self._en = CSRStorage()
12 self._update_value = CSR()
13 self._value = CSRStatus(width)
14
15 self.submodules.ev = EventManager()
16 self.ev.zero = EventSourceProcess()
17 self.ev.finalize()
18
19 ###
20
21 value = Signal(width)
22 self.sync += [
23 If(self._en.storage,
24 If(value == 0,
25 # set reload to 0 to disable reloading
26 value.eq(self._reload.storage)
27 ).Else(
28 value.eq(value - 1)
29 )
30 ).Else(
31 value.eq(self._load.storage)
32 ),
33 If(self._update_value.re, self._value.status.eq(value))
34 ]
35 self.comb += self.ev.zero.trigger.eq(value != 0)