0hmX/am3352-ddr-track-b-byte0-wip-20261007
Partial full-board preview: 11 of 47 DDR signal nets routed; power and interfaces incomplete. Fabrication and electrical release blocked.
- Version
- 0.0.1
- License
- unset
- Stars
- 0
index.tsx
import { Cpu, DdrMemory } from "./bga"
import cpuNets from "./contracts/cpu-nets.json"
import { ddrConnections, ramConnections, ramNoConnect } from "./ddr-nets"
import { DdrRouting } from "./ddr-routing"
import { Support } from "./support"
import { stackup } from "./stackup"
import { SavedByte0Routing, savedByte0Nets } from "./saved-byte0"
import { ReferencePlanes, byte0DdrRegion } from "./planes"
import { PmicThermalVias } from "./pmic-footprint"
import { SavedDqRouting, savedDqNets, DdrPlaneFeed } from "./saved-dq"
import matchedDqPaths from "./contracts/matched-dq-paths.json"
export default function Board({ routeDdr = false, ddrOnly = false, byte0Only = false, savedDq = false, matchedDq = false, savedByte0 = false }: { routeDdr?: boolean; ddrOnly?: boolean; byte0Only?: boolean; savedDq?: boolean; matchedDq?: boolean; savedByte0?: boolean } = {}) {
savedDq ||= matchedDq || savedByte0
const ownedDdrNets = routeDdr ? new Set(ddrConnections.map(connection => connection.net)) : savedByte0 ? savedByte0Nets : savedDqNets
const cpuConnections = Object.fromEntries(Object.entries(cpuNets)
.filter(([, net]) => !(routeDdr || savedDq) || !ownedDdrNets.has(net)).map(([ball, net]) => [ball, `net.${net}`]))
const memoryConnections = Object.fromEntries(Object.entries(ramConnections)
.filter(([, net]) => !(routeDdr || savedDq) || !ownedDdrNets.has(net.slice(4))))
return <board width={110} height={100} layers={8} thickness={stackup.thicknessMm}
title="AM3352 track B — placement and DDR routing study; release gates open"
doubleSidedAssembly routingDisabled={!routeDdr} routeRemaining={false} schAutoLayoutEnabled={false}
minTraceWidth={0.1016} minPadEdgeToPadEdgeClearance={0.15} minTraceToPadEdgeClearance={0.1} minTraceToHoleEdgeClearance={0.2}
minViaPadDiameter={0.4} minViaHoleDiameter={0.2}
pcbStyle={{ viaPadDiameter: 0.4, viaHoleDiameter: 0.2 }}>
<Cpu name="U_CPU" pcbX={-18} pcbY={15} noSchematicRepresentation
connections={ddrOnly ? undefined : cpuConnections} />
<DdrMemory name="U_DDR" pcbX={-18} pcbY={-8} pcbRotation={270} noSchematicRepresentation
connections={ddrOnly ? undefined : memoryConnections} noConnect={ramNoConnect} />
{routeDdr && <DdrRouting byte0Only={byte0Only} />}
{savedDq && <>{savedByte0 ? <SavedByte0Routing /> : <SavedDqRouting paths={matchedDq ? matchedDqPaths : undefined} />}<DdrPlaneFeed /></>}
{matchedDq && !savedByte0 && <bus name="SAVED_DDR_BYTE0" connections={matchedDqPaths.map(path => `SAVED_${path.net}`)}
maxLengthSkew={0.635} pcbTraceWidth={stackup.l3SingleEnded50OhmWidthMm} pcbAllowedLayers={["inner2"]} />}
{!ddrOnly && <Support byte0={savedByte0} />}
{!ddrOnly && <PmicThermalVias x={15} y={26} />}
{!ddrOnly && <ReferencePlanes region={savedByte0 ? byte0DdrRegion : undefined} />}
<pcbnotetext pcbX={-18} pcbY={-19} text="DDR keepout: continuous GND references, L5 DDR1V5 plane required" fontSize={0.8} />
<pcbnotetext pcbX={0} pcbY={47} text="TRACK B | JLC08161H-2116 | RESEARCH / NOT FOR FABRICATION" fontSize={0.9} />
</board>
}