@tscircuit/fanout-solver 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -22
- package/lib/fanout-solver.ts +583 -82
- package/lib/geometry.ts +38 -19
- package/lib/index.ts +5 -0
- package/lib/layer-names.ts +38 -12
- package/lib/net-identity.ts +163 -0
- package/lib/route-bus.ts +305 -71
- package/lib/types.ts +39 -0
- package/lib/validate-fanout-solution.ts +772 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -42,6 +42,11 @@ and treats each bus-layer decision atomically.
|
|
|
42
42
|
alternate instead of favoring one axis; square grids distribute equally
|
|
43
43
|
across north, south, east, and west.
|
|
44
44
|
- Enumerates combinations of the copper layers implied by `layerCount`.
|
|
45
|
+
- Keeps a bounded beam of route alternatives for multi-connection buses, so
|
|
46
|
+
grouped power/signal lanes can backtrack across layer and track choices
|
|
47
|
+
before committing a prefix.
|
|
48
|
+
- Keys route-prefix caches by both bus and layer, preserving plan uniqueness
|
|
49
|
+
when grouped-layer search changes bus order.
|
|
45
50
|
- Prefers depth-cycled layer assignments: matching north/south (or east/west)
|
|
46
51
|
bus depths share a layer, and deeper pairs cycle through every available
|
|
47
52
|
escape layer. This forces a small stackup to reuse routing channels.
|
|
@@ -61,9 +66,17 @@ and treats each bus-layer decision atomically.
|
|
|
61
66
|
breakout corridor.
|
|
62
67
|
- Chamfers orthogonal routing corners into 45° segments before validating and
|
|
63
68
|
emitting the fanout.
|
|
64
|
-
- Verifies pad, via, trace, and already-routed fanout clearance
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
- Verifies oriented-pad, via, trace, and already-routed fanout clearance on
|
|
70
|
+
every complete candidate, independent of the routing strategy that produced
|
|
71
|
+
it.
|
|
72
|
+
- Resolves `netConnectionName`, connection, port, trace, and obstacle metadata
|
|
73
|
+
into electrical-net identities. Same-net copper may merge; different-net
|
|
74
|
+
pads, traces, and vias must retain clearance on every layer they occupy.
|
|
75
|
+
- `allowSameNetMerges` lets grouped branches such as VCC or GND reuse connected
|
|
76
|
+
copper instead of reserving artificial clearance from one another. It is
|
|
77
|
+
opt-in; different electrical nets remain hard obstacles.
|
|
78
|
+
- Audits route continuity, unique connection coverage, boundary exits, and
|
|
79
|
+
retained downstream endpoints before marking a solution complete.
|
|
67
80
|
- Emits supplied fanout traces, via obstacles, and moved breakout endpoints in a
|
|
68
81
|
new `SimpleRouteJson`. The returned problem is ready for a downstream
|
|
69
82
|
autorouter to finish.
|
|
@@ -177,6 +190,8 @@ bus-layer combination search.
|
|
|
177
190
|
- `busLayerAssignments`: the selected layer for every bus
|
|
178
191
|
- `busDirections`: the direction shared by each bus
|
|
179
192
|
- `attempts`: score and success metadata for every tried layer combination
|
|
193
|
+
- `validation`: the final geometry/connectivity report, including the number of
|
|
194
|
+
independently validated breakouts
|
|
180
195
|
|
|
181
196
|
## Dataset 01
|
|
182
197
|
|
|
@@ -198,15 +213,18 @@ parameters. Each sample has one shared boundary around all of its footprints,
|
|
|
198
213
|
and component bounds come from the exact footprinter-generated copper pad
|
|
199
214
|
extents.
|
|
200
215
|
|
|
201
|
-
##
|
|
216
|
+
## SRJ29 benchmark
|
|
202
217
|
|
|
203
|
-
The repository
|
|
204
|
-
[`tscircuit/dataset-
|
|
205
|
-
pinned development dependency. The adapter keeps the complete obstacle
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
218
|
+
The repository loads all 200 samples from the derivative
|
|
219
|
+
[`tscircuit/dataset-srj29-bga-decoupling`](https://github.com/tscircuit/dataset-srj29-bga-decoupling)
|
|
220
|
+
as a pinned development dependency. The adapter keeps the complete obstacle
|
|
221
|
+
field, including opposite-layer capacitor pads and bodies. VCC and GND are
|
|
222
|
+
grouped onto opposite boundary corridors, while the capacitor pad remains the
|
|
223
|
+
downstream endpoint of every power connection; a local capacitor or plane via
|
|
224
|
+
alone cannot count as a solved BGA pin. Remaining edge signals are grouped by
|
|
225
|
+
direction. Every adapted problem uses the same six-layer stackup (`top`,
|
|
226
|
+
`inner1` through `inner4`, and `bottom`) so benchmark improvements are directly
|
|
227
|
+
comparable.
|
|
210
228
|
|
|
211
229
|
Run the full benchmark with:
|
|
212
230
|
|
|
@@ -219,22 +237,23 @@ Use `--sample sample001`, `--limit 10`, or
|
|
|
219
237
|
default and print progress as they finish. `--concurrency 8` runs isolated
|
|
220
238
|
samples in parallel, and `--sample-timeout-seconds 600` prevents a difficult
|
|
221
239
|
sample from blocking the remaining work. Each run writes the full ordered
|
|
222
|
-
results to `benchmark-results/
|
|
223
|
-
`benchmark-results/
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
240
|
+
results to `benchmark-results/srj29.json` and
|
|
241
|
+
`benchmark-results/srj29.md`. A row is marked solved only when every input
|
|
242
|
+
connection has a validated breakout, all downstream endpoints remain attached,
|
|
243
|
+
and the independent DRC audit passes. Partial solutions are reported as
|
|
244
|
+
benchmark results instead of failing the command, making current completion
|
|
245
|
+
rates a baseline for solver improvements. `bun run benchmark:srj29` is an alias
|
|
246
|
+
for the same command.
|
|
247
|
+
|
|
248
|
+
The `SRJ29 Benchmark` GitHub Actions workflow runs the complete dataset on a
|
|
229
249
|
Blacksmith 32-vCPU ARM runner with 32 sample processes by default. It can be
|
|
230
250
|
started manually with an optional sample id, or for a pull request by adding
|
|
231
251
|
`[BENCHMARK TEST]` to its title. The workflow publishes the Markdown summary and
|
|
232
252
|
uploads both reports as an artifact.
|
|
233
253
|
|
|
234
|
-
Run `bun run start` and
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
URL parameter.
|
|
254
|
+
Run `bun run start` and inspect the SRJ29 fixtures to step through the selected
|
|
255
|
+
sample. The derivative dataset also publishes dedicated Cosmos pages for the
|
|
256
|
+
first ten samples.
|
|
238
257
|
|
|
239
258
|
## Dataset 02
|
|
240
259
|
|