mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
Add timer
This commit is contained in:
parent
8ad251c94c
commit
94245517f2
3 changed files with 37 additions and 3 deletions
|
@ -4,6 +4,7 @@
|
|||
#define UART_BASE 0xe0000000
|
||||
#define DFII_BASE 0xe0000800
|
||||
#define ID_BASE 0xe0001000
|
||||
#define MINIMAC_BASE 0xe0001800
|
||||
#define TIMER0_BASE 0xe0001800
|
||||
#define MINIMAC_BASE 0xe0002000
|
||||
|
||||
#endif /* __CSRBASE_H */
|
||||
|
|
30
milkymist/timer/__init__.py
Normal file
30
milkymist/timer/__init__.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
from migen.fhdl.structure import *
|
||||
from migen.bank.description import *
|
||||
from migen.bank.eventmanager import *
|
||||
from migen.bank import csrgen
|
||||
|
||||
class Timer:
|
||||
def __init__(self, address, width=32):
|
||||
self._en = RegisterField("en")
|
||||
self._value = RegisterField("value", width, access_dev=READ_WRITE)
|
||||
self._reload = RegisterField("reload", width)
|
||||
regs = [self._en, self._value, self._reload]
|
||||
|
||||
self.event = EventSourceLevel()
|
||||
self.events = EventManager(self.event)
|
||||
|
||||
self.bank = csrgen.Bank(regs + self.events.get_registers(), address=address)
|
||||
|
||||
def get_fragment(self):
|
||||
comb = [
|
||||
If(self._value.field.r == 0,
|
||||
self._value.field.w.eq(self._reload.field.r)
|
||||
).Else(
|
||||
self._value.field.w.eq(self._value.field.r - 1)
|
||||
),
|
||||
self._value.field.we.eq(self._en.field.r),
|
||||
self.event.trigger.eq(self._value.field.r != 0)
|
||||
]
|
||||
return Fragment(comb) \
|
||||
+ self.events.get_fragment() \
|
||||
+ self.bank.get_fragment()
|
7
top.py
7
top.py
|
@ -5,7 +5,7 @@ from migen.fhdl.structure import *
|
|||
from migen.fhdl import verilog, autofragment
|
||||
from migen.bus import wishbone, wishbone2asmi, csr, wishbone2csr, dfi
|
||||
|
||||
from milkymist import m1crg, lm32, norflash, uart, sram, s6ddrphy, dfii, asmicon, identifier, minimac3
|
||||
from milkymist import m1crg, lm32, norflash, uart, sram, s6ddrphy, dfii, asmicon, identifier, timer, minimac3
|
||||
from cmacros import get_macros
|
||||
from constraints import Constraints
|
||||
|
||||
|
@ -117,10 +117,12 @@ def get():
|
|||
#
|
||||
uart0 = uart.UART(csr_offset("UART"), clk_freq, baud=115200)
|
||||
identifier0 = identifier.Identifier(csr_offset("ID"), 0x4D31, version)
|
||||
timer0 = timer.Timer(csr_offset("TIMER0"))
|
||||
csrcon0 = csr.Interconnect(wishbone2csr0.csr, [
|
||||
uart0.bank.interface,
|
||||
dfii0.bank.interface,
|
||||
identifier0.bank.interface,
|
||||
timer0.bank.interface,
|
||||
minimac0.bank.interface
|
||||
])
|
||||
|
||||
|
@ -129,7 +131,8 @@ def get():
|
|||
#
|
||||
interrupts = Fragment([
|
||||
cpu0.interrupt[0].eq(uart0.events.irq),
|
||||
cpu0.interrupt[1].eq(minimac0.events.irq)
|
||||
cpu0.interrupt[1].eq(timer0.events.irq),
|
||||
cpu0.interrupt[2].eq(minimac0.events.irq)
|
||||
])
|
||||
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue