astra/f1c100s

The code defines the physical pin layout, labels, and footprint for the F1C100S system-on-chip (SoC) component used in electronic devices.

Version
0.9.2
License
unset
Stars
0

src/UnroutedModule.tsx

import { BreakoutTestPoint } from "./BreakoutTestPoint";
import { ClockCrystal } from "./ClockCrystal";
import { F1C100S } from "../imports/F1C100S";
import { makeLayout } from "./layout";
import type { LayoutProfile } from "./profiles";

export function UnroutedModule({
	layoutProfile,
}: {
	layoutProfile: LayoutProfile;
}) {
	const layout = makeLayout(layoutProfile);
	return (
		<group name="MODULE" pcbX={0} pcbY={0}>
			<F1C100S
				name="U1"
				pcbRotation={layout.rotation}
				schX={0}
				schY={0}
				schWidth={14}
				schHeight={24}
			/>
			<ClockCrystal placement={layout.crystal} />
			{layout.terminals.map((t) => (
				<BreakoutTestPoint key={t.name} terminal={t} />
			))}
			{layout.passives.map((p, i) =>
				p.kind === "capacitor" ? (
					<capacitor
						key={p.name}
						name={p.name}
						capacitance={p.value}
						maxVoltageRating={p.name.startsWith("C_OSC") ? 50 : 6.3}
						manufacturerPartNumber={
							p.name.startsWith("C_OSC") ? "GRM1555C1H180JA01D" : undefined
						}
						footprint="0402"
						layer="top"
						pcbX={p.x}
						pcbY={p.y}
						pcbRotation={p.rotation}
						schX={-22 + (i % 5) * 3}
						schY={18 - Math.floor(i / 5) * 3}
					/>
				) : (
					<resistor
						key={p.name}
						name={p.name}
						resistance={p.value}
						pcbRotation={p.rotation}
						footprint="0402"
						layer="top"
						pcbX={p.x}
						pcbY={p.y}
						schX={-22 + (i % 5) * 3}
						schY={18 - Math.floor(i / 5) * 3}
					/>
				),
			)}
			{/* maxLength bounds the aggregate multi-terminal rail tree. It is not a
        decoupling-loop constraint; power impedance still needs board-level review. */}
			{Object.entries(layout.nets).map(([name, ports]) => (
				<trace
					key={name}
					name={`N_${name}`}
					path={ports}
					thickness={0.12}
					maxLength={1000}
				/>
			))}
		</group>
	);
}