Source code for jitxlib.landpatterns.generators.qfp

"""
The QFP Landpattern Generator
=============================

QFP (Quad Flat Package) is a surface-mount IC package with leads extending
from all four sides. This module provides generators for creating QFP
landpatterns with customizable lead configurations.

The QFP landpattern has three entry points:

- :py:class:`~QFP`: Complete generator with A1 numbering (pads start at
  ``.p[1]`` in top-left, counter-clockwise)
- :py:class:`~QFPDecorated`: With silkscreen but no numbering scheme
- :py:class:`~QFPBase`: Basic pads only, no decorations

    >>> from jitx import Component, Port
    >>> from jitxlib.landpatterns.generators.qfp import QFP
    >>> from jitxlib.landpatterns.leads import LeadProfile
    >>> from jitxlib.landpatterns.package import RectanglePackage
    >>> from jitx.toleranced import Toleranced as T
    >>>
    >>> class MyQFP(Component):
    ...     # Define ports for a 32-pin QFP (8 per side)
    ...     pins = [Port() for _ in range(32)]
    ...     def __init__(self):
    ...         self.landpattern = (
    ...             QFP(num_leads=32)
    ...             .package_body(RectanglePackage(
    ...                 width=T(7.0, 0.1),
    ...                 length=T(7.0, 0.1),
    ...                 height=T(1.4, 0.1)
    ...             ))
    ...             .lead_profile(LeadProfile(
    ...                 span=T(9.0, 0.2),
    ...                 pitch=0.8,
    ...             ))
    ...         )

See Also:
    :py:mod:`~jitxlib.landpatterns.generators.qfn`: Similar package without leads
    :py:mod:`~jitxlib.landpatterns.generators.soic`: Dual-row alternative
"""

from dataclasses import dataclass

from jitx.anchor import Anchor

from ..courtyard import ExcessCourtyard
from ..grid_layout import A1, LinearNumbering
from ..leads import SMDLead
from ..leads.protrusion import LeadProtrusion
from ..leads.protrusions import BigGullWingLeads
from ..pads import SMDPadConfig, ThermalPadGeneratorMixin
from ..quad import CornerPadChamfer, QuadColumn
from ..silkscreen.labels import ReferenceDesignatorMixin
from ..silkscreen.marker import Pad1Marker
from ..silkscreen.outlines import SilkscreenOutline


[docs] @dataclass(frozen=True) class QFPLead(SMDLead): """QFP Lead This class specifies the default lead for QFP landpatterns. """ lead_type: LeadProtrusion = BigGullWingLeads """Lead Protrusion Type The default value for QFP leads is :py:class:`~BigGullWingLeads`. """
[docs] class QFPBase(CornerPadChamfer, ThermalPadGeneratorMixin, QuadColumn): """QFP Landpattern Generator Base""" def __base_init__(self): super().__base_init__() self.pad_config(SMDPadConfig())
[docs] class QFPDecorated( SilkscreenOutline, Pad1Marker, ReferenceDesignatorMixin, ExcessCourtyard, QFPBase ): """Decorated QFP Landpattern Generator, with no pad numbering scheme.""" def __base_init__(self): super().__base_init__() self.pad_1_marker_direction(Anchor.W)
[docs] class QFP(A1, LinearNumbering, QFPDecorated): """QFP Landpattern Generator"""