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

subcircuits/hdmi.tsx

import { Fragment } from "react"
import { Tfp410 } from "../components/tfp410"
import { BLM18AG601SN1D } from "../imports/BLM18AG601SN1D"
import { HDMI_001_19PCBTP } from "../imports/HDMI_001_19PCBTP"
import { TPD12S521DBTR } from "../imports/TPD12S521DBTR"

const SIGNAL_LAYERS = ["top", "inner1", "inner2", "bottom"] as const
const ACTIVE_HDMI_OUTPUT_STAGE = 6

const VOUT_BOUNDARIES = [
  { name: "VOUT0_PCLK", pin: "IDCK_P", pcbY: -13 },
  { name: "VOUT0_DE", pin: "DE", pcbY: -11 },
  { name: "VOUT0_HSYNC", pin: "HSYNC", pcbY: 6.5 },
  { name: "VOUT0_DATA0", pin: "DATA3", pcbY: 2.5 },
  { name: "VOUT0_DATA1", pin: "DATA4", pcbY: 1.3 },
  { name: "VOUT0_DATA2", pin: "DATA5", pcbY: 0.1 },
  { name: "VOUT0_DATA3", pin: "DATA6", pcbY: -1.1 },
  { name: "VOUT0_DATA4", pin: "DATA7", pcbY: -2.3 },
] as const

const TMDS_ESCAPES = [
  { pin: "TXC_N", pcbY: 1.75 },
  { pin: "TXC_P", pcbY: 1.25 },
  { pin: "TX0_N", pcbY: 0.25 },
  { pin: "TX0_P", pcbY: -0.25 },
  { pin: "TX1_N", pcbY: -1.25 },
  { pin: "TX1_P", pcbY: -1.75 },
  { pin: "TX2_N", pcbY: -2.75 },
  { pin: "TX2_P", pcbY: -3.25 },
] as const

const BoundaryPad = ({
  name,
  pcbX,
  pcbY,
}: {
  name: string
  pcbX: number
  pcbY: number
}) => (
  <chip
    name={name}
    pcbX={pcbX}
    pcbY={pcbY}
    noSchematicRepresentation
    footprint={
      <footprint>
        <smtpad
          portHints={["pin1"]}
          shape="rect"
          width="0.8mm"
          height="0.8mm"
        />
      </footprint>
    }
  />
)

const TmdsEscapePad = ({ name, pcbY }: { name: string; pcbY: number }) => (
  <chip
    name={name}
    pcbX={-34.2}
    pcbY={pcbY}
    noSchematicRepresentation
    footprint={
      <footprint>
        <smtpad
          portHints={["pin1"]}
          shape="rect"
          width="0.3mm"
          height="0.3mm"
        />
      </footprint>
    }
  />
)

export const HdmiSubcircuit = () => (
  <subcircuit
    name="HDMI"
    autorouter="default"
    exposedNets={["GND"]}
    defaultTraceWidth="0.08128mm"
    minTraceWidth="0.08128mm"
    minTraceToPadEdgeClearance="0.05mm"
    minPadEdgeToPadEdgeClearance="0.08128mm"
    minViaEdgeToPadEdgeClearance="0.08128mm"
    minViaHoleEdgeToViaHoleEdgeClearance="0.1016mm"
    minViaHoleDiameter="0.1mm"
    minViaPadDiameter="0.24mm"
  >
    <autoroutingphase
      name="HDMI_LOCAL_GROUND_DROPS"
      phaseIndex={16}
      autorouter="fanout"
      fanoutRoutingLayers={[...SIGNAL_LAYERS]}
      fanoutPourNetMap={{ inner1: ["GND"] }}
    />
    <autoroutingphase
      name="HDMI_LOCAL_SIGNAL_ROUTES"
      phaseIndex={18}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_POWER_FEEDS"
      phaseIndex={19}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_LOCAL_POWER_ROUTES"
      phaseIndex={20}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_CONNECTOR_GROUND_ROUTES_A"
      phaseIndex={20.1}
      autorouter="fanout"
      fanoutRoutingLayers={[...SIGNAL_LAYERS]}
      fanoutPourNetMap={{ inner1: ["GND"] }}
    />
    <autoroutingphase
      name="HDMI_CONNECTOR_GROUND_ROUTES_B"
      phaseIndex={20.2}
      autorouter="fanout"
      fanoutRoutingLayers={[...SIGNAL_LAYERS]}
      fanoutPourNetMap={{ inner1: ["GND"] }}
    />
    <autoroutingphase
      name="HDMI_TMDS_QFP_ESCAPES"
      phaseIndex={20.28}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_TMDS_SOURCE_DATA0_PAIR"
      phaseIndex={20.29}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_TMDS_SOURCE_DATA1_PAIR"
      phaseIndex={20.3}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_TMDS_SOURCE_CLOCK_PAIR"
      phaseIndex={20.32}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_TMDS_SOURCE_DATA2_PAIR"
      phaseIndex={20.33}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_TGND32_POST_DATA2_FANOUT"
      phaseIndex={20.34}
      autorouter="fanout"
      fanoutRoutingLayers={[...SIGNAL_LAYERS]}
      fanoutPourNetMap={{ inner1: ["GND"] }}
    />
    <autoroutingphase
      name="HDMI_TMDS_CONNECTOR_ROUTES"
      phaseIndex={20.4}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_DVDD_SUPPLY_NET"
      phaseIndex={20.5}
      autorouter="default"
    />
    <autoroutingphase
      name="HDMI_VOUT_INPUT_ROUTES"
      phaseIndex={20.6}
      autorouter="default"
    />

    <net name="GND" />
    <net name="HDMI_DVDD_3V3" routingPhaseIndex={20.5} />
    <net name="HDMI_VREF_0V825" routingPhaseIndex={18} />

    <BoundaryPad name="X_3V3" pcbX={-17} pcbY={13} />
    {VOUT_BOUNDARIES.map(({ name, pin, pcbY }) => (
      <Fragment key={name}>
        <BoundaryPad name={`X_${name}`} pcbX={-17} pcbY={pcbY} />
        <trace
          name={`HDMI_INPUT_${name}`}
          from={`.X_${name} > .pin1`}
          to={`.U3 > .${pin}`}
          routingPhaseIndex={20.6}
        />
      </Fragment>
    ))}
    <bus
      name="HDMI_VOUT_INPUT_BUS"
      connections={VOUT_BOUNDARIES.map(({ name }) => `HDMI_INPUT_${name}`)}
      routingPhaseIndex={20.6}
      pcbTraceWidth="0.08128mm"
      preferredLayers={[...SIGNAL_LAYERS]}
    />
    <Tfp410
      name="U3"
      pcbX={-27}
      pcbY={0}
      pcbRotation={180}
      noSchematicRepresentation
    />
    {TMDS_ESCAPES.map(({ pin, pcbY }) => (
      <Fragment key={`U3_ESCAPE_${pin}`}>
        <TmdsEscapePad name={`X_${pin}`} pcbY={pcbY} />
        <trace
          name={`U3_${pin}_ESCAPE`}
          from={`.U3 > .${pin}`}
          to={`.X_${pin} > .pin1`}
          width="0.15mm"
          routingPhaseIndex={20.28}
          />
      </Fragment>
    ))}
    <capacitor
      name="C53"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-23.25}
      pcbY={7.8}
      pcbRotation={270}
    />
    <capacitor
      name="C54"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-28.25}
      pcbY={9.6}
      pcbRotation={90}
    />
    <capacitor
      name="C55"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-30.25}
      pcbY={-7.8}
      pcbRotation={90}
    />
    {[
      { name: "U3_DVDD1", from: ".U3 > .DVDD_1" },
      { name: "U3_DVDD12", from: ".U3 > .DVDD_12" },
      { name: "U3_DVDD33", from: ".U3 > .DVDD_33" },
      { name: "U3_DVDD_C53", from: ".C53 > .pin1" },
      { name: "U3_DVDD_C54", from: ".C54 > .pin1" },
      { name: "U3_DVDD_C55", from: ".C55 > .pin1" },
    ].map(({ name, from }) => (
      <trace
        key={name}
        name={name}
        from={from}
        to="net.HDMI_DVDD_3V3"
        routingPhaseIndex={20}
      />
    ))}
    <trace name="U3_C53_GND" from=".C53 > .pin2" to="net.GND" width="0.2mm" routingPhaseIndex={16} />
    <trace name="U3_C54_GND" from=".C54 > .pin2" to="net.GND" width="0.2mm" routingPhaseIndex={16} />
    <trace name="U3_C55_GND" from=".C55 > .pin2" to="net.GND" width="0.2mm" routingPhaseIndex={16} />
    {[
      "DGND_16",
      "PGND",
      "TGND_20",
      "TGND_26",
      "TGND_32",
      "DGND_48",
      "DGND_64",
      "THERMAL_PAD",
    ].map((pin) => (
      <trace
        key={`U3_GND_${pin}`}
        name={`U3_GND_${pin}`}
        from={`.U3 > .${pin}`}
        to="net.GND"
        width="0.2mm"
        routingPhaseIndex={pin === "TGND_32" ? 20.34 : 16}
      />
    ))}
    <capacitor
      name="C56"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-34.5}
      pcbY={8}
    />
    <capacitor
      name="C57"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-37}
      pcbY={8}
    />
    <capacitor
      name="C58"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-35}
      pcbY={5.2}
    />
    <capacitor
      name="C59"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-37}
      pcbY={6.2}
    />
    <capacitor
      name="C60"
      capacitance="10nF"
      maxVoltageRating="10V"
      footprint="0402"
      pcbX={-39.5}
      pcbY={6.2}
    />
    <resistor
      name="R15"
      resistance="30k"
      footprint="0402"
      pcbX={-25}
      pcbY={11.5}
    />
    <resistor
      name="R16"
      resistance="10k"
      footprint="0402"
      pcbX={-27}
      pcbY={11.5}
    />
    <resistor
      name="R17"
      resistance="510"
      footprint="0402"
      pcbX={-42}
      pcbY={8}
    />
    <resistor
      name="R18"
      resistance="10k"
      footprint="0201"
      supplierPartNumbers={{ jlcpcb: ["C473048"] }}
      pcbX={-27.25}
      pcbY={8.2}
      pcbRotation={90}
    />
    <resistor
      name="R19"
      resistance="10k"
      footprint="0201"
      supplierPartNumbers={{ jlcpcb: ["C473048"] }}
      pcbX={-30.75}
      pcbY={8.2}
      pcbRotation={90}
    />
    <resistor
      name="R20"
      resistance="10k"
      footprint="0201"
      supplierPartNumbers={{ jlcpcb: ["C473048"] }}
      pcbX={-29.25}
      pcbY={8.2}
      pcbRotation={90}
    />
    <resistor
      name="R21"
      resistance="10k"
      footprint="0201"
      supplierPartNumbers={{ jlcpcb: ["C473048"] }}
      pcbX={-40}
      pcbY={8.2}
      pcbRotation={90}
    />
    <resistor
      name="R22"
      resistance="10k"
      footprint="0201"
      supplierPartNumbers={{ jlcpcb: ["C473048"] }}
      pcbX={-25.75}
      pcbY={8.2}
      pcbRotation={90}
    />
    {[
      {
        name: "U3_TVDD23_TO_C56",
        from: ".U3 > .TVDD_23",
        to: ".C56 > .pin1",
      },
      {
        name: "U3_TVDD29_TO_C57",
        from: ".U3 > .TVDD_29",
        to: ".C57 > .pin1",
      },
      {
        name: "U3_TVDD_C56_TO_C57",
        from: ".C56 > .pin1",
        to: ".C57 > .pin1",
      },
      {
        name: "U3_PVDD_TO_C58",
        from: ".U3 > .PVDD",
        to: ".C58 > .pin1",
      },
      {
        name: "U3_PVDD_C58_TO_C59",
        from: ".C58 > .pin1",
        to: ".C59 > .pin1",
      },
      {
        name: "U3_PVDD_C59_TO_C60",
        from: ".C59 > .pin1",
        to: ".C60 > .pin1",
      },
    ].map(({ name, from, to }) => (
      <trace
        key={name}
        name={name}
        from={from}
        to={to}
        routingPhaseIndex={20}
      />
    ))}
    {["C56", "C57", "C58", "C59", "C60"].map((name) => (
      <trace
        key={`U3_${name}_GND`}
        name={`U3_${name}_GND`}
        from={`.${name} > .pin2`}
        to="net.GND"
        width="0.2mm"
        routingPhaseIndex={16}
      />
    ))}
    <trace
      name="U3_VREF_DIVIDER_TOP"
      from=".R15 > .pin1"
      to="net.HDMI_DVDD_3V3"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_VREF_DIVIDER_MID"
      from=".R15 > .pin2"
      to="net.HDMI_VREF_0V825"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_VREF_DIVIDER_BOTTOM"
      from=".R16 > .pin1"
      to="net.HDMI_VREF_0V825"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_VREF"
      from=".U3 > .VREF"
      to="net.HDMI_VREF_0V825"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_VREF_GND"
      from=".R16 > .pin2"
      to="net.GND"
      routingPhaseIndex={16}
    />
    <trace
      name="U3_TFADJ"
      from=".U3 > .TFADJ"
      to=".R17 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_TFADJ_TVDD"
      from=".R17 > .pin2"
      to=".C56 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_EDGE_STRAP"
      from=".U3 > .EDGE_HTPLG"
      to=".R18 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_EDGE_PULLUP"
      from=".R18 > .pin2"
      to=".C54 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_BSEL_STRAP"
      from=".U3 > .BSEL_SCL"
      to=".R19 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_BSEL_PULLUP"
      from=".R19 > .pin2"
      to=".C54 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_ISEL_STRAP"
      from=".U3 > .ISEL_RST"
      to=".R20 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_ISEL_PULLDOWN"
      from=".R20 > .pin2"
      to="net.GND"
      routingPhaseIndex={16}
    />
    <trace
      name="U3_DSEL_STRAP"
      from=".U3 > .DSEL_SDA"
      to=".R21 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_DSEL_PULLDOWN"
      from=".R21 > .pin2"
      to="net.GND"
      routingPhaseIndex={16}
    />
    <trace
      name="U3_PD_STRAP"
      from=".U3 > .PD"
      to=".R22 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_PD_PULLUP"
      from=".R22 > .pin2"
      to=".C53 > .pin1"
      routingPhaseIndex={18}
    />
    <trace
      name="U3_DKEN_FIXED_LOW"
      from=".U3 > .DKEN"
      to="net.GND"
      routingPhaseIndex={16}
    />
    <trace
      name="U3_RESERVED_FIXED_LOW"
      from=".U3 > .RESERVED"
      to="net.GND"
      routingPhaseIndex={16}
    />
    <trace
      name="U3_IDCK_N_SINGLE_ENDED_LOW"
      from=".U3 > .IDCK_N"
      to="net.GND"
      routingPhaseIndex={16}
    />
    {["DATA0", "DATA1", "DATA2", "DATA8", "DATA9", "DATA16", "DATA17", "DATA18"].map(
      (pin) => (
        <trace
          key={`U3_${pin}_RGB565_LOW`}
          name={`U3_${pin}_RGB565_LOW`}
          from={`.U3 > .${pin}`}
          to="net.GND"
          routingPhaseIndex={16}
        />
      ),
    )}

    {[
      {
        bead: "FB1",
        capacitor: "C61",
        x: -22,
        target: ".C53 > .pin1",
      },
      {
        bead: "FB2",
        capacitor: "C62",
        x: -32,
        target: ".C56 > .pin1",
      },
      {
        bead: "FB3",
        capacitor: "C63",
        x: -40,
        target: ".C60 > .pin1",
      },
    ].map(({ bead, capacitor, x, target }) => (
      <Fragment key={`${bead}-${capacitor}-filter`}>
        <BLM18AG601SN1D
          name={bead}
          pcbX={x}
          pcbY={13}
          pcbRotation={90}
          noSchematicRepresentation
        />
        <capacitor
          name={capacitor}
          capacitance="1uF"
          maxVoltageRating="10V"
          footprint="0402"
          supplierPartNumbers={{ jlcpcb: ["C52923"] }}
          pcbX={x}
          pcbY={10.25}
          pcbRotation={90}
        />
        <trace
          name={`${bead}_FILTER_OUTPUT`}
          from={`.${bead} > .pin1`}
          to={`.${capacitor} > .pin1`}
          width="0.2mm"
          routingPhaseIndex={20}
        />
        <trace
          name={`${bead}_FILTERED_RAIL`}
          from={`.${capacitor} > .pin1`}
          to={target}
          width="0.2mm"
          routingPhaseIndex={20}
        />
        <trace
          name={`${capacitor}_GND`}
          from={`.${capacitor} > .pin2`}
          to="net.GND"
          width="0.3mm"
          routingPhaseIndex={16}
        />
      </Fragment>
    ))}
    <trace
      name="HDMI_3V3_FEED_DAISY_1"
      from=".FB1 > .pin2"
      to=".FB2 > .pin2"
      width="0.3mm"
      routingPhaseIndex={19}
    />
    <trace
      name="HDMI_3V3_FEED_DAISY_2"
      from=".FB2 > .pin2"
      to=".FB3 > .pin2"
      width="0.3mm"
      routingPhaseIndex={19}
    />
    <HDMI_001_19PCBTP
      name="J3"
      pcbX={-61}
      pcbY={0}
      pcbRotation={270}
    />
    <TPD12S521DBTR
      name="U4"
      pcbX={-48}
      pcbY={-0.5}
      pcbRotation={90}
    />
    {[
      "GND1",
      "TMDS_GND1",
      "TMDS_GND2",
      "TMDS_GND3",
      "TMDS_GND4",
      "TMDS_GND5",
      "TMDS_GND6",
      "TMDS_GND7",
      "TMDS_GND8",
      "GND2",
    ].map((pin) => (
      <trace
        key={`U4_${pin}_GND`}
        name={`U4_${pin}_GND`}
        from={`.U4 > .${pin}`}
        to="net.GND"
        width="0.2mm"
        routingPhaseIndex={16}
      />
    ))}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 1 && (
      <Fragment>
        <trace
          name="HDMI_TMDS_CLOCK_SOURCE_P"
          from=".X_TXC_P > .pin1"
          to=".U4 > .TMDS_CK_POS1"
          width="0.15mm"
          routingPhaseIndex={20.32}
        />
        <trace
          name="HDMI_TMDS_CLOCK_SOURCE_N"
          from=".X_TXC_N > .pin1"
          to=".U4 > .TMDS_CK_NEG1"
          width="0.15mm"
          routingPhaseIndex={20.32}
        />
        <bus
          name="HDMI_TMDS_CLOCK_SOURCE_BUS"
          connections={[
            "HDMI_TMDS_CLOCK_SOURCE_P",
            "HDMI_TMDS_CLOCK_SOURCE_N",
          ]}
          routingPhaseIndex={20.32}
          maxLengthSkew="0.2mm"
          targetImpedance="50ohm"
          pcbTraceWidth="0.15mm"
          preferredLayers={[...SIGNAL_LAYERS]}
        />
        <trace
          name="HDMI_TMDS_CLOCK_CONNECTOR_P"
          from=".U4 > .TMDS_CK_POS2"
          to=".J3 > .pin10"
          width="0.15mm"
        routingPhaseIndex={20.4}
        />
        <trace
          name="HDMI_TMDS_CLOCK_CONNECTOR_N"
          from=".U4 > .TMDS_CK_NEG2"
          to=".J3 > .pin12"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <differentialpair
          name="HDMI_TMDS_CLOCK_CONNECTOR"
          positiveConnection="HDMI_TMDS_CLOCK_CONNECTOR_P"
          negativeConnection="HDMI_TMDS_CLOCK_CONNECTOR_N"
          maxLengthSkew="0.2mm"
          targetDifferentialImpedance="100ohm"
          pcbTraceGap="0.15mm"
          maxUncoupledLength="3mm"
        />
      </Fragment>
    )}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 2 && (
      <Fragment>
        <trace
          name="HDMI_TMDS_DATA2_SOURCE_P"
          from=".X_TX2_P > .pin1"
          to=".U4 > .TMDS_D2_POS1"
          width="0.15mm"
          routingPhaseIndex={20.33}
        />
        <trace
          name="HDMI_TMDS_DATA2_SOURCE_N"
          from=".X_TX2_N > .pin1"
          to=".U4 > .TMDS_D2_NEG1"
          width="0.15mm"
          routingPhaseIndex={20.33}
        />
        <bus
          name="HDMI_TMDS_DATA2_SOURCE_BUS"
          connections={[
            "HDMI_TMDS_DATA2_SOURCE_P",
            "HDMI_TMDS_DATA2_SOURCE_N",
          ]}
          routingPhaseIndex={20.33}
          maxLengthSkew="0.2mm"
          targetImpedance="50ohm"
          pcbTraceWidth="0.15mm"
          preferredLayers={[...SIGNAL_LAYERS]}
        />
        <trace
          name="HDMI_TMDS_DATA2_CONNECTOR_P"
          from=".U4 > .TMDS_D2_POS2"
          to=".J3 > .pin1"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <trace
          name="HDMI_TMDS_DATA2_CONNECTOR_N"
          from=".U4 > .TMDS_D2_NEG2"
          to=".J3 > .pin3"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <differentialpair
          name="HDMI_TMDS_DATA2_CONNECTOR"
          positiveConnection="HDMI_TMDS_DATA2_CONNECTOR_P"
          negativeConnection="HDMI_TMDS_DATA2_CONNECTOR_N"
          maxLengthSkew="0.2mm"
          targetDifferentialImpedance="100ohm"
          pcbTraceGap="0.15mm"
          maxUncoupledLength="3mm"
        />
      </Fragment>
    )}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 3 && (
      <Fragment>
        <trace
          name="HDMI_TMDS_DATA1_SOURCE_P"
          from=".X_TX1_P > .pin1"
          to=".U4 > .TMDS_D1_POS1"
          width="0.15mm"
          routingPhaseIndex={20.3}
        />
        <trace
          name="HDMI_TMDS_DATA1_SOURCE_N"
          from=".X_TX1_N > .pin1"
          to=".U4 > .TMDS_D1_NEG1"
          width="0.15mm"
          routingPhaseIndex={20.3}
        />
        <bus
          name="HDMI_TMDS_DATA1_SOURCE_BUS"
          connections={[
            "HDMI_TMDS_DATA1_SOURCE_P",
            "HDMI_TMDS_DATA1_SOURCE_N",
          ]}
          routingPhaseIndex={20.3}
          maxLengthSkew="0.2mm"
          targetImpedance="50ohm"
          pcbTraceWidth="0.15mm"
          preferredLayers={[...SIGNAL_LAYERS]}
        />
        <trace
          name="HDMI_TMDS_DATA1_CONNECTOR_P"
          from=".U4 > .TMDS_D1_POS2"
          to=".J3 > .pin4"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <trace
          name="HDMI_TMDS_DATA1_CONNECTOR_N"
          from=".U4 > .TMDS_D1_NEG2"
          to=".J3 > .pin6"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <differentialpair
          name="HDMI_TMDS_DATA1_CONNECTOR"
          positiveConnection="HDMI_TMDS_DATA1_CONNECTOR_P"
          negativeConnection="HDMI_TMDS_DATA1_CONNECTOR_N"
          maxLengthSkew="0.2mm"
          targetDifferentialImpedance="100ohm"
          pcbTraceGap="0.15mm"
          maxUncoupledLength="3mm"
        />
      </Fragment>
    )}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 4 && (
      <Fragment>
        <trace
          name="HDMI_TMDS_DATA0_SOURCE_P"
          from=".X_TX0_P > .pin1"
          to=".U4 > .TMDS_D0_POS1"
          width="0.15mm"
          routingPhaseIndex={20.29}
        />
        <trace
          name="HDMI_TMDS_DATA0_SOURCE_N"
          from=".X_TX0_N > .pin1"
          to=".U4 > .TMDS_D0_NEG1"
          width="0.15mm"
          routingPhaseIndex={20.29}
        />
        <bus
          name="HDMI_TMDS_DATA0_SOURCE_BUS"
          connections={[
            "HDMI_TMDS_DATA0_SOURCE_P",
            "HDMI_TMDS_DATA0_SOURCE_N",
          ]}
          routingPhaseIndex={20.29}
          maxLengthSkew="0.2mm"
          targetImpedance="50ohm"
          pcbTraceWidth="0.15mm"
          preferredLayers={[...SIGNAL_LAYERS]}
        />
        <trace
          name="HDMI_TMDS_DATA0_CONNECTOR_P"
          from=".U4 > .TMDS_D0_POS2"
          to=".J3 > .pin7"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <trace
          name="HDMI_TMDS_DATA0_CONNECTOR_N"
          from=".U4 > .TMDS_D0_NEG2"
          to=".J3 > .pin9"
          width="0.15mm"
          routingPhaseIndex={20.4}
        />
        <differentialpair
          name="HDMI_TMDS_DATA0_CONNECTOR"
          positiveConnection="HDMI_TMDS_DATA0_CONNECTOR_P"
          negativeConnection="HDMI_TMDS_DATA0_CONNECTOR_N"
          maxLengthSkew="0.2mm"
          targetDifferentialImpedance="100ohm"
          pcbTraceGap="0.15mm"
          maxUncoupledLength="3mm"
        />
      </Fragment>
    )}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 5 && (
      <Fragment>
        <trace
          name="HDMI_DATA2_SHIELD_GND"
          from=".J3 > .pin2"
          to="net.GND"
          width="0.3mm"
        routingPhaseIndex={20.1}
        />
        <trace
          name="HDMI_DATA1_SHIELD_GND"
          from=".J3 > .pin5"
          to="net.GND"
          width="0.3mm"
          routingPhaseIndex={20.1}
        />
        <trace
          name="HDMI_DATA0_SHIELD_GND"
          from=".J3 > .pin8"
          to="net.GND"
          width="0.3mm"
        routingPhaseIndex={20.2}
        />
        <trace
          name="HDMI_CLOCK_SHIELD_GND"
          from=".J3 > .pin11"
          to="net.GND"
          width="0.3mm"
          routingPhaseIndex={20.2}
        />
      </Fragment>
    )}
    {ACTIVE_HDMI_OUTPUT_STAGE >= 6 && (
      <Fragment>
        <trace
          name="HDMI_DDC_CEC_GND"
          from=".J3 > .pin17"
          to="net.GND"
          width="0.3mm"
          routingPhaseIndex={16}
        />
        <trace
          name="HDMI_SHELL_GND_20"
          from=".J3 > .pin20"
          to="net.GND"
          width="0.6mm"
          routingPhaseIndex={16}
        />
        <trace
          name="HDMI_SHELL_GND_21"
          from=".J3 > .pin21"
          to="net.GND"
          width="0.6mm"
          routingPhaseIndex={16}
        />
        <trace
          name="HDMI_SHELL_GND_22"
          from=".J3 > .pin22"
          to="net.GND"
          width="0.6mm"
          routingPhaseIndex={16}
        />
        <trace
          name="HDMI_SHELL_GND_23"
          from=".J3 > .pin23"
          to="net.GND"
          width="0.6mm"
          routingPhaseIndex={16}
        />
      </Fragment>
    )}
    <silkscreentext
      text="HDMI OUT"
      pcbX={-64}
      pcbY={11}
      pcbRotation={90}
      fontSize="0.9mm"
      anchorAlignment="center"
    />
    <trace
      name="HDMI_3V3_BOUNDARY_FEED"
      from=".X_3V3 > .pin1"
      to=".FB1 > .pin2"
      width="0.3mm"
      routingPhaseIndex={19}
    />
  </subcircuit>
)