ShiboSoftwareDev/am625sip-linux-board

This code defines the physical footprint and pin layout for an AM625 System-in-Package (SIP) component, detailing pad positions, pin labels, and package outline for hardware integration.

Version
1.0.24
License
unset
Stars
0

components/am625sip.tsx

import type { ChipProps } from "@tscircuit/props"
import { Fragment } from "react"

/**
 * AM6254ATLHJAMKR / AMK0425A package map transcribed from TI SPRSP98A,
 * Figure 5-1. Tuple fields are ball name, primary signal, zero-based column,
 * and zero-based row in the top-view 25 x 25, 0.5 mm grid.
 */
export const AM625SIP_BALLS = [
  ["A1", "VSS", 0, 0],
  ["A2", "RSVD1", 1, 0],
  ["A3", "MCU_OSC0_XO", 2, 0],
  ["A4", "WKUP_UART0_RTSn", 3, 0],
  ["A5", "MCU_UART0_TXD", 4, 0],
  ["A6", "MCU_UART0_CTSn", 5, 0],
  ["A7", "MCU_SPI0_CLK", 6, 0],
  ["A8", "MCU_I2C0_SCL", 7, 0],
  ["A9", "WKUP_I2C0_SDA", 8, 0],
  ["A10", "TCK", 9, 0],
  ["A11", "TDI", 10, 0],
  ["A12", "WKUP_CLKOUT0", 11, 0],
  ["A13", "SPI0_CS0", 12, 0],
  ["A14", "SPI0_CLK", 13, 0],
  ["A15", "UART0_CTSn", 14, 0],
  ["A16", "I2C0_SDA", 15, 0],
  ["A17", "I2C1_SDA", 16, 0],
  ["A18", "EXT_REFCLK1", 17, 0],
  ["A19", "MCASP0_AXR2", 18, 0],
  ["A20", "MCASP0_ACLKR", 19, 0],
  ["A21", "MMC1_CMD", 20, 0],
  ["A22", "MMC1_DAT0", 21, 0],
  ["A23", "MMC2_SDCD", 22, 0],
  ["A24", "VSS", 23, 0],
  ["A25", "VSS", 24, 0],
  ["B1", "RSVD0", 0, 1],
  ["B2", "MCU_OSC0_XI", 1, 1],
  ["B3", "MCU_MCAN0_RX", 2, 1],
  ["B4", "WKUP_UART0_RXD", 3, 1],
  ["B5", "MCU_UART0_RXD", 4, 1],
  ["B6", "MCU_UART0_RTSn", 5, 1],
  ["B7", "PMIC_LPM_EN0", 6, 1],
  ["B8", "MCU_SPI0_CS1", 7, 1],
  ["B9", "WKUP_I2C0_SCL", 8, 1],
  ["B10", "TRSTn", 9, 1],
  ["B11", "TMS", 10, 1],
  ["B12", "MCU_RESETSTATz", 11, 1],
  ["B13", "SPI0_D0", 12, 1],
  ["B14", "SPI0_D1", 13, 1],
  ["B15", "UART0_RTSn", 14, 1],
  ["B16", "I2C0_SCL", 15, 1],
  ["B17", "I2C1_SCL", 16, 1],
  ["B18", "MCASP0_AXR1", 17, 1],
  ["B19", "MCASP0_AXR3", 18, 1],
  ["B20", "MCASP0_ACLKX", 19, 1],
  ["B21", "MMC1_DAT1", 20, 1],
  ["B22", "MMC1_CLK", 21, 1],
  ["B23", "MMC2_SDWP", 22, 1],
  ["B24", "MMC2_DAT0", 23, 1],
  ["B25", "VSS", 24, 1],
  ["C1", "WKUP_LFOSC0_XO", 0, 2],
  ["C2", "WKUP_LFOSC0_XI", 1, 2],
  ["C5", "WKUP_UART0_TXD", 4, 2],
  ["C6", "WKUP_UART0_CTSn", 5, 2],
  ["C9", "MCU_SPI0_D1", 8, 2],
  ["C11", "EMU1", 10, 2],
  ["C13", "SPI0_CS1", 12, 2],
  ["C15", "MCAN0_TX", 14, 2],
  ["C17", "MMC1_SDWP", 16, 2],
  ["C20", "USB0_DRVVBUS", 19, 2],
  ["C21", "MMC1_DAT2", 20, 2],
  ["C24", "MMC2_CMD", 23, 2],
  ["C25", "MMC2_DAT1", 24, 2],
  ["D1", "MCU_ERRORn", 0, 3],
  ["D2", "MCU_PORz", 1, 3],
  ["D4", "MCU_MCAN1_RX", 3, 3],
  ["D6", "MCU_MCAN0_TX", 5, 3],
  ["D9", "MCU_SPI0_D0", 8, 3],
  ["D10", "MCU_I2C0_SDA", 9, 3],
  ["D12", "TDO", 11, 3],
  ["D14", "UART0_RXD", 13, 3],
  ["D16", "EXTINTn", 15, 3],
  ["D17", "MMC1_SDCD", 16, 3],
  ["D20", "MCASP0_AFSX", 19, 3],
  ["D22", "MMC1_DAT3", 21, 3],
  ["D24", "MMC2_DAT3", 23, 3],
  ["D25", "MMC2_CLK", 24, 3],
  ["E1", "VSS", 0, 4],
  ["E2", "VSS", 1, 4],
  ["E3", "VSS", 2, 4],
  ["E5", "MCU_MCAN1_TX", 4, 4],
  ["E7", "RSVD8", 6, 4],
  ["E8", "MCU_SPI0_CS0", 7, 4],
  ["E11", "MCU_RESETz", 10, 4],
  ["E12", "EMU0", 11, 4],
  ["E14", "UART0_TXD", 13, 4],
  ["E15", "MCAN0_RX", 14, 4],
  ["E18", "MCASP0_AXR0", 17, 4],
  ["E19", "MCASP0_AFSR", 18, 4],
  ["E21", "PORz_OUT", 20, 4],
  ["E23", "MMC2_DAT2", 22, 4],
  ["E24", "OSPI0_CSn3", 23, 4],
  ["E25", "OSPI0_D0", 24, 4],
  ["F1", "VSS", 0, 5],
  ["F2", "VDDS_MEM_1P1", 1, 5],
  ["F3", "VSS", 2, 5],
  ["F4", "VSS", 3, 5],
  ["F6", "RSVD2", 5, 5],
  ["F8", "VDD_CANUART", 7, 5],
  ["F11", "VDDSHV_MCU", 10, 5],
  ["F13", "VSS", 12, 5],
  ["F15", "VDDSHV0", 14, 5],
  ["F18", "USB1_DRVVBUS", 17, 5],
  ["F20", "RESET_REQz", 19, 5],
  ["F22", "RESETSTATz", 21, 5],
  ["F23", "OSPI0_CSn0", 22, 5],
  ["F24", "OSPI0_D3", 23, 5],
  ["F25", "OSPI0_D2", 24, 5],
  ["G1", "DDR0_RESET0_n", 0, 6],
  ["G2", "VDDS_MEM_1P1", 1, 6],
  ["G5", "VSS", 4, 6],
  ["G7", "VDDS_OSC0", 6, 6],
  ["G9", "CAP_VDDS_CANUART", 8, 6],
  ["G10", "VMON_1P8_SOC", 9, 6],
  ["G12", "VDDSHV_MCU", 11, 6],
  ["G13", "VSS", 12, 6],
  ["G14", "VDDSHV0", 13, 6],
  ["G16", "VDDA_TEMP1", 15, 6],
  ["G17", "VDDSHV5", 16, 6],
  ["G19", "VSS", 18, 6],
  ["G21", "OSPI0_CSn1", 20, 6],
  ["G24", "OSPI0_D1", 23, 6],
  ["G25", "OSPI0_LBCLKO", 24, 6],
  ["H1", "VDDS_MEM_1P1", 0, 7],
  ["H2", "VDDS_MEM_1P1", 1, 7],
  ["H5", "VSS", 4, 7],
  ["H6", "VSS", 5, 7],
  ["H8", "VDD_CORE", 7, 7],
  ["H9", "VDDSHV_CANUART", 8, 7],
  ["H10", "VMON_VSYS", 9, 7],
  ["H11", "CAP_VDDS_MCU", 10, 7],
  ["H13", "VSS", 12, 7],
  ["H15", "CAP_VDDS0", 14, 7],
  ["H16", "VSS", 15, 7],
  ["H17", "CAP_VDDS5", 16, 7],
  ["H18", "VSS", 17, 7],
  ["H20", "VSS", 19, 7],
  ["H21", "OSPI0_CSn2", 20, 7],
  ["H24", "OSPI0_CLK", 23, 7],
  ["H25", "OSPI0_D6", 24, 7],
  ["J1", "VSS", 0, 8],
  ["J2", "VSS", 1, 8],
  ["J3", "VSS", 2, 8],
  ["J4", "VSS", 3, 8],
  ["J7", "VSS", 6, 8],
  ["J8", "VPP", 7, 8],
  ["J11", "VDD_CORE", 10, 8],
  ["J12", "VDDR_CORE", 11, 8],
  ["J13", "VSS", 12, 8],
  ["J14", "VDD_CORE", 13, 8],
  ["J18", "VDDSHV6", 17, 8],
  ["J19", "CAP_VDDS6", 18, 8],
  ["J22", "OSPI0_D7", 21, 8],
  ["J23", "OSPI0_D4", 22, 8],
  ["J24", "OSPI0_DQS", 23, 8],
  ["J25", "OSPI0_D5", 24, 8],
  ["K1", "VSS", 0, 9],
  ["K2", "VSS", 1, 9],
  ["K3", "VSS", 2, 9],
  ["K4", "VSS", 3, 9],
  ["K7", "VSS", 6, 9],
  ["K9", "VDDS_DDR", 8, 9],
  ["K10", "VMON_3P3_SOC", 9, 9],
  ["K13", "VSS", 12, 9],
  ["K15", "VSS", 14, 9],
  ["K16", "VDDR_CORE", 15, 9],
  ["K17", "VDD_CORE", 16, 9],
  ["K18", "CAP_VDDS1", 17, 9],
  ["K19", "VSS", 18, 9],
  ["K22", "GPMC0_CSn2", 21, 9],
  ["K24", "GPMC0_CSn3", 23, 9],
  ["K25", "GPMC0_WPn", 24, 9],
  ["L1", "VSS", 0, 10],
  ["L2", "VSS", 1, 10],
  ["L5", "VSS", 4, 10],
  ["L6", "VSS", 5, 10],
  ["L8", "VDDS_DDR", 7, 10],
  ["L11", "VDDA_MCU", 10, 10],
  ["L12", "VDD_CORE", 11, 10],
  ["L14", "VDDA_PLL2", 13, 10],
  ["L15", "VDD_CORE", 14, 10],
  ["L18", "VDDSHV1", 17, 10],
  ["L20", "VSS", 19, 10],
  ["L21", "GPMC0_CSn1", 20, 10],
  ["L23", "GPMC0_ADVn_ALE", 22, 10],
  ["L24", "GPMC0_OEn_REn", 23, 10],
  ["L25", "GPMC0_WEn", 24, 10],
  ["M1", "VSS", 0, 11],
  ["M2", "DDR0_CAL0", 1, 11],
  ["M4", "VDDS_MEM_1P8", 3, 11],
  ["M5", "VSS", 4, 11],
  ["M7", "VSS", 6, 11],
  ["M8", "VSS", 7, 11],
  ["M9", "VDDS_DDR", 8, 11],
  ["M10", "VSS", 9, 11],
  ["M12", "VSS", 11, 11],
  ["M13", "VSS", 12, 11],
  ["M16", "VDD_CORE", 15, 11],
  ["M17", "VSS", 16, 11],
  ["M18", "VSS", 17, 11],
  ["M19", "VDDSHV1", 18, 11],
  ["M21", "GPMC0_CSn0", 20, 11],
  ["M22", "GPMC0_DIR", 21, 11],
  ["M24", "GPMC0_BE0n_CLE", 23, 11],
  ["M25", "GPMC0_AD0", 24, 11],
  ["N1", "VDDS_MEM_1P1", 0, 12],
  ["N2", "VDDS_MEM_1P1", 1, 12],
  ["N3", "VDDS_MEM_1P8", 2, 12],
  ["N6", "VSS", 5, 12],
  ["N8", "VDD_CORE", 7, 12],
  ["N11", "VDD_CORE", 10, 12],
  ["N12", "VDDR_CORE", 11, 12],
  ["N13", "VDD_CORE", 12, 12],
  ["N14", "VDDR_CORE", 13, 12],
  ["N15", "VSS", 14, 12],
  ["N18", "VDDSHV3", 17, 12],
  ["N20", "GPMC0_BE1n", 19, 12],
  ["N23", "GPMC0_AD1", 22, 12],
  ["N24", "GPMC0_AD2", 23, 12],
  ["N25", "GPMC0_AD3", 24, 12],
  ["P1", "VSS", 0, 13],
  ["P2", "VDDS_MEM_1P1", 1, 13],
  ["P4", "VSS", 3, 13],
  ["P5", "VSS", 4, 13],
  ["P7", "VSS", 6, 13],
  ["P9", "VDDS_DDR", 8, 13],
  ["P10", "VSS", 9, 13],
  ["P13", "VSS", 12, 13],
  ["P16", "VDDR_CORE", 15, 13],
  ["P17", "VDD_CORE", 16, 13],
  ["P18", "VDDSHV3", 17, 13],
  ["P19", "CAP_VDDS3", 18, 13],
  ["P21", "GPMC0_AD6", 20, 13],
  ["P22", "GPMC0_AD5", 21, 13],
  ["P24", "GPMC0_AD4", 23, 13],
  ["P25", "GPMC0_CLK", 24, 13],
  ["R1", "VSS", 0, 14],
  ["R2", "VDDS_MEM_1P1", 1, 14],
  ["R3", "DDR_ZQ", 2, 14],
  ["R5", "VSS", 4, 14],
  ["R6", "VSS", 5, 14],
  ["R8", "VDDS_DDR", 7, 14],
  ["R11", "VDD_CORE", 10, 14],
  ["R12", "VDDR_CORE", 11, 14],
  ["R13", "VSS", 12, 14],
  ["R14", "VDD_CORE", 13, 14],
  ["R15", "VSS", 14, 14],
  ["R18", "VSS", 17, 14],
  ["R20", "VSS", 19, 14],
  ["R21", "GPMC0_AD11", 20, 14],
  ["R23", "GPMC0_AD7", 22, 14],
  ["R24", "GPMC0_AD8", 23, 14],
  ["R25", "GPMC0_AD9", 24, 14],
  ["T1", "VSS", 0, 15],
  ["T2", "RSVD4", 1, 15],
  ["T4", "VSS", 3, 15],
  ["T7", "VDDSHV4", 6, 15],
  ["T8", "VSS", 7, 15],
  ["T9", "VDDA_TEMP0", 8, 15],
  ["T10", "VDDR_CORE", 9, 15],
  ["T13", "VSS", 12, 15],
  ["T14", "VSS", 13, 15],
  ["T16", "VSS", 15, 15],
  ["T17", "VSS", 16, 15],
  ["T18", "VSS", 17, 15],
  ["T19", "VDDSHV3", 18, 15],
  ["T22", "GPMC0_AD12", 21, 15],
  ["T24", "GPMC0_AD13", 23, 15],
  ["T25", "GPMC0_AD10", 24, 15],
  ["U1", "VDDS_MEM_1P1", 0, 16],
  ["U2", "VDDS_MEM_1P1", 1, 16],
  ["U3", "VSS", 2, 16],
  ["U4", "RSVD5", 3, 16],
  ["U7", "CAP_VDDS4", 6, 16],
  ["U8", "VSS", 7, 16],
  ["U11", "VDDA_PLL0", 10, 16],
  ["U12", "VDD_CORE", 11, 16],
  ["U14", "VDDR_CORE", 13, 16],
  ["U15", "VDDA_PLL1", 14, 16],
  ["U18", "VDDSHV3", 17, 16],
  ["U19", "VSS", 18, 16],
  ["U22", "VOUT0_DATA0", 21, 16],
  ["U23", "GPMC0_WAIT0", 22, 16],
  ["U24", "GPMC0_AD15", 23, 16],
  ["U25", "GPMC0_AD14", 24, 16],
  ["V1", "VSS", 0, 17],
  ["V2", "VDDS_MEM_1P1", 1, 17],
  ["V5", "VSS", 4, 17],
  ["V6", "VSS", 5, 17],
  ["V8", "VDD_CORE", 7, 17],
  ["V9", "VSS", 8, 17],
  ["V10", "VSS", 9, 17],
  ["V11", "VSS", 10, 17],
  ["V13", "VSS", 12, 17],
  ["V15", "VDD_CORE", 14, 17],
  ["V16", "VSS", 15, 17],
  ["V17", "VDD_CORE", 16, 17],
  ["V18", "VSS", 17, 17],
  ["V20", "VOUT0_DATA10", 19, 17],
  ["V21", "VOUT0_DATA8", 20, 17],
  ["V24", "VOUT0_DATA1", 23, 17],
  ["V25", "GPMC0_WAIT1", 24, 17],
  ["W1", "VSS", 0, 18],
  ["W2", "VDDS_MEM_1P1", 1, 18],
  ["W5", "VSS", 4, 18],
  ["W7", "VSS", 6, 18],
  ["W9", "VDDA_1P8_OLDI0", 8, 18],
  ["W10", "VDDA_1P8_OLDI0", 9, 18],
  ["W12", "VDDA_CORE_USB", 11, 18],
  ["W13", "VDDA_CORE_CSIRX0", 12, 18],
  ["W14", "VDDA_1P8_CSIRX0", 13, 18],
  ["W16", "VDDSHV2", 15, 18],
  ["W17", "CAP_VDDS2", 16, 18],
  ["W19", "VDDSHV2", 18, 18],
  ["W21", "VOUT0_DATA9", 20, 18],
  ["W24", "VOUT0_DATA3", 23, 18],
  ["W25", "VOUT0_DATA2", 24, 18],
  ["Y1", "VSS", 0, 19],
  ["Y2", "VSS", 1, 19],
  ["Y3", "MMC0_CMD", 2, 19],
  ["Y4", "MMC0_DAT3", 3, 19],
  ["Y6", "OLDI0_A0P", 5, 19],
  ["Y8", "OLDI0_A2N", 7, 19],
  ["Y11", "VDDA_1P8_USB", 10, 19],
  ["Y13", "VDDA_3P3_USB", 12, 19],
  ["Y15", "RSVD7", 14, 19],
  ["Y18", "RGMII2_TD0", 17, 19],
  ["Y20", "VOUT0_DE", 19, 19],
  ["Y22", "VOUT0_DATA14", 21, 19],
  ["Y23", "VOUT0_DATA6", 22, 19],
  ["Y24", "VOUT0_DATA5", 23, 19],
  ["Y25", "VOUT0_DATA4", 24, 19],
  ["AA1", "MMC0_DAT1", 0, 20],
  ["AA2", "MMC0_DAT0", 1, 20],
  ["AA3", "MMC0_DAT2", 2, 20],
  ["AA5", "OLDI0_A0N", 4, 20],
  ["AA7", "OLDI0_A3P", 6, 20],
  ["AA8", "OLDI0_A2P", 7, 20],
  ["AA11", "VSS", 10, 20],
  ["AA12", "RSVD6", 11, 20],
  ["AA14", "CSI0_RXRCALIB", 13, 20],
  ["AA15", "RGMII1_RD3", 14, 20],
  ["AA18", "RGMII2_TD1", 17, 20],
  ["AA19", "RGMII2_TX_CTL", 18, 20],
  ["AA21", "VOUT0_DATA15", 20, 20],
  ["AA23", "VOUT0_DATA11", 22, 20],
  ["AA24", "VOUT0_DATA13", 23, 20],
  ["AA25", "VOUT0_DATA7", 24, 20],
  ["AB1", "MMC0_CLK", 0, 21],
  ["AB2", "MMC0_DAT4", 1, 21],
  ["AB4", "OLDI0_A1P", 3, 21],
  ["AB6", "OLDI0_A3N", 5, 21],
  ["AB9", "VSS", 8, 21],
  ["AB10", "USB1_VBUS", 9, 21],
  ["AB12", "CSI0_RXN3", 11, 21],
  ["AB14", "CSI0_RXN0", 13, 21],
  ["AB16", "RGMII1_RD2", 15, 21],
  ["AB17", "RGMII1_RD0", 16, 21],
  ["AB20", "RGMII2_RD1", 19, 21],
  ["AB22", "MDIO0_MDIO", 21, 21],
  ["AB24", "VOUT0_HSYNC", 23, 21],
  ["AB25", "VOUT0_DATA12", 24, 21],
  ["AC1", "MMC0_DAT5", 0, 22],
  ["AC2", "MMC0_DAT7", 1, 22],
  ["AC5", "OLDI0_A4P", 4, 22],
  ["AC6", "OLDI0_A4N", 5, 22],
  ["AC9", "USB1_RCALIB", 8, 22],
  ["AC11", "USB0_VBUS", 10, 22],
  ["AC13", "CSI0_RXP3", 12, 22],
  ["AC15", "CSI0_RXP0", 14, 22],
  ["AC17", "RGMII1_RD1", 16, 22],
  ["AC20", "RGMII2_TD3", 19, 22],
  ["AC21", "RGMII2_RD2", 20, 22],
  ["AC24", "VOUT0_PCLK", 23, 22],
  ["AC25", "VOUT0_VSYNC", 24, 22],
  ["AD1", "VSS", 0, 23],
  ["AD2", "MMC0_DAT6", 1, 23],
  ["AD3", "OLDI0_A1N", 2, 23],
  ["AD4", "OLDI0_CLK0N", 3, 23],
  ["AD5", "OLDI0_CLK1P", 4, 23],
  ["AD6", "OLDI0_A5P", 5, 23],
  ["AD7", "OLDI0_A6P", 6, 23],
  ["AD8", "OLDI0_A7N", 7, 23],
  ["AD9", "VSS", 8, 23],
  ["AD10", "USB1_DM", 9, 23],
  ["AD11", "USB0_DP", 10, 23],
  ["AD12", "VSS", 11, 23],
  ["AD13", "CSI0_RXN2", 12, 23],
  ["AD14", "CSI0_RXN1", 13, 23],
  ["AD15", "CSI0_RXCLKN", 14, 23],
  ["AD16", "VSS", 15, 23],
  ["AD17", "RGMII1_RXC", 16, 23],
  ["AD18", "RGMII1_TD3", 17, 23],
  ["AD19", "RGMII1_TX_CTL", 18, 23],
  ["AD20", "RGMII1_TD1", 19, 23],
  ["AD21", "RGMII2_TD2", 20, 23],
  ["AD22", "RGMII2_RX_CTL", 21, 23],
  ["AD23", "RGMII2_RXC", 22, 23],
  ["AD24", "MDIO0_MDC", 23, 23],
  ["AD25", "VSS", 24, 23],
  ["AE1", "VSS", 0, 24],
  ["AE2", "RSVD3", 1, 24],
  ["AE3", "OLDI0_CLK0P", 2, 24],
  ["AE4", "OLDI0_CLK1N", 3, 24],
  ["AE5", "OLDI0_A5N", 4, 24],
  ["AE6", "OLDI0_A6N", 5, 24],
  ["AE7", "OLDI0_A7P", 6, 24],
  ["AE8", "VSS", 7, 24],
  ["AE9", "USB1_DP", 8, 24],
  ["AE10", "USB0_RCALIB", 9, 24],
  ["AE11", "USB0_DM", 10, 24],
  ["AE12", "VSS", 11, 24],
  ["AE13", "CSI0_RXP2", 12, 24],
  ["AE14", "CSI0_RXP1", 13, 24],
  ["AE15", "CSI0_RXCLKP", 14, 24],
  ["AE16", "VSS", 15, 24],
  ["AE17", "RGMII1_RX_CTL", 16, 24],
  ["AE18", "RGMII1_TD2", 17, 24],
  ["AE19", "RGMII1_TXC", 18, 24],
  ["AE20", "RGMII1_TD0", 19, 24],
  ["AE21", "RGMII2_TXC", 20, 24],
  ["AE22", "RGMII2_RD3", 21, 24],
  ["AE23", "RGMII2_RD0", 22, 24],
  ["AE24", "VSS", 23, 24],
  ["AE25", "VSS", 24, 24],
] as const

export type Am625SipBallName = (typeof AM625SIP_BALLS)[number][0]

const signalOccurrenceCount = new Map<string, number>()
for (const [, signalName] of AM625SIP_BALLS) {
  signalOccurrenceCount.set(
    signalName,
    (signalOccurrenceCount.get(signalName) ?? 0) + 1,
  )
}

export const AM625SIP_PIN_LABELS: Record<string, readonly string[]> =
  Object.fromEntries(
    AM625SIP_BALLS.map(([ballName, signalName], ballIndex) => [
      `pin${ballIndex + 1}`,
      [
        ballName,
        `${ballName}_${signalName}`,
        ...(signalOccurrenceCount.get(signalName) === 1 ? [signalName] : []),
      ],
    ]),
  )

const BALL_PITCH_MM = 0.5
const OUTER_BALL_OFFSET_MM = 6

export const Am625Sip = (props: ChipProps) => (
  <chip
    {...props}
    manufacturerPartNumber="AM6254ATLHJAMKR"
    pinLabels={AM625SIP_PIN_LABELS}
    footprint={
      <footprint>
        {AM625SIP_BALLS.map(([, , columnIndex, rowIndex], ballIndex) => (
          <Fragment key={`am625sip-ball-${ballIndex + 1}`}>
            <smtpad
              portHints={[`pin${ballIndex + 1}`]}
              pcbX={-OUTER_BALL_OFFSET_MM + columnIndex * BALL_PITCH_MM}
              pcbY={OUTER_BALL_OFFSET_MM - rowIndex * BALL_PITCH_MM}
              radius="0.15mm"
              shape="circle"
            />
          </Fragment>
        ))}
        <silkscreenpath
          route={[
            { x: -6.65, y: -6.65 },
            { x: 6.65, y: -6.65 },
            { x: 6.65, y: 6.65 },
            { x: -6.65, y: 6.65 },
            { x: -6.65, y: -6.65 },
          ]}
        />
        <silkscreencircle pcbX={-6.15} pcbY={6.15} radius="0.18mm" />
      </footprint>
    }
  />
)