fomu-workshop/migen/fomu.py
2020-01-23 00:15:52 +01:00

142 lines
4.4 KiB
Python

""" Fomu board definitions (mapping of I/O pins, clock, etc.) """
from migen import *
from migen.build.generic_platform import *
from migen.build.lattice import LatticePlatform
class FomuPvtPlatform(LatticePlatform):
""" Based on
https://github.com/litex-hub/litex-boards/blob/master/litex_boards/partner/platforms/fomu_pvt.py """
_io = [
('clk48', 0, Pins('F4'), IOStandard('LVCMOS33')),
('user_led_n', 0, Pins('A5'), IOStandard('LVCMOS33')),
('rgb_led', 0,
Subsignal('r', Pins('C5')),
Subsignal('g', Pins('B5')),
Subsignal('b', Pins('A5')),
IOStandard('LVCMOS33')),
('user_touch_n', 0, Pins('E4'), IOStandard('LVCMOS33')),
('user_touch_n', 1, Pins('D5'), IOStandard('LVCMOS33')),
('user_touch_n', 2, Pins('E5'), IOStandard('LVCMOS33')),
('user_touch_n', 3, Pins('F5'), IOStandard('LVCMOS33')),
('usb', 0,
Subsignal('d_p', Pins('A1')),
Subsignal('d_n', Pins('A2')),
Subsignal('pullup', Pins('A4')),
IOStandard('LVCMOS33'))
]
_connectors = [
('touch_pins', 'E4 D5 E5 F5')
]
default_clk_name = 'clk48'
default_clk_period = 1e9 / 48e6
def __init__(self):
LatticePlatform.__init__(self,
'ice40-up5k-uwg30',
self._io,
self._connectors,
toolchain='icestorm')
def create_programmer(self):
return IceStormProgrammer()
class FomuHackerPlatform(LatticePlatform):
""" Based on
https://github.com/litex-hub/litex-boards/blob/master/litex_boards/partner/platforms/fomu_hacker.py """
_io = [
('clk48', 0, Pins('F5'), IOStandard('LVCMOS33')),
('user_led_n', 0, Pins('A5'), IOStandard('LVCMOS33')),
('rgb_led', 0,
Subsignal('r', Pins('C5')),
Subsignal('g', Pins('B5')),
Subsignal('b', Pins('A5')),
IOStandard('LVCMOS33')),
('user_touch_n', 0, Pins('F4'), IOStandard('LVCMOS33')),
('user_touch_n', 1, Pins('E5'), IOStandard('LVCMOS33')),
('user_touch_n', 2, Pins('E4'), IOStandard('LVCMOS33')),
('user_touch_n', 3, Pins('F2'), IOStandard('LVCMOS33')),
('usb', 0,
Subsignal('d_p', Pins('A4')),
Subsignal('d_n', Pins('A2')),
Subsignal('pullup', Pins('D5')),
IOStandard('LVCMOS33'))
]
_connectors = [
('touch_pins', 'F4 E5 E4 F2')
]
default_clk_name = 'clk48'
default_clk_period = 1e9 / 48e6
def __init__(self):
LatticePlatform.__init__(self,
'ice40-up5k-uwg30',
self._io,
self._connectors,
toolchain='icestorm')
def create_programmer(self):
return IceStormProgrammer()
class FomuEvt2Platform(LatticePlatform):
""" Based on
https://github.com/litex-hub/litex-boards/blob/master/litex_boards/partner/platforms/fomu_evt.py """
_io = [
('clk48', 0, Pins('44'), IOStandard('LVCMOS33')),
('user_led_n', 0, Pins('41'), IOStandard('LVCMOS33')),
('rgb_led', 0,
Subsignal('r', Pins('40')),
Subsignal('g', Pins('39')),
Subsignal('b', Pins('41')),
IOStandard('LVCMOS33')),
('user_touch_n', 0, Pins('48'), IOStandard('LVCMOS33')),
('user_touch_n', 1, Pins('47'), IOStandard('LVCMOS33')),
('user_touch_n', 2, Pins('46'), IOStandard('LVCMOS33')),
('user_touch_n', 3, Pins('45'), IOStandard('LVCMOS33')),
('usb', 0,
Subsignal('d_p', Pins('34')),
Subsignal('d_n', Pins('37')),
Subsignal('pullup', Pins('35')),
Subsignal('pulldown', Pins('36')),
IOStandard('LVCMOS33'))
]
_connectors = [
('touch_pins', '48 47 46 45')
]
default_clk_name = 'clk48'
default_clk_period = 1e9 / 48e6
def __init__(self):
LatticePlatform.__init__(self,
'ice40-up5k-sg48',
self._io,
self._connectors,
toolchain='icestorm')
def create_programmer(self):
return IceStormProgrammer()
FomuEvt3Platform = FomuEvt2Platform