Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import { MultipleHighDensityRouteStitchSolver } from "../../solvers/RouteStitchi
import { SingleLayerNodeMergerSolver } from "../../solvers/SingleLayerNodeMerger/SingleLayerNodeMergerSolver"
import { StrawSolver } from "../../solvers/StrawSolver/StrawSolver"
import { TraceKeepoutSolver } from "../../solvers/TraceKeepoutSolver/TraceKeepoutSolver"
import { TraceMarginDrcRepairSolver } from "../../solvers/TraceMarginDrcRepairSolver/TraceMarginDrcRepairSolver"
import { TraceSimplificationSolver } from "../../solvers/TraceSimplificationSolver/TraceSimplificationSolver"
import { TraceWidthSolver } from "../../solvers/TraceWidthSolver/TraceWidthSolver"
import { getColorMap } from "../../solvers/colors"
Expand Down Expand Up @@ -117,6 +118,7 @@ export class AssignableAutoroutingPipeline2 extends BaseSolver {
traceSimplificationSolver?: TraceSimplificationSolver
traceKeepoutSolver?: TraceKeepoutSolver
traceWidthSolver?: TraceWidthSolver
traceMarginDrcRepairSolver?: TraceMarginDrcRepairSolver
availableSegmentPointSolver?: AvailableSegmentPointSolver
portPointPathingSolver?: PortPointPathingSolver
multiSectionPortPointOptimizer?: MultiSectionPortPointOptimizer
Expand Down Expand Up @@ -391,6 +393,22 @@ export class AssignableAutoroutingPipeline2 extends BaseSolver {
layerCount: cms.srj.layerCount,
},
]),
definePipelineStep(
"traceMarginDrcRepairSolver",
TraceMarginDrcRepairSolver,
(cms) => [
{
hdRoutes:
cms.traceWidthSolver?.hdRoutesWithWidths ??
cms.traceKeepoutSolver?.redrawnHdRoutes ??
[],
srj: cms.srjWithPointPairs ?? cms.srj,
minTraceWidth: cms.minTraceWidth,
obstacleMargin: cms.srj.defaultObstacleMargin ?? 0.15,
colorMap: cms.colorMap,
},
],
),
]

constructor(
Expand Down Expand Up @@ -504,6 +522,7 @@ export class AssignableAutoroutingPipeline2 extends BaseSolver {
const traceSimplificationViz = this.traceSimplificationSolver?.visualize()
const traceKeepoutViz = this.traceKeepoutSolver?.visualize()
const traceWidthViz = this.traceWidthSolver?.visualize()
const traceMarginDrcRepairViz = this.traceMarginDrcRepairSolver?.visualize()
const problemOutline = this.srj.outline
const problemLines: Line[] = []

Expand Down Expand Up @@ -595,6 +614,7 @@ export class AssignableAutoroutingPipeline2 extends BaseSolver {
traceSimplificationViz,
traceKeepoutViz,
traceWidthViz,
traceMarginDrcRepairViz,
this.solved
? combineVisualizations(
problemViz,
Expand Down Expand Up @@ -662,6 +682,7 @@ export class AssignableAutoroutingPipeline2 extends BaseSolver {

_getOutputHdRoutes(): HighDensityRoute[] {
return (
this.traceMarginDrcRepairSolver?.repairedHdRoutes ??
this.traceWidthSolver?.hdRoutesWithWidths ??
this.traceKeepoutSolver?.redrawnHdRoutes ??
this.traceSimplificationSolver?.simplifiedHdRoutes ??
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,12 @@ export type UnifiedHighDensityRoute =
*/
function convertJumperRouteToStandard(
route: HighDensityIntraNodeRouteWithJumpers,
capacityMeshNodeId: string,
): HighDensityIntraNodeRoute & {
jumpers?: HighDensityIntraNodeRouteWithJumpers["jumpers"]
} {
return {
capacityMeshNodeId,
connectionName: route.connectionName,
rootConnectionName: route.rootConnectionName,
traceThickness: route.traceThickness,
Expand Down Expand Up @@ -473,7 +475,12 @@ export class JumperHighDensitySolver extends BaseSolver {
if (currentSolver.solved) {
// Convert jumper routes to unified format and collect
for (const jumperRoute of currentSolver.solvedRoutes) {
this.routes.push(convertJumperRouteToStandard(jumperRoute))
this.routes.push(
convertJumperRouteToStandard(
jumperRoute,
currentSolver.nodeWithPortPoints.capacityMeshNodeId,
),
)
}

// Collect all jumpers from the solver (SRJ format with connectedTo populated)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,8 @@ export class SimpleHighDensitySolver extends BaseSolver {
}

_finalizeRoutesForCurrentNode() {
const node = this.currentNode!

for (const routeInProgress of this.routesInProgress) {
const {
connectionName,
Expand Down Expand Up @@ -667,6 +669,7 @@ export class SimpleHighDensitySolver extends BaseSolver {
routePointList.push({ x: endPoint.x, y: endPoint.y, z: endPoint.z })

const route: HighDensityIntraNodeRoute = {
capacityMeshNodeId: node.capacityMeshNodeId,
connectionName,
rootConnectionName,
traceThickness: this.traceWidth,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { CapacityMeshNodeSolver2_NodeUnderObstacle } from "../../solvers/Capacit
import { CapacityNodeTargetMerger } from "../../solvers/CapacityNodeTargetMerger/CapacityNodeTargetMerger"
import { DeadEndSolver } from "../../solvers/DeadEndSolver/DeadEndSolver"
import { HighDensitySolver } from "../../solvers/HighDensitySolver/HighDensitySolver"
import { HighDensityRepairSolver } from "../../solvers/HighDensityRepairSolver/HighDensityRepairSolver"
import { MultiSectionPortPointOptimizer } from "../../solvers/MultiSectionPortPointOptimizer"
import { NetToPointPairsSolver } from "../../solvers/NetToPointPairsSolver/NetToPointPairsSolver"
import { NetToPointPairsSolver2_OffBoardConnection } from "../../solvers/NetToPointPairsSolver2_OffBoardConnection/NetToPointPairsSolver2_OffBoardConnection"
Expand All @@ -37,6 +38,7 @@ import { MultipleHighDensityRouteStitchSolver } from "../../solvers/RouteStitchi
import { SingleLayerNodeMergerSolver } from "../../solvers/SingleLayerNodeMerger/SingleLayerNodeMergerSolver"
import { StrawSolver } from "../../solvers/StrawSolver/StrawSolver"
import { TraceSimplificationSolver } from "../../solvers/TraceSimplificationSolver/TraceSimplificationSolver"
import { TraceMarginDrcRepairSolver } from "../../solvers/TraceMarginDrcRepairSolver/TraceMarginDrcRepairSolver"
import { TraceWidthSolver } from "../../solvers/TraceWidthSolver/TraceWidthSolver"
import { getColorMap } from "../../solvers/colors"
import type {
Expand Down Expand Up @@ -102,6 +104,7 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
edgeSolver?: CapacityMeshEdgeSolver
colorMap: Record<string, string>
highDensityRouteSolver?: HighDensitySolver
highDensityRepairSolver?: HighDensityRepairSolver
highDensityStitchSolver?: MultipleHighDensityRouteStitchSolver
singleLayerNodeMerger?: SingleLayerNodeMergerSolver
strawSolver?: StrawSolver
Expand All @@ -112,6 +115,7 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
multiSectionPortPointOptimizer?: MultiSectionPortPointOptimizer
uniformPortDistributionSolver?: UniformPortDistributionSolver
traceWidthSolver?: TraceWidthSolver
traceMarginDrcRepairSolver?: TraceMarginDrcRepairSolver
viaDiameter: number
minTraceWidth: number
effort: number
Expand Down Expand Up @@ -349,13 +353,31 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
effort: cms.effort,
},
]),
definePipelineStep(
"highDensityRepairSolver",
HighDensityRepairSolver,
(cms) => [
{
nodePortPoints:
cms.uniformPortDistributionSolver?.getOutput() ??
cms.multiSectionPortPointOptimizer?.getNodesWithPortPoints() ??
cms.portPointPathingSolver?.getNodesWithPortPoints() ??
[],
obstacles: cms.srj.obstacles,
hdRoutes: cms.highDensityRouteSolver!.routes,
connMap: cms.connMap,
},
],
),
definePipelineStep(
"highDensityStitchSolver",
MultipleHighDensityRouteStitchSolver,
(cms) => [
{
connections: cms.srjWithPointPairs!.connections,
hdRoutes: cms.highDensityRouteSolver!.routes,
hdRoutes:
cms.highDensityRepairSolver?.repairedHdRoutes ??
cms.highDensityRouteSolver!.routes,
colorMap: cms.colorMap,
layerCount: cms.srj.layerCount,
defaultViaDiameter: cms.viaDiameter,
Expand Down Expand Up @@ -391,6 +413,22 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
},
]
}),
definePipelineStep(
"traceMarginDrcRepairSolver",
TraceMarginDrcRepairSolver,
(cms) => [
{
hdRoutes:
cms.traceWidthSolver?.getHdRoutesWithWidths() ??
cms.traceSimplificationSolver?.simplifiedHdRoutes ??
cms.highDensityStitchSolver!.mergedHdRoutes,
srj: cms.srjWithPointPairs ?? cms.srj,
minTraceWidth: cms.minTraceWidth,
obstacleMargin: cms.srj.defaultObstacleMargin ?? 0.15,
colorMap: cms.colorMap,
},
],
),
]

constructor(
Expand Down Expand Up @@ -499,8 +537,10 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
const uniformPortDistributionViz =
this.uniformPortDistributionSolver?.visualize()
const highDensityViz = this.highDensityRouteSolver?.visualize()
const highDensityRepairViz = this.highDensityRepairSolver?.visualize()
const highDensityStitchViz = this.highDensityStitchSolver?.visualize()
const traceSimplificationViz = this.traceSimplificationSolver?.visualize()
const traceMarginDrcRepairViz = this.traceMarginDrcRepairSolver?.visualize()
const problemOutline = this.srj.outline
const problemLines: Line[] = []

Expand Down Expand Up @@ -574,8 +614,10 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
multiSectionOptViz,
uniformPortDistributionViz,
highDensityViz ? combineVisualizations(problemViz, highDensityViz) : null,
highDensityRepairViz,
highDensityStitchViz,
traceSimplificationViz,
traceMarginDrcRepairViz,
this.solved
? combineVisualizations(
problemViz,
Expand All @@ -597,6 +639,26 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
* 3. High Density Route Solver Output, max 200 lines
*/
preview(): GraphicsObject {
if (this.highDensityRepairSolver) {
const lines: Line[] = []
for (
let i = this.highDensityRepairSolver.repairedHdRoutes.length - 1;
i >= 0;
i--
) {
const route = this.highDensityRepairSolver.repairedHdRoutes[i]
lines.push({
points: route.route.map((n) => ({
x: n.x,
y: n.y,
})),
strokeColor: this.colorMap[route.connectionName],
})
if (lines.length > 200) break
}
return { lines }
}

if (this.highDensityRouteSolver) {
const lines: Line[] = []
for (let i = this.highDensityRouteSolver.routes.length - 1; i >= 0; i--) {
Expand Down Expand Up @@ -639,6 +701,7 @@ export class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {

_getOutputHdRoutes(): HighDensityRoute[] {
return (
this.traceMarginDrcRepairSolver?.repairedHdRoutes ??
this.traceWidthSolver?.getHdRoutesWithWidths() ??
this.traceSimplificationSolver?.simplifiedHdRoutes ??
this.highDensityStitchSolver!.mergedHdRoutes
Expand Down
21 changes: 9 additions & 12 deletions lib/data-structures/HighDensityRouteSpatialIndex.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { doSegmentsIntersect, Point3 } from "@tscircuit/math-utils" // Assuming this is available and correct
import type { Jumper } from "lib/types/high-density-types"
import type {
HighDensityIntraNodeRoute,
HighDensityRoute,
Jumper,
} from "lib/types/high-density-types"
export type {
HighDensityIntraNodeRoute,
HighDensityRoute,
} from "lib/types/high-density-types"

// --- Interfaces and Types (Unchanged) ---

Expand All @@ -13,17 +21,6 @@ type Point2D = { x: number; y: number } // Use Point2D for clarity in calculatio

type Segment = [Point, Point]

export type HighDensityIntraNodeRoute = {
connectionName: string // Assuming this is unique per route
rootConnectionName?: string // Parent connection for merged routes
traceThickness: number
viaDiameter: number // Now used in conflict calculation
route: Array<{ x: number; y: number; z: number; insideJumperPad?: boolean }>
vias: Array<{ x: number; y: number }> // Will be indexed
jumpers?: Jumper[]
}
export type HighDensityRoute = HighDensityIntraNodeRoute

// --- Utility Functions (Unchanged) ---

const getSegmentBounds = (segment: Segment) => {
Expand Down
1 change: 1 addition & 0 deletions lib/solvers/CurvyIntraNodeSolver/CurvyIntraNodeSolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ export class CurvyIntraNodeSolver extends BaseSolver {
if (!info) continue

const route: HighDensityIntraNodeRoute = {
capacityMeshNodeId: node.capacityMeshNodeId,
connectionName: info.connectionName,
rootConnectionName: info.rootConnectionName,
traceThickness: this.traceWidth,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,7 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
}))

this.solvedRoutes.push({
capacityMeshNodeId: this.nodeWithPortPoints.capacityMeshNodeId,
connectionName,
rootConnectionName,
traceThickness: this.traceWidth,
Expand Down
Loading
Loading