# The MIT License (MIT) - Copyright (c) 2021 xesscorp
"""
PMOD(TM) Plugs & Sockets.
Warning:
The pin numbering that Digilent uses for the PMOD connectors is completely
different from the numbering used by the KiCad footprints, so use the
pin names when assigning connections.
Note:
GND/VCC pins on a PMOD *plug* usually serve as power inputs to a PMOD board.
Therefore, these pins feed power to parts on the PMOD board so
they are assigned to be *POWER OUTPUTS* w.r.t. on-board parts.
GND/VCC pins on a PMOD *socket* usually serve as power outputs from
a main board to a PMOD board that is inserted in the socket.
Therefore, these pins feed power from the main board to the PMOD board
so they are assigned to be *POWER INPUTS* because some part on the
main board has to supply power to them.
Example:
>>> from circuitsascode.interfaces.pmod import *
>>> j1 = pmod_plug_6()
>>> j2 = pmod_socket_6()
>>> j3 = pmod_plug_12()
>>> j4 = pmod_socket_12()
>>>
>>> j1["io[0:3]"] += j2["io[0:3]"]
>>> j3["io[0:7]"] += j4["io[0:7]"]
>>>
>>> vcc, gnd = Net("VCC"), Net("GND")
>>>
>>> vcc += j1["VCC"], j2["VCC"], j3["VCC"], j4["VCC"]
>>> gnd += j1["GND"], j2["GND"], j3["GND"], j4["GND"]
"""
from skidl import SKIDL, Bus, Net, Part, Pin, generate_netlist # generate_pcb
[docs]def pmod_plug_6():
"""Returns a 6-pin (1x6) PMOD plug (male header).
Args:
None
Returns:
A Part object for a 6-pin (1x6) PMOD plug (male header).
"""
return Part(
name="PMOD_PLUG_6",
tool=SKIDL,
keywords="PMOD 1x6 plug male header",
description="6-pin (1x6) PMOD plug (male header)",
ref_prefix="J",
num_units=1,
footprint="Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Horizontal",
do_erc=True,
pins=[
Pin(num="6", name="IO0", func=Pin.BIDIR, do_erc=True),
Pin(num="5", name="IO1", func=Pin.BIDIR, do_erc=True),
Pin(num="4", name="IO2", func=Pin.BIDIR, do_erc=True),
Pin(num="3", name="IO3", func=Pin.BIDIR, do_erc=True),
Pin(num="2", name="GND", func=Pin.PWROUT, do_erc=True),
Pin(num="1", name="VCC", func=Pin.PWROUT, do_erc=True),
],
)
[docs]def pmod_plug_12():
"""Returns a 12-pin (2x6) PMOD plug (male header).
Args:
None
Returns:
A Part object for a 12-pin (2x6) PMOD plug (male header).
"""
return Part(
name="PMOD_PLUG_12",
tool=SKIDL,
keywords="PMOD 2x6 plug male header",
description="12-pin (2x6) PMOD plug (male header)",
ref_prefix="J",
num_units=1,
footprint="Connector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_Horizontal",
do_erc=True,
pins=[
Pin(num="12", name="IO4", func=Pin.BIDIR, do_erc=True),
Pin(num="11", name="IO0", func=Pin.BIDIR, do_erc=True),
Pin(num="10", name="IO5", func=Pin.BIDIR, do_erc=True),
Pin(num="9", name="IO1", func=Pin.BIDIR, do_erc=True),
Pin(num="8", name="IO6", func=Pin.BIDIR, do_erc=True),
Pin(num="7", name="IO2", func=Pin.BIDIR, do_erc=True),
Pin(num="6", name="IO7", func=Pin.BIDIR, do_erc=True),
Pin(num="5", name="IO3", func=Pin.BIDIR, do_erc=True),
Pin(num="4", name="GND", func=Pin.PWROUT, do_erc=True),
Pin(num="3", name="GND", func=Pin.PWROUT, do_erc=True),
Pin(num="2", name="VCC", func=Pin.PWROUT, do_erc=True),
Pin(num="1", name="VCC", func=Pin.PWROUT, do_erc=True),
],
)
[docs]def pmod_socket_6():
"""Returns a 6-pin (1x6) PMOD socket (female header).
Args:
None
Returns:
A Part object for a 6-pin (1x6) PMOD socket (female header).
"""
return Part(
name="PMOD_SOCKET_6",
tool=SKIDL,
keywords="PMOD 1x6 socket female header",
description="6-pin (1x6) PMOD socket (female header)",
ref_prefix="J",
num_units=1,
footprint="Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Horizontal",
do_erc=True,
pins=[
Pin(num="6", name="IO0", func=Pin.BIDIR, do_erc=True),
Pin(num="5", name="IO1", func=Pin.BIDIR, do_erc=True),
Pin(num="4", name="IO2", func=Pin.BIDIR, do_erc=True),
Pin(num="3", name="IO3", func=Pin.BIDIR, do_erc=True),
Pin(num="2", name="GND", func=Pin.PWRIN, do_erc=True),
Pin(num="1", name="VCC", func=Pin.PWRIN, do_erc=True),
],
)
[docs]def pmod_socket_12():
"""Returns a 12-pin (2x6) PMOD socket (female header).
Args:
None
Returns:
A Part object for a 12-pin (2x6) PMOD socket (female header).
"""
return Part(
name="PMOD_SOCKET_12",
tool=SKIDL,
keywords="PMOD 2x6 socket female header",
description="12-pin (2x6) PMOD socket (female header)",
ref_prefix="J",
num_units=1,
footprint="Connector_PinSocket_2.54mm:PinSocket_2x06_P2.54mm_Horizontal",
do_erc=True,
pins=[
Pin(num="12", name="IO4", func=Pin.BIDIR, do_erc=True),
Pin(num="11", name="IO0", func=Pin.BIDIR, do_erc=True),
Pin(num="10", name="IO5", func=Pin.BIDIR, do_erc=True),
Pin(num="9", name="IO1", func=Pin.BIDIR, do_erc=True),
Pin(num="8", name="IO6", func=Pin.BIDIR, do_erc=True),
Pin(num="7", name="IO2", func=Pin.BIDIR, do_erc=True),
Pin(num="6", name="IO7", func=Pin.BIDIR, do_erc=True),
Pin(num="5", name="IO3", func=Pin.BIDIR, do_erc=True),
Pin(num="4", name="GND", func=Pin.PWRIN, do_erc=True),
Pin(num="3", name="GND", func=Pin.PWRIN, do_erc=True),
Pin(num="2", name="VCC", func=Pin.PWRIN, do_erc=True),
Pin(num="1", name="VCC", func=Pin.PWRIN, do_erc=True),
],
)