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/am62l-middle-channel.test.ts

import { expect, test } from "bun:test"
import type { SimpleRouteJson } from "@tscircuit/core"
import { solveAm62lMiddleChannel } from "../autorouting/am62l-middle-channel"

const createInput = (): SimpleRouteJson => ({
  layerCount: 8,
  minTraceWidth: 0.08,
  nominalTraceWidth: 0.08,
  minTraceToPadEdgeClearance: 0.05,
  bounds: { minX: -3, maxX: 3, minY: -2, maxY: 2 },
  obstacles: [],
  connections: [
    {
      name: "source_trace_0",
      source_trace_id: "source_trace_0",
      pointsToConnect: [
        { x: -1, y: -0.25, layer: "inner1", pointId: "left_0" },
        { x: 1, y: -0.25, layer: "inner1", pointId: "right_0" },
      ],
    },
    {
      name: "source_trace_1",
      source_trace_id: "source_trace_1",
      pointsToConnect: [
        { x: -1, y: 0.25, layer: "inner1", pointId: "left_1" },
        { x: 1, y: 0.25, layer: "inner1", pointId: "right_1" },
      ],
    },
    {
      name: "source_trace_2",
      source_trace_id: "source_trace_2",
      pointsToConnect: [
        { x: -1, y: -0.25, layer: "inner2", pointId: "left_2" },
        { x: 1, y: -0.25, layer: "inner2", pointId: "right_2" },
      ],
    },
  ],
  traces: [],
})

test("routes the synchronized middle channel without vias or endpoint changes", () => {
  const input = createInput()
  const result = solveAm62lMiddleChannel(input, () => {})

  expect(result.traces).toHaveLength(3)
  expect(result.outputSimpleRouteJson.connections).toEqual(input.connections)
  for (const trace of result.traces) {
    expect(trace.route).toHaveLength(2)
    expect(trace.route.every((point) => point.route_type === "wire")).toBe(true)
    expect(trace.route[0]!.layer).toBe(trace.route[1]!.layer)
    expect(trace.route[0]!.y).toBe(trace.route[1]!.y)
  }
})

test("rejects a same-layer channel clearance violation", () => {
  const input = createInput()
  input.connections[1]!.pointsToConnect[0]!.y = -0.15
  input.connections[1]!.pointsToConnect[1]!.y = -0.15
  expect(() => solveAm62lMiddleChannel(input, () => {})).toThrow(
    "trace clearance",
  )
})