Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/misoc
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 4e18e45
Choose a base ref
...
head repository: m-labs/misoc
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9424551
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on May 20, 2012

  1. Connect Ethernet IRQ

    Sebastien Bourdeauducq committed May 20, 2012
    Copy the full SHA
    8ad251c View commit details

Commits on May 21, 2012

  1. Add timer

    Sebastien Bourdeauducq committed May 21, 2012
    Copy the full SHA
    9424551 View commit details
Showing with 38 additions and 3 deletions.
  1. +2 −1 common/csrbase.h
  2. +30 −0 milkymist/timer/__init__.py
  3. +6 −2 top.py
3 changes: 2 additions & 1 deletion common/csrbase.h
Original file line number Diff line number Diff line change
@@ -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 changes: 30 additions & 0 deletions milkymist/timer/__init__.py
Original file line number Diff line number Diff line change
@@ -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()
8 changes: 6 additions & 2 deletions top.py
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
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,18 +117,22 @@ 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
])

#
# Interrupts
#
interrupts = Fragment([
cpu0.interrupt[0].eq(uart0.events.irq)
cpu0.interrupt[0].eq(uart0.events.irq),
cpu0.interrupt[1].eq(timer0.events.irq),
cpu0.interrupt[2].eq(minimac0.events.irq)
])

#