Skip to content

Commit 6d275af

Browse files
committed
p1
1 parent c73a827 commit 6d275af

File tree

16 files changed

+124
-61
lines changed

16 files changed

+124
-61
lines changed

lib/solvers/FixedTopologyHighDensityIntraNodeSolver/FixedTopologyHighDensityIntraNodeSolver.ts

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
type ViaTile,
88
ViaGraphSolver,
99
createConvexViaGraphFromXYConnections,
10+
viaTile as defaultViaTile,
1011
} from "@tscircuit/hypergraph"
1112
import { ConnectivityMap } from "circuit-json-to-connectivity-map"
1213
import type {
@@ -32,6 +33,7 @@ export interface FixedTopologyHighDensityIntraNodeSolverParams {
3233
nodeWithPortPoints: NodeWithPortPoints
3334
colorMap?: Record<string, string>
3435
traceWidth?: number
36+
viaDiameter?: number
3537
connMap?: ConnectivityMap
3638
}
3739

@@ -48,6 +50,8 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
4850
nodeWithPortPoints: NodeWithPortPoints
4951
colorMap: Record<string, string>
5052
traceWidth: number
53+
viaDiameter: number
54+
viaTile: ViaTile
5155
connMap?: ConnectivityMap
5256

5357
rootConnectionNameByConnectionId: Map<string, string | undefined> = new Map()
@@ -63,6 +67,8 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
6367
this.nodeWithPortPoints = params.nodeWithPortPoints
6468
this.colorMap = params.colorMap ?? {}
6569
this.traceWidth = params.traceWidth ?? 0.15
70+
this.viaTile = defaultViaTile
71+
this.viaDiameter = this._resolveViaDiameter(params.viaDiameter)
6672
this.connMap = params.connMap
6773
this.MAX_ITERATIONS = 1e6
6874

@@ -76,6 +82,24 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
7682
return this.constructorParams
7783
}
7884

85+
private _getViaTileDiameter(viaTile: ViaTile): number {
86+
for (const vias of Object.values(viaTile.viasByNet)) {
87+
if (vias.length > 0) return vias[0].diameter
88+
}
89+
return 0.3
90+
}
91+
92+
private _resolveViaDiameter(requestedViaDiameter?: number): number {
93+
const viaTileDiameter = this._getViaTileDiameter(this.viaTile)
94+
if (
95+
requestedViaDiameter !== undefined &&
96+
Math.abs(requestedViaDiameter - viaTileDiameter) <= 1e-6
97+
) {
98+
return requestedViaDiameter
99+
}
100+
return viaTileDiameter
101+
}
102+
79103
private _initializeGraph(): ViaGraphSolver | null {
80104
// Build connections from port points
81105
const connectionMap = new Map<
@@ -113,7 +137,15 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
113137
}
114138
if (inputConnections.length === 0) return null
115139

116-
const convexGraph = createConvexViaGraphFromXYConnections(inputConnections)
140+
const convexGraph = createConvexViaGraphFromXYConnections(
141+
inputConnections,
142+
this.viaTile,
143+
{
144+
// Keep hypergraph's newer tile topology, but scale obstacle clearance
145+
// up when autorouter trace widths are larger than the default baseline.
146+
clearance: Math.max(0.1, this.traceWidth / 2),
147+
},
148+
)
117149
this.tiledViasByNet = convexGraph.viaTile.viasByNet ?? {}
118150

119151
return new ViaGraphSolver({
@@ -541,7 +573,7 @@ export class FixedTopologyHighDensityIntraNodeSolver extends BaseSolver {
541573
? Math.max(
542574
...routeViaRegions.map((viaRegion) => viaRegion.diameter),
543575
)
544-
: 0.6,
576+
: this.viaDiameter,
545577
route: routePoints,
546578
vias: routeVias,
547579
viaRegions: routeViaRegions,

lib/solvers/HighDensitySolver/HighDensityHyperParameters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,6 @@ export interface HighDensityHyperParameters {
5151

5252
// Minimum travel distance before allowing jumper neighbors
5353
MIN_TRAVEL_BEFORE_JUMPER?: number // mm - default: 3
54+
55+
FIXED_TOPOLOGY_HIGH_DENSITY_INTRA_NODE_SOLVER?: boolean
5456
}

lib/solvers/HyperHighDensitySolver/HyperSingleIntraNodeSolver.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ import { SingleTransitionIntraNodeSolver } from "../HighDensitySolver/SingleTran
1515
import { MultiHeadPolyLineIntraNodeSolver2 } from "../HighDensitySolver/MultiHeadPolyLineIntraNodeSolver/MultiHeadPolyLineIntraNodeSolver2_Optimized"
1616
import { MultiHeadPolyLineIntraNodeSolver3 } from "../HighDensitySolver/MultiHeadPolyLineIntraNodeSolver/MultiHeadPolyLineIntraNodeSolver3_ViaPossibilitiesSolverIntegration"
1717
import { HighDensitySolverA01 } from "@tscircuit/high-density-a01"
18+
import { FixedTopologyHighDensityIntraNodeSolver } from "../FixedTopologyHighDensityIntraNodeSolver"
1819

1920
export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
2021
| IntraNodeRouteSolver
2122
| TwoCrossingRoutesHighDensitySolver
2223
| SingleTransitionCrossingRouteSolver
2324
| SingleTransitionIntraNodeSolver
25+
| FixedTopologyHighDensityIntraNodeSolver
2426
> {
2527
override getSolverName(): string {
2628
return "HyperSingleIntraNodeSolver"
@@ -53,6 +55,7 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
5355
["closedFormSingleTrace"],
5456
// ["closedFormTwoTrace"],
5557
["highDensityA01"],
58+
["fixedTopologyHighDensityIntraNodeSolver"],
5659
]
5760
}
5861

@@ -183,6 +186,14 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
183186
},
184187
],
185188
},
189+
{
190+
name: "fixedTopologyHighDensityIntraNodeSolver",
191+
possibleValues: [
192+
{
193+
FIXED_TOPOLOGY_HIGH_DENSITY_INTRA_NODE_SOLVER: true,
194+
},
195+
],
196+
},
186197
]
187198
}
188199

@@ -249,6 +260,15 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
249260
viaDiameter: this.constructorParams.viaDiameter,
250261
}) as any
251262
}
263+
if (hyperParameters.FIXED_TOPOLOGY_HIGH_DENSITY_INTRA_NODE_SOLVER) {
264+
return new FixedTopologyHighDensityIntraNodeSolver({
265+
nodeWithPortPoints: this.nodeWithPortPoints,
266+
connMap: this.connMap,
267+
colorMap: this.constructorParams.colorMap,
268+
viaDiameter: this.constructorParams.viaDiameter,
269+
traceWidth: this.constructorParams.traceWidth,
270+
}) as any
271+
}
252272
return new CachedIntraNodeRouteSolver({
253273
...this.constructorParams,
254274
hyperParameters,

lib/testing/utils/convertToCircuitJson.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ function extractViasFromRoutes(
397397
// Extract vias from HighDensityRoutes by looking for layer changes
398398
;(routes as HighDensityRoute[]).forEach((route, routeIndex) => {
399399
const traceId = `trace_${routeIndex}`
400+
const viaDiameter = route.viaDiameter || minViaDiameter
400401
for (let i = 1; i < route.route.length; i++) {
401402
const prevPoint = route.route[i - 1]
402403
const currPoint = route.route[i]
@@ -418,8 +419,8 @@ function extractViasFromRoutes(
418419
pcb_trace_id: traceId,
419420
x: currPoint.x,
420421
y: currPoint.y,
421-
outer_diameter: minViaDiameter,
422-
hole_diameter: minViaDiameter * 0.5,
422+
outer_diameter: viaDiameter,
423+
hole_diameter: viaDiameter * 0.5,
423424
layers: [fromLayer, toLayer] as LayerName[],
424425
})
425426
viaLocations.add(locationKey)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"@tscircuit/circuit-json-util": "^0.0.46",
2929
"@tscircuit/core": "^0.0.337",
3030
"@tscircuit/curvy-trace-solver": "^0.0.10",
31-
"@tscircuit/hypergraph": "^0.0.36",
31+
"@tscircuit/hypergraph": "^0.0.50",
3232
"@tscircuit/jumper-topology-generator": "^0.0.4",
3333
"@tscircuit/math-utils": "^0.0.27",
3434
"@tscircuit/rectdiff": "0.0.22",

tests/__snapshots__/e2e3_hg.snap.svg

Lines changed: 1 addition & 1 deletion
Loading

tests/bugs/__snapshots__/bugreport04-aa1d41.snap.svg

Lines changed: 1 addition & 1 deletion
Loading

tests/bugs/__snapshots__/bugreport05-f03221.snap.svg

Lines changed: 1 addition & 1 deletion
Loading

tests/bugs/__snapshots__/bugreport2-e2e.snap.svg

Lines changed: 1 addition & 1 deletion
Loading

tests/bugs/__snapshots__/missing-portpoints-001.snap.svg

Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)