Merge pull request 'Removing mxpic_forge from dependency' (#2) from main into pengkun_main #3
+54
@@ -39,3 +39,57 @@ The routing method selection logic was updated so perpendicular port-angle cases
|
||||
|
||||
mxpic_router/mxpic_router/builder.py
|
||||
mxpic_router/tests/test_eda_router_contract.py
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 2026-06-04
|
||||
|
||||
### Scope
|
||||
|
||||
Backend routing spacing behavior and automatic S-bend refinement in `mxpic_router`.
|
||||
|
||||
### Summary
|
||||
|
||||
Recent work focused on reducing overlap and crossing risks for grouped automatic S-bend connections while keeping the generated GDS impact limited.
|
||||
|
||||
### Completed Work
|
||||
|
||||
#### 1. S-Bend Spacing Issue Investigation
|
||||
|
||||
A route overlap issue was investigated for layouts containing multiple parallel or near-parallel automatic S-bend routes.
|
||||
|
||||
The issue was most visible when several component output ports were connected to several port elements. In these cases, the initial straight section of multiple S-bends could overlap or become too close when source and target ports were arranged in parallel.
|
||||
|
||||
#### 2. Conservative `Lstart`-Based S-Bend Adjustment
|
||||
|
||||
Spacing control was implemented through the native Nazca `sbend_p2p` `Lstart` parameter.
|
||||
|
||||
The backend now groups compatible automatic S-bend routes and assigns different `Lstart` values before route generation. This preserves the native S-bend route style and avoids manually constructed detours.
|
||||
|
||||
The adjustment applies only to automatic `sbend_p2p` routes. Manual-point routes, U-bends, perpendicular `strt_bend_strt_p2p` routes, and generic bend routes are left unchanged.
|
||||
|
||||
#### 3. Bundle-Level Route Grouping and Ordering
|
||||
|
||||
Compatible S-bend routes are grouped by routing direction, xsection, width, and radius. The `Lstart` assignment logic was refined for both same-direction fan-out/fan-in routes and symmetric convergence/divergence routes, so outer routes can receive larger offsets when needed.
|
||||
|
||||
#### 4. Width-Aware Spacing Step
|
||||
|
||||
The base step is now calculated as:
|
||||
|
||||
```text
|
||||
route width + 10um
|
||||
```
|
||||
|
||||
For example, a 0.5um-wide route uses a 10.5um `Lstart` step, while a 40um-wide route uses a 50um `Lstart` step.
|
||||
|
||||
#### 5. Test Coverage Update
|
||||
|
||||
Contract tests were added and updated to cover automatic S-bend `Lstart` assignment, bundle-level grouping behavior, route ordering, width-aware spacing, and preservation of earlier rotation and perpendicular-routing fixes.
|
||||
|
||||
### Modified Files
|
||||
|
||||
mxpic_router/mxpic_router/builder.py
|
||||
mxpic_router/tests/test_eda_router_contract.py
|
||||
|
||||
|
||||
Reference in New Issue
Block a user