0hmX/am62l-lpddr4-ti-pth-router

This code defines a hardware-oriented React/TypeScript setup for a PCB breakout circuit featuring an AM62L LPDDR4 interface, including detailed PCB component placement, routing algorithms, and validation scripts for DDR connections, via placement, and manufacturing constraints.

Version
1.0.1
License
unset
Stars
0

tests/package-land-geometry.test.ts

import { expect, test } from "bun:test"
import {
  Children,
  isValidElement,
  type ReactElement,
  type ReactNode,
} from "react"
import { AM62L32_TI_LAND } from "../components/am62l32-ti-land"
import { MT53E1G16D1ZW_NSMD } from "../components/mt53e1g16d1zw-nsmd"

const collectPads = (node: ReactNode): ReactElement<any>[] => {
  const pads: ReactElement<any>[] = []
  Children.forEach(node, (child) => {
    if (!isValidElement<any>(child)) return
    if (child.type === "smtpad") pads.push(child)
    pads.push(...collectPads(child.props.children))
  })
  return pads
}

test("uses TI SPRADI2 10 mil AM62L copper lands and 12 mil mask openings", () => {
  const chip = AM62L32_TI_LAND({ name: "U1" } as any)
  const pads = collectPads(chip.props.footprint)

  expect(pads.length).toBeGreaterThanOrEqual(373)
  for (const pad of pads) {
    expect(pad.props.radius).toBe("0.127mm")
    expect(pad.props.solderMaskMargin).toBe("0.0254mm")
  }
})

test("uses Micron CSN-33 0.32 mm NSMD RAM copper lands", () => {
  const chip = MT53E1G16D1ZW_NSMD({ name: "U2" } as any) as ReactElement<any>
  const pads = collectPads(chip.props.footprint)

  expect(pads).toHaveLength(200)
  for (const pad of pads) {
    expect(pad.props.radius).toBe("0.16mm")
    expect(pad.props.solderMaskMargin).toBe("0.04mm")
  }
})