diff options
| -rw-r--r-- | nmigen_boards/fomu_hacker.py | 7 | ||||
| -rw-r--r-- | nmigen_boards/fomu_pvt.py | 9 | ||||
| -rw-r--r-- | nmigen_boards/orangecrab_r0_1.py | 7 | ||||
| -rw-r--r-- | nmigen_boards/orangecrab_r0_2.py | 9 | ||||
| -rw-r--r-- | nmigen_boards/resources/interface.py | 37 | ||||
| -rw-r--r-- | nmigen_boards/tinyfpga_bx.py | 7 |
6 files changed, 46 insertions, 30 deletions
diff --git a/nmigen_boards/fomu_hacker.py b/nmigen_boards/fomu_hacker.py index 8bc9308..8bb0025 100644 --- a/nmigen_boards/fomu_hacker.py +++ b/nmigen_boards/fomu_hacker.py @@ -23,11 +23,8 @@ class FomuHackerPlatform(LatticeICE40Platform): attrs=Attrs(IO_STANDARD="SB_LVCMOS") ), - Resource("usb", 0, - Subsignal("d_p", Pins("A4")), - Subsignal("d_n", Pins("A2")), - Subsignal("pullup", Pins("D5")), - Attrs(IO_STANDARD="SB_LVCMOS"), + DirectUSBResource(0, d_p="A4", d_n="A2", pullup="D5", + attrs=Attrs(IO_STANDARD="SB_LVCMOS"), ), *SPIFlashResources(0, diff --git a/nmigen_boards/fomu_pvt.py b/nmigen_boards/fomu_pvt.py index ed8ff8f..370d2fa 100644 --- a/nmigen_boards/fomu_pvt.py +++ b/nmigen_boards/fomu_pvt.py @@ -23,12 +23,9 @@ class FomuPVTPlatform(LatticeICE40Platform): attrs=Attrs(IO_STANDARD="SB_LVCMOS") ), - Resource("usb", 0, - Subsignal("d_p", Pins("A1")), - Subsignal("d_n", Pins("A2")), - Subsignal("pullup", Pins("A4")), - Attrs(IO_STANDARD="SB_LVCMOS"), - ), + + DirectUSBResource(0, d_p="A1", d_n="A2", pullup="A4", + attrs=Attrs(IO_STANDARD="SB_LVCMOS")) *SPIFlashResources(0, cs="C1", clk="D1", copi="F1", cipo="E1", diff --git a/nmigen_boards/orangecrab_r0_1.py b/nmigen_boards/orangecrab_r0_1.py index abd9c7d..0f91fdf 100644 --- a/nmigen_boards/orangecrab_r0_1.py +++ b/nmigen_boards/orangecrab_r0_1.py @@ -64,12 +64,7 @@ class OrangeCrabR0_1Platform(LatticeECP5Platform): attrs=Attrs(IO_TYPE="LVCMOS33", SLEWRATE="FAST") ), - Resource("usb", 0, - Subsignal("d_p", Pins("N1", dir="io")), - Subsignal("d_m", Pins("M2", dir="io")), - Subsignal("pullup", Pins("N2", dir="o")), - Attrs(IO_TYPE="LVCMOS33") - ), + DirectUSBResource(0, d_p="N1", d_n="M2", pullup="N2", attrs=Attrs(IO_TYPE="LVCMOS33")) ] connectors = [ Connector("io", 0, { diff --git a/nmigen_boards/orangecrab_r0_2.py b/nmigen_boards/orangecrab_r0_2.py index ccd48f4..f5c0f68 100644 --- a/nmigen_boards/orangecrab_r0_2.py +++ b/nmigen_boards/orangecrab_r0_2.py @@ -71,17 +71,12 @@ class OrangeCrabR0_2Platform(LatticeECP5Platform): Attrs(IO_TYPE="LVCMOS33") ), - *SDCardResources(0, + *SDCardResources(0, dat0="J1", dat1="K3", dat2="L3", dat3="M1", clk="K1", cmd="K2", cd="L1", attrs=Attrs(IO_TYPE="LVCMOS33", SLEWRATE="FAST") ), - Resource("usb", 0, - Subsignal("d_p", Pins("N1", dir="io")), - Subsignal("d_m", Pins("M2", dir="io")), - Subsignal("pullup", Pins("N2", dir="o")), - Attrs(IO_TYPE="LVCMOS33") - ), + DirectUSBResource(0, d_p="N1", d_n="M2", pullup="N2", attrs=Attrs(IO_TYPE="LVCMOS33")) ] connectors = [ Connector("io", 0, { diff --git a/nmigen_boards/resources/interface.py b/nmigen_boards/resources/interface.py index 9073cc7..7b905ce 100644 --- a/nmigen_boards/resources/interface.py +++ b/nmigen_boards/resources/interface.py @@ -1,7 +1,10 @@ from nmigen.build import * -__all__ = ["UARTResource", "IrDAResource", "SPIResource"] +__all__ = [ + "UARTResource", "IrDAResource", "SPIResource", + "DirectUSBResource", "ULPIResource" +] def UARTResource(*args, rx, tx, rts=None, cts=None, dtr=None, dsr=None, dcd=None, ri=None, @@ -81,3 +84,35 @@ def SPIResource(*args, cs, clk, copi, cipo, int=None, reset=None, if attrs is not None: io.append(attrs) return Resource.family(*args, default_name="spi", ios=io) + + +def DirectUSBResource(*args, d_p, d_n, pullup=None, vbus_valid=None, + conn=None, attrs=None): + + io = [] + io.append(Subsignal("d_p", Pins(d_p, dir="io", conn=conn, assert_width=1))) + io.append(Subsignal("d_n", Pins(d_n, dir="io", conn=conn, assert_width=1))) + if pullup: + io.append(Subsignal("pullup", Pins(pullup, dir="o", conn=conn, assert_width=1))) + if vbus_valid: + io.append(Subsignal("vbus_valid", Pins(vbus_valid, dir="i", conn=conn, assert_width=1))) + if attrs is not None: + io.append(attrs) + return Resource.family(*args, default_name="usb", ios=io) + + +def ULPIResource(*args, data, clk, dir, nxt, stp, rst=None, + clk_dir='i', attrs=None, conn=None): + assert clk_dir in ('i', 'o',) + + io = [] + io.append(Subsignal("data", Pins(data, dir="io", conn=conn, assert_width=8))) + io.append(Subsignal("clk", Pins(clk, dir=clk_dir, conn=conn, assert_width=1))) + io.append(Subsignal("dir", Pins(dir, dir="i", conn=conn, assert_width=1))) + io.append(Subsignal("nxt", Pins(nxt, dir="i", conn=conn, assert_width=1))) + io.append(Subsignal("stp", Pins(stp, dir="o", conn=conn, assert_width=1))) + if rst is not None: + io.append(Subsignal("rst", Pins(stp, dir="o", conn=conn, assert_width=1))) + if attrs is not None: + io.append(attrs) + return Resource.family(*args, default_name="usb", ios=io) diff --git a/nmigen_boards/tinyfpga_bx.py b/nmigen_boards/tinyfpga_bx.py index 1606f17..f7673be 100644 --- a/nmigen_boards/tinyfpga_bx.py +++ b/nmigen_boards/tinyfpga_bx.py @@ -19,11 +19,8 @@ class TinyFPGABXPlatform(LatticeICE40Platform): *LEDResources(pins="B3", attrs=Attrs(IO_STANDARD="SB_LVCMOS")), - Resource("usb", 0, - Subsignal("d_p", Pins("B4", dir="io")), - Subsignal("d_n", Pins("A4", dir="io")), - Subsignal("pullup", Pins("A3", dir="o")), - Attrs(IO_STANDARD="SB_LVCMOS") + DirectUSBResource(0, d_p="B4", d_n="A4", pullup="A3", + attrs=Attrs(IO_STANDARD="SB_LVCMOS") ), *SPIFlashResources(0, |
