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",
)
})