0hmX/mt53e1g16d1zw-footprint

This code defines the physical pin layout and 200-ball footprint of the Micron MT53E1G16D1ZW DDR4 SDRAM chip, including pad positions, signal assignments, and qualification of pin attributes for PCB integration.

Version
1.0.2
License
unset
Stars
0

MT53E1G16D1ZW.test.tsx

import { expect, test } from "bun:test"
import { Circuit } from "@tscircuit/core"
import {
  ballMap,
  MT53E1G16D1ZW,
  MT53E1G16D1ZW_DATASHEET_URL,
  pinAttributes,
} from "./lib/MT53E1G16D1ZW"

test("ZW footprint follows the Micron 200-ball package drawing", async () => {
  expect(ballMap).toHaveLength(200)
  expect(new Set(ballMap.map(({ ball }) => ball)).size).toBe(200)
  expect(ballMap.some(({ ball }) => /^[LM]/.test(ball))).toBe(false)
  expect(ballMap.some(({ ball }) => /(?:6|7)$/.test(ball))).toBe(false)

  const xs = ballMap.map(({ x }) => x)
  const ys = ballMap.map(({ y }) => y)
  expect(Math.max(...xs) - Math.min(...xs)).toBeCloseTo(8.8)
  expect(Math.max(...ys) - Math.min(...ys)).toBeCloseTo(13.65)
  expect(MT53E1G16D1ZW_DATASHEET_URL).toStartWith("https://")
  expect(pinAttributes.A3).toMatchObject({
    requiresGround: true,
  })
  expect(pinAttributes.A4).toMatchObject({
    requiresPower: true,
    requiresVoltage: "1.1V",
    shouldHaveDecouplingCapacitor: true,
  })
  expect(pinAttributes.A1).toMatchObject({ doNotConnect: true })
  expect(pinAttributes.A8).toEqual({ includeInBoardPinout: false })
  expect(ballMap.filter(({ signal }) => signal === "DNU")).toHaveLength(12)
  expect(ballMap.filter(({ signal }) => signal === "NC")).toHaveLength(43)
  expect(ballMap.filter(({ signal }) => signal === "VSS")).toHaveLength(58)
  expect(ballMap.filter(({ signal }) => signal === "VDD1")).toHaveLength(8)
  expect(ballMap.filter(({ signal }) => signal === "VDD2")).toHaveLength(24)
  expect(ballMap.filter(({ signal }) => signal === "VDDQ")).toHaveLength(20)

  const circuit = new Circuit()
  circuit.add(
    <board width="18mm" height="22mm" routingDisabled>
      <MT53E1G16D1ZW name="U1" />
    </board>,
  )
  await circuit.renderUntilSettled()

  const json = circuit.getCircuitJson() as any[]
  expect(json.filter(({ type }) => type === "pcb_smtpad")).toHaveLength(200)
  expect(json.filter(({ type }) => type.endsWith("_error"))).toEqual([])

  const ports = json.filter(({ type }) => type === "source_port")
  const port = (name: string) => ports.find((item) => item.name === name)
  expect(port("A1")?.do_not_connect).toBe(true)
  expect(port("A3")?.requires_ground).toBe(true)
  expect(port("A4")?.requires_power).toBe(true)
  expect(port("B2")?.port_hints).toContain("DQ0")
  expect(port("T11")?.port_hints).toContain("RESET_n")
})