seveibar/adm6-breakout
This code defines PCB designs featuring a 60-pin fanout or direct routing layout with multiple signal and power layers, test pads, and component footprints for a high-density electronic breakout board.
- Version
- 1.0.2
- License
- unset
- Stars
- 0
adm6-no-fanout.circuit.tsx
import { Fragment } from "react"
import { ADM6_60_03_5_L_4_0_A_TR } from "./imports/ADM6_60_03_5_L_4_0_A_TR"
const CONTACTS_PER_ROW = 60
const CONTACT_PITCH_MM = 0.635
const padName = (row: string, position: number) =>
`${row}${String(position).padStart(2, "0")}`
const pinLabelsForRow = (row: string) =>
Object.fromEntries(
Array.from({ length: CONTACTS_PER_ROW }, (_, index) => [
`pin${index + 1}`,
[padName(row, index + 1)],
]),
)
const TestPadRow = ({
name,
row,
pcbY,
}: {
name: string
row: "A" | "B" | "C" | "D"
pcbY: number
}) => (
<chip
name={name}
displayName={`ADM6 row ${row} direct-route pads`}
noSchematicRepresentation
pcbX={0}
pcbY={pcbY}
pinLabels={pinLabelsForRow(row)}
footprint={
<footprint name={`ADM6_ROW_${row}_DIRECT_ROUTE_PADS`}>
{Array.from({ length: CONTACTS_PER_ROW }, (_, index) => (
<Fragment key={`${row}-pad-${index + 1}`}>
<smtpad
pcbX={((CONTACTS_PER_ROW - 1) / 2 - index) * CONTACT_PITCH_MM}
pcbY={0}
width="0.3mm"
height="0.3mm"
shape="rect"
layer="top"
portHints={[`pin${index + 1}`]}
/>
</Fragment>
))}
</footprint>
}
/>
)
const rows = [
{ row: "A", pads: "EA", y: 9.25 },
{ row: "B", pads: "EB", y: 7 },
{ row: "C", pads: "EC", y: -7 },
{ row: "D", pads: "ED", y: -9.25 },
] as const
export default () => (
<board
title="ADM6-60 direct autoroute without fanout"
width="84mm"
height="28mm"
borderRadius="2mm"
layers={8}
allowBlindAndBuriedVias
schematicDisabled
autorouter="auto-local"
autorouterEffortLevel="1x"
minTraceWidth="0.1mm"
defaultTraceWidth="0.1mm"
minTraceToPadEdgeClearance="0.08mm"
minPadEdgeToPadEdgeClearance="0.08mm"
minViaEdgeToPadEdgeClearance="0.08mm"
minViaHoleEdgeToViaHoleEdgeClearance="0.1mm"
minViaHoleDiameter="0.2mm"
minViaPadDiameter="0.45mm"
>
<ADM6_60_03_5_L_4_0_A_TR name="J1" pcbX={0} pcbY={0} />
{rows.map(({ row, pads, y }) => (
<TestPadRow key={row} name={pads} row={row} pcbY={y} />
))}
{rows.flatMap(({ row, pads }) =>
Array.from({ length: CONTACTS_PER_ROW }, (_, index) => {
const contact = padName(row, index + 1)
return (
<Fragment key={`${row}-${contact}`}>
<trace
name={`DIRECT_${row}_${String(index + 1).padStart(2, "0")}`}
from={`.J1 > .${contact}`}
to={`.${pads} > .${contact}`}
/>
</Fragment>
)
}),
)}
<silkscreentext
text="ADM6-60 240-CONTACT DIRECT AUTOROUTE"
fontSize="1mm"
pcbX={0}
pcbY={12.25}
/>
</board>
)