Skip to content

fix: fixing full auto flow#646

Open
KelvinChung2000 wants to merge 48 commits into
FPGA-Research:mainfrom
KelvinChung2000:fix/fixing-full-auto-flow
Open

fix: fixing full auto flow#646
KelvinChung2000 wants to merge 48 commits into
FPGA-Research:mainfrom
KelvinChung2000:fix/fixing-full-auto-flow

Conversation

@KelvinChung2000
Copy link
Copy Markdown
Collaborator

I have fixed/reworked the optimisation flow. It will be nice if someone can run it as well to verify everything is working.

@read-the-docs-community
Copy link
Copy Markdown

read-the-docs-community Bot commented Mar 17, 2026

Documentation build overview

📚 FABulous | 🛠️ Build #32893064 | 📁 Comparing abef31d against latest (cf25676)

  🔍 Preview build  

149 files changed · + 41 added · ± 102 modified · - 6 deleted

+ Added

± Modified

- Deleted

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reworks the “full auto” FABulous fabric macro generation flow by improving tile-dimension exploration/optimization (including pin-based minimums), enhancing robustness of worker execution, and adding CLI/API knobs to run NLP-only or reuse prior exploration summaries.

Changes:

  • Add pin-track-based minimum tile dimension tracking and propagate it into exploration summaries for NLP bounds.
  • Refactor the NLP tile sizing formulation to use row-height/column-width variables with area-based feasibility constraints and configurable margin.
  • Add CLI/API options to skip Step 1 via --tile-opt-info, run --nlp-only, and configure --nlp-area-margin; update flow plumbing and final-views handling.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/gds_flow_test/step_test/conftest.py Fix fixture docstring typo; extend mock config with pin-min fields.
tests/gds_flow_test/flow_test/test_full_fabric_flow.py Update worker result typing/expectations to include pin-min payload.
fabulous/fabulous_cli/fabulous_cli.py Add CLI args for cached tile-opt info and NLP-only/margin; pass through to API.
fabulous/fabulous_api.py Extend full_fabric_automation() to accept NLP-only and margin, and pass into flow config.
fabulous/fabric_generator/gds_generator/steps/while_step.py Persist final step config after loop completes.
fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py Rework iteration sizing logic; add pin-min config vars and routing-obstruction refresh helper.
fabulous/fabric_generator/gds_generator/steps/global_tile_opitmisation.py Major NLP refactor: row/col variables, new JSON parsing, new constraints/metrics, updated termination.
fabulous/fabric_generator/gds_generator/flows/tile_macro_flow.py Compute/store pin-min die constraints from IO track requirements; tighten DIE_AREA validation.
fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py Worker returns pin-mins + state recovery on exceptions; add NLP-only mode; symlink-based final_views setup.
fabulous/fabric_generator/gds_generator/flows/fabric_macro_flow.py Change final views snapshot destination path to project Fabric macro final_views.
fabulous/fabric_definition/tile.py Simplify port counting; revise get_min_die_area() to track-based minimums with defaults.
fabulous/fabric_definition/supertile.py Update supertile min-die sizing to track-based formulation consistent with Tile.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py Outdated
Comment thread fabulous/fabric_generator/gds_generator/steps/global_tile_opitmisation.py Outdated
Comment thread fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py Outdated
Comment thread fabulous/fabric_generator/gds_generator/flows/fabric_macro_flow.py Outdated
@mtetrault
Copy link
Copy Markdown
Contributor

Hi, I can run the flow, but it would need a merge with #670, and possibly other recent PR.

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

Thanks for testing this. Is everything looking optimised well enough?

@KelvinChung2000 KelvinChung2000 force-pushed the fix/fixing-full-auto-flow branch from f222891 to dff21e1 Compare April 14, 2026 10:24
@KelvinChung2000 KelvinChung2000 marked this pull request as ready for review April 14, 2026 10:24
@mtetrault
Copy link
Copy Markdown
Contributor

Sorry, I meant I want to run the flow and see if it works here.

It is not running yet; I'm hitting the PDK path error:

ERROR | InvalidConfig | The following errors were encountered:
* Neither '/home/users/tetrault/.ciel/ihp-sg13g2/libs.tech/librelane/config.tcl' nor '/home/users/tetrault/.ciel/ihp-sg13g2/libs.tech/openlane/config.tcl were found.'

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

I have done the rebase, and this should work now

@mtetrault
Copy link
Copy Markdown
Contributor

I've launched the command with the following methodolgy:

git clone of repo
checkout of feature branch
nix develop
created demo project in empty folder
from within FABulous prompt:
1- run_FABulous_fabric
2- run_FABulous_eFPGA_macro

Individual tile optimization seems to complete successfully; from the Fabric/macro/RUN-XXX folder, the flow.log file contains:


=== Step 3: Recompiling tiles with optimal dimensions ===
✓ LUT4AB recompiled successfully
✓ N_term_single recompiled successfully
✓ S_term_single recompiled successfully
✓ RAM_IO recompiled successfully
✓ N_term_RAM_IO recompiled successfully
✓ S_term_RAM_IO recompiled successfully
✓ RegFile recompiled successfully
✓ N_term_single2 recompiled successfully
✓ S_term_single2 recompiled successfully
✓ W_IO recompiled successfully
✓ N_term_DSP recompiled successfully
✓ S_term_DSP recompiled successfully
✓ DSP recompiled successfully
✓ All 13 tiles recompiled with optimal dimensions
Created final_views symlinks for 13 tiles


However, the flows interrupts with
ERROR | AttributeError | 'NoneType' object has no attribute 'resolve'
More detailed output here

Can I provide more intermediate log files to help debug the flow?

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

KelvinChung2000 commented Apr 14, 2026

If you do set debug true, it will give you where it fails.

Is the tile actually being compiled, and does it have the GDS? Because the log looks contradictory, unless those are deferred.

But this NoneType' object has no attribute 'resolve' is likely somewhere resolve is being called on a Path object that's None`.

@mtetrault
Copy link
Copy Markdown
Contributor

You were right; the error comes from a resolve on a pdk_root parameter. See the complete trace
here.

@IAmMarcelJung
Copy link
Copy Markdown
Collaborator

I just also ran the flow and steps 2 and three of the eFPGA macro flow look like this:

=== Step 2: Solving NLP optimization ===
Running 'SolveNLPOptimization' at 'Fabric/macro/runs/RUN_2026-04-15_16-21-38/1-solvenlpoptimization'…
Formulating NLP problem using pymoo...
Tile N_term_single in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_single in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_RAM_IO in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_RAM_IO in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_single2 in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_single2 in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_DSP in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_single in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_single in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_RAM_IO in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_RAM_IO in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_single2 in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_single2 in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_DSP in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_DSP in mode find_min_width never compiled successfully, excluding from constraints
Tile DSP in mode find_min_width never compiled successfully, excluding from constraints
Using area margin: 5.0%
NLP variables: 3 row groups, 5 column groups = 8 total
NLP constraints: 13 area constraints
Running optimization for 500 generations
No single best solution found, using best from population
Solution has constraint violation of 3325.9564799999953
Optimization terminated with objective=20113807.44650344
  Total fabric area: 20113807
  Optimal tile dimensions: {'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('379.68')), 'N_term_single': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('57.12')), 'S_term_single': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('57.12')), 'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('379.68')), 'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('57.12')), 'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('57.12')), 'RegFile': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('379.68')), 'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'W_IO': (Decimal('0'), Decimal('0'), Decimal('42.24'), Decimal('379.68')), 'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('759.36'))}

=== Step 3: Recompiling tiles with optimal dimensions ===
✓ LUT4AB recompiled successfully
✓ N_term_single recompiled successfully
✓ S_term_single recompiled successfully
✓ RAM_IO recompiled successfully
✓ N_term_RAM_IO recompiled successfully
✓ S_term_RAM_IO recompiled successfully
✓ RegFile recompiled successfully
✓ N_term_single2 recompiled successfully
✓ S_term_single2 recompiled successfully
✓ W_IO recompiled successfully
✓ N_term_DSP recompiled successfully
✓ S_term_DSP recompiled successfully
✓ DSP recompiled successfully
✓ All 13 tiles recompiled with optimal dimensions
Created final_views symlinks for 13 tiles

I did not clone a fresh repo this time. but just pulled the branch into an existing version of your fork. Not sure if this causes some issues.

@mtetrault does it report successful runs in step 2 for you? Or do you get similar results as I do?

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

Something is also looking wrong, the LUT4AB optimal dimensions at 429x379 are too large to be true... Need to check where this regression is from

@mtetrault
Copy link
Copy Markdown
Contributor

mtetrault commented Apr 16, 2026

@IAmMarcelJung No, step 2 also shows the same message as you. In step 1, some iterations fail due to XOR difference, while others indicate "no working state found after tile optimisation"

@KelvinChung2000 I'm also still hitting the 'NoneType' object has no attribute 'resolve' issue for the pdk_root parameter. It looks to be implicit when calling the macroflow flow (code here). Is this intended?

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

KelvinChung2000 commented Apr 16, 2026

The way the tile compilation works is by launching a new process, and it seems that leads to an issue with how the path is resolved when it is in a separate process. I am still working on this.

I am getting errors in step 1 about not being able to find a specific file in the PDK, not an XOR error. It seems like on 3 machines with little different setup is leading to 3 kinds of errors...

@IAmMarcelJung
Copy link
Copy Markdown
Collaborator

Actually I also got the XOR differences in Step 1. I will now run the flow again with your latest changes.

@mtetrault
Copy link
Copy Markdown
Contributor

I've run the flow once more with the recent changes. Here are the main outcomes I see:

  • In step 1, I still see the XOR error messages, but the step completes,
  • Step 2 reports three cells that never compiled successfully (DSP, LUT and RegFiles)
  • Step 2 reports the following optimal tile dimensions: {
    'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('211.15')),
    'N_term_single': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('27.72')),
    'S_term_single': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('27.72')),
    'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('211.15')),
    'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('27.72')),
    'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('27.72')),
    'RegFile': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('211.15')),
    'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('27.72')),
    'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('27.72')),
    'W_IO': (Decimal('0'), Decimal('0'), Decimal('68.56'), Decimal('211.15')),
    'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('27.72')),
    'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('27.72')),
    'DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('422.30'))}\
  • Step 3 reaches the message "Fabric flow completed successfully!"

@IAmMarcelJung
Copy link
Copy Markdown
Collaborator

I've run the flow once more with the recent changes. Here are the main outcomes I see:

* In step 1, I still see the XOR error messages, but the step completes,

* Step 2 reports three cells that never compiled successfully (DSP, LUT and RegFiles)

* Step 2 reports the following optimal tile dimensions: {
  'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('211.15')),
  'N_term_single': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('27.72')),
  'S_term_single': (Decimal('0'), Decimal('0'), Decimal('295.08'), Decimal('27.72')),
  'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('211.15')),
  'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('27.72')),
  'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('158.40'), Decimal('27.72')),
  'RegFile': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('211.15')),
  'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('27.72')),
  'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('310.05'), Decimal('27.72')),
  'W_IO': (Decimal('0'), Decimal('0'), Decimal('68.56'), Decimal('211.15')),
  'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('27.72')),
  'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('27.72')),
  'DSP': (Decimal('0'), Decimal('0'), Decimal('236.15'), Decimal('422.30'))}\

* Step 3 reaches the message "Fabric flow completed successfully!"

I also get these results and the gds is also generated.

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

295x211, this is more like what I am expecting. Which tile is getting XOR error?

@IAmMarcelJung
Copy link
Copy Markdown
Collaborator

295x211, this is more like what I am expecting. Which tile is getting XOR error?

Validating project directory structure...
✓ Project structure validated: 13 tile types found (12 regular tiles, 1 supertiles, 2 subtiles within SuperTiles)

=== Step 1: Finding minimum tile dimensions ===
opt_mode=balance, tile=LUT4AB, metrics={'design__die__bbox': '0.0 0.0 238.56 253.68', 'design__core__bbox': '2.88 3.78 235.68 249.48', 'design__instance__area__stdcell': Decimal('52448.9'), 'design__instance__utilization__stdcell': Decimal('0.916955'), 'fabulous__pin_min_width': 111.36, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=N_term_single, metrics={'design__die__bbox': '0.0 0.0 122.4 190.68', 'design__core__bbox': '2.88 3.78 119.52 185.22', 'design__instance__area__stdcell': Decimal('2095.63'), 'design__instance__utilization__stdcell': Decimal('0.0990226'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=S_term_single, metrics={'design__die__bbox': '0.0 0.0 122.4 190.68', 'design__core__bbox': '2.88 3.78 119.52 185.22', 'design__instance__area__stdcell': Decimal('2102.89'), 'design__instance__utilization__stdcell': Decimal('0.0993656'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=RAM_IO, metrics={'design__die__bbox': '0.0 0.0 196.8 170.1', 'design__core__bbox': '2.88 3.78 193.92 166.32', 'design__instance__area__stdcell': Decimal('28228.4'), 'design__instance__utilization__stdcell': Decimal('0.90908'), 'fabulous__pin_min_width': 79.68, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=N_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 93.6 136.08', 'design__core__bbox': '2.88 3.78 90.72 132.3', 'design__instance__area__stdcell': Decimal('1776.3'), 'design__instance__utilization__stdcell': Decimal('0.157345'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=S_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 93.6 136.08', 'design__core__bbox': '2.88 3.78 90.72 132.3', 'design__instance__area__stdcell': Decimal('1776.3'), 'design__instance__utilization__stdcell': Decimal('0.157345'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=RegFile, metrics={'design__die__bbox': '0.0 0.0 247.68 262.92', 'design__core__bbox': '2.88 3.78 244.8 257.04', 'design__instance__area__stdcell': Decimal('55823.6'), 'design__instance__utilization__stdcell': Decimal('0.911129'), 'fabulous__pin_min_width': 110.4, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=N_term_single2, metrics={'design__die__bbox': '0.0 0.0 121.92 190.68', 'design__core__bbox': '2.88 3.78 119.04 185.22', 'design__instance__area__stdcell': Decimal('2095.63'), 'design__instance__utilization__stdcell': Decimal('0.0994318'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=S_term_single2, metrics={'design__die__bbox': '0.0 0.0 121.92 190.68', 'design__core__bbox': '2.88 3.78 119.04 185.22', 'design__instance__area__stdcell': Decimal('2095.63'), 'design__instance__utilization__stdcell': Decimal('0.0994318'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=W_IO, metrics={'design__die__bbox': '0.0 0.0 58.08 317.52', 'design__core__bbox': '2.88 3.78 55.2 313.74', 'design__instance__area__stdcell': Decimal('10548.9'), 'design__instance__utilization__stdcell': Decimal('0.650481'), 'fabulous__pin_min_width': 10.56, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=N_term_DSP, metrics={'design__die__bbox': '0.0 0.0 121.92 190.68', 'design__core__bbox': '2.88 3.78 119.04 185.22', 'design__instance__area__stdcell': Decimal('2095.63'), 'design__instance__utilization__stdcell': Decimal('0.0994318'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=S_term_DSP, metrics={'design__die__bbox': '0.0 0.0 121.92 190.68', 'design__core__bbox': '2.88 3.78 119.04 185.22', 'design__instance__area__stdcell': Decimal('2095.63'), 'design__instance__utilization__stdcell': Decimal('0.0994318'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=balance, tile=DSP, metrics={'design__die__bbox': '0.0 0.0 335.52 290.64', 'design__core__bbox': '2.88 3.78 332.64 283.5', 'design__instance__area__stdcell': Decimal('84578.3'), 'design__instance__utilization__stdcell': Decimal('0.916932'), 'fabulous__pin_min_width': 114.24, 'fabulous__pin_min_height': 81.48, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_height, tile=LUT4AB, metrics={'design__die__bbox': '0.0 0.0 230.88 253.68', 'design__core__bbox': '2.88 3.78 228.0 249.48', 'design__instance__area__stdcell': Decimal('52432.5'), 'design__instance__utilization__stdcell': Decimal('0.947942'), 'fabulous__pin_min_width': 111.36, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_height, tile=N_term_single, metrics={'design__die__bbox': '0.0 0.0 87.84 398.58', 'design__core__bbox': '2.88 3.78 84.96 393.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.023846'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=S_term_single, metrics={'design__die__bbox': '0.0 0.0 87.84 398.58', 'design__core__bbox': '2.88 3.78 84.96 393.12', 'design__instance__area__stdcell': Decimal('769.306'), 'design__instance__utilization__stdcell': Decimal('0.0240731'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=RAM_IO, metrics={'design__die__bbox': '0.0 0.0 192.96 170.1', 'design__core__bbox': '2.88 3.78 190.08 166.32', 'design__instance__area__stdcell': Decimal('28228.4'), 'design__instance__utilization__stdcell': Decimal('0.927728'), 'fabulous__pin_min_width': 79.68, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_height, tile=N_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 70.56 400.68', 'design__core__bbox': '2.88 3.78 67.68 396.9', 'design__instance__area__stdcell': Decimal('645.926'), 'design__instance__utilization__stdcell': Decimal('0.0253561'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=S_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 70.56 400.68', 'design__core__bbox': '2.88 3.78 67.68 396.9', 'design__instance__area__stdcell': Decimal('645.926'), 'design__instance__utilization__stdcell': Decimal('0.0253561'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=RegFile, metrics={'design__die__bbox': '0.0 0.0 240.0 262.92', 'design__core__bbox': '2.88 3.78 237.12 257.04', 'design__instance__area__stdcell': Decimal('55823.6'), 'design__instance__utilization__stdcell': Decimal('0.941002'), 'fabulous__pin_min_width': 110.4, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_height, tile=N_term_single2, metrics={'design__die__bbox': '0.0 0.0 87.36 398.58', 'design__core__bbox': '2.88 3.78 84.48 393.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.0239863'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=S_term_single2, metrics={'design__die__bbox': '0.0 0.0 87.36 398.58', 'design__core__bbox': '2.88 3.78 84.48 393.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.0239863'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=W_IO, metrics={'design__die__bbox': '0.0 0.0 58.08 317.52', 'design__core__bbox': '2.88 3.78 55.2 313.74', 'design__instance__area__stdcell': Decimal('10548.9'), 'design__instance__utilization__stdcell': Decimal('0.650481'), 'fabulous__pin_min_width': 10.56, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_height, tile=N_term_DSP, metrics={'design__die__bbox': '0.0 0.0 87.36 398.58', 'design__core__bbox': '2.88 3.78 84.48 393.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.0239863'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_height, tile=S_term_DSP, metrics={'design__die__bbox': '0.0 0.0 87.36 133.98', 'design__core__bbox': '2.88 3.78 84.48 128.52', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.0748663'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 119, in run\n    step = cStep(self.config, current_state)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 538, in __init__\n    self.config = config.with_increment(\n                  ^^^^^^^^^^^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/config/config.py", line 308, in with_increment\n    mutable, _, _, _ = self.__get_pdk_config(\n                       ^^^^^^^^^^^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/config/config.py", line 946, in __get_pdk_config\n    raise InvalidConfig("PDK configuration files", pdk_warnings, pdk_errors)\nlibrelane.config.config.InvalidConfig: The following errors were encountered: \n\t* Path provided for variable \'CELL_LEFS[0]\' is invalid: \'/home/marcel/.ciel/ciel/ihp-sg13g2/versions/cb7daaa8901016cf7c5d272dfa322c41f024931f/ihp-sg13g2/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_stdcell.lef\' does not exist\n\t* Path provided for variable \'CELL_GDS[0]\' is invalid: \'/home/marcel/.ciel/ciel/ihp-sg13g2/versions/cb7daaa8901016cf7c5d272dfa322c41f024931f/ihp-sg13g2/ihp-sg13g2/libs.ref/sg13g2_stdcell/gds/sg13g2_stdcell.gds\' does not exist\n\t* Path provided for variable \'CELL_VERILOG_MODELS[0]\' is invalid: \'/home/marcel/.ciel/ciel/ihp-sg13g2/versions/cb7daaa8901016cf7c5d272dfa322c41f024931f/ihp-sg13g2/ihp-sg13g2/libs.ref/sg13g2_stdcell/verilog/sg13g2_stdcell.v\' does not exist\n\t* Path provided for variable \'CELL_SPICE_MODELS[0]\' is invalid: \'/home/marcel/.ciel/ciel/ihp-sg13g2/versions/cb7daaa8901016cf7c5d272dfa322c41f024931f/ihp-sg13g2/ihp-sg13g2/libs.ref/sg13g2_stdcell/spice/sg13g2_stdcell.spice\' does not exist\n'}
opt_mode=find_min_height, tile=DSP, metrics={'design__die__bbox': '0.0 0.0 327.84 290.64', 'design__core__bbox': '2.88 3.78 324.96 283.5', 'design__instance__area__stdcell': Decimal('84589.1'), 'design__instance__utilization__stdcell': Decimal('0.938917'), 'fabulous__pin_min_width': 114.24, 'fabulous__pin_min_height': 81.48, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_width, tile=LUT4AB, metrics={'design__die__bbox': '0.0 0.0 296.16 196.98', 'design__core__bbox': '2.88 3.78 293.28 192.78', 'design__instance__area__stdcell': Decimal('52427.1'), 'design__instance__utilization__stdcell': Decimal('0.955207'), 'fabulous__pin_min_width': 111.36, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_width, tile=N_term_single, metrics={'design__die__bbox': '0.0 0.0 164.64 20.58', 'design__core__bbox': '2.88 3.78 161.76 15.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.422961'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=S_term_single, metrics={'design__die__bbox': '0.0 0.0 164.64 20.58', 'design__core__bbox': '2.88 3.78 161.76 15.12', 'design__instance__area__stdcell': Decimal('769.306'), 'design__instance__utilization__stdcell': Decimal('0.426989'), 'fabulous__pin_min_width': 60.96, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=RAM_IO, metrics={'design__die__bbox': '0.0 0.0 242.88 132.3', 'design__core__bbox': '2.88 3.78 240.0 128.52', 'design__instance__area__stdcell': Decimal('28228.4'), 'design__instance__utilization__stdcell': Decimal('0.954361'), 'fabulous__pin_min_width': 79.68, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_width, tile=N_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 147.36 22.68', 'design__core__bbox': '2.88 3.78 144.48 18.9', 'design__instance__area__stdcell': Decimal('645.926'), 'design__instance__utilization__stdcell': Decimal('0.301695'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=S_term_RAM_IO, metrics={'design__die__bbox': '0.0 0.0 147.36 22.68', 'design__core__bbox': '2.88 3.78 144.48 18.9', 'design__instance__area__stdcell': Decimal('645.926'), 'design__instance__utilization__stdcell': Decimal('0.301695'), 'fabulous__pin_min_width': 45.12, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=RegFile, metrics={'design__die__bbox': '0.0 0.0 301.44 206.22', 'design__core__bbox': '2.88 3.78 298.56 200.34', 'design__instance__area__stdcell': Decimal('55716.6'), 'design__instance__utilization__stdcell': Decimal('0.958666'), 'fabulous__pin_min_width': 110.4, 'fabulous__pin_min_height': 94.92, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_width, tile=N_term_single2, metrics={'design__die__bbox': '0.0 0.0 164.16 20.58', 'design__core__bbox': '2.88 3.78 161.28 15.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.424242'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=S_term_single2, metrics={'design__die__bbox': '0.0 0.0 164.16 20.58', 'design__core__bbox': '2.88 3.78 161.28 15.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.424242'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=W_IO, metrics={'design__die__bbox': '0.0 0.0 61.92 298.62', 'design__core__bbox': '2.88 3.78 59.04 294.84', 'design__instance__area__stdcell': Decimal('10548.9'), 'design__instance__utilization__stdcell': Decimal('0.645355'), 'fabulous__pin_min_width': 10.56, 'fabulous__pin_min_height': 54.6, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 408, in run\n    raise FlowError(\nlibrelane.flows.flow.FlowError: One or more deferred errors were encountered:\n1 XOR differences found.\n'}
opt_mode=find_min_width, tile=N_term_DSP, metrics={'design__die__bbox': '0.0 0.0 164.16 20.58', 'design__core__bbox': '2.88 3.78 161.28 15.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.424242'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=S_term_DSP, metrics={'design__die__bbox': '0.0 0.0 164.16 20.58', 'design__core__bbox': '2.88 3.78 161.28 15.12', 'design__instance__area__stdcell': Decimal('762.048'), 'design__instance__utilization__stdcell': Decimal('0.424242'), 'fabulous__pin_min_width': 60.48, 'fabulous__pin_min_height': 14.28, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}
opt_mode=find_min_width, tile=DSP, metrics={'design__die__bbox': '0.0 0.0 404.64 233.94', 'design__core__bbox': '2.88 3.78 401.76 226.8', 'design__instance__area__stdcell': 68793, 'design__instance__utilization__stdcell': Decimal('0.773318'), 'fabulous__pin_min_width': 114.24, 'fabulous__pin_min_height': 81.48, 'error': 'Worker execution failed', 'error_traceback': 'Traceback (most recent call last):\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 141, in _run_tile_flow_worker\n    state: State = flow.start()\n                   ^^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start\n    final_state, step_objects = self.run(\n                                ^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run\n    current_state = step.start(\n                    ^^^^^^^^^^^\n  File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start\n    views_updates, metrics_updates = self.run(state_in_result, **kwargs)\n                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 404, in run\n    return super().run(state_in, **_kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run\n    current_state = self.post_loop_callback(current_state)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/home/marcel/GitHubProjects/forks/FABulous-kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 355, in post_loop_callback\n    raise RuntimeError("No working state found after tile optimisation.")\nRuntimeError: No working state found after tile optimisation.\n'}

=== Step 2: Solving NLP optimization ===
Running 'SolveNLPOptimization' at 'Fabric/macro/runs/RUN_2026-04-15_16-21-38/1-solvenlpoptimization'…
Formulating NLP problem using pymoo...
Tile N_term_single in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_single in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_RAM_IO in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_RAM_IO in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_single2 in mode find_min_height never compiled successfully, excluding from constraints
Tile S_term_single2 in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_DSP in mode find_min_height never compiled successfully, excluding from constraints
Tile N_term_single in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_single in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_RAM_IO in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_RAM_IO in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_single2 in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_single2 in mode find_min_width never compiled successfully, excluding from constraints
Tile N_term_DSP in mode find_min_width never compiled successfully, excluding from constraints
Tile S_term_DSP in mode find_min_width never compiled successfully, excluding from constraints
Tile DSP in mode find_min_width never compiled successfully, excluding from constraints
Using area margin: 5.0%
NLP variables: 3 row groups, 5 column groups = 8 total
NLP constraints: 13 area constraints
Running optimization for 500 generations
No single best solution found, using best from population
Solution has constraint violation of 3325.9564799999953
Optimization terminated with objective=20113807.44650344
  Total fabric area: 20113807
  Optimal tile dimensions: {'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('379.68')), 'N_term_single': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('57.12')), 'S_term_single': (Decimal('0'), Decimal('0'), Decimal('429.03'), Decimal('57.12')), 'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('379.68')), 'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('57.12')), 'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('234.14'), Decimal('57.12')), 'RegFile': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('379.68')), 'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'W_IO': (Decimal('0'), Decimal('0'), Decimal('42.24'), Decimal('379.68')), 'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('57.12')), 'DSP': (Decimal('0'), Decimal('0'), Decimal('427.35'), Decimal('759.36'))}

=== Step 3: Recompiling tiles with optimal dimensions ===
✓ LUT4AB recompiled successfully
✓ N_term_single recompiled successfully
✓ S_term_single recompiled successfully
✓ RAM_IO recompiled successfully
✓ N_term_RAM_IO recompiled successfully
✓ S_term_RAM_IO recompiled successfully
✓ RegFile recompiled successfully
✓ N_term_single2 recompiled successfully
✓ S_term_single2 recompiled successfully
✓ W_IO recompiled successfully
✓ N_term_DSP recompiled successfully
✓ S_term_DSP recompiled successfully
✓ DSP recompiled successfully
✓ All 13 tiles recompiled with optimal dimensions
Created final_views symlinks for 13 tiles

Seems like all tiles are getting the XOR error?

But for the size, are we not expecting something optimized? We manually achieved 216.48x215.46 before for the LUT4AB tile.

@mtetrault
Copy link
Copy Markdown
Contributor

I reran the flow with the recent changes; similar results for now, step 2 reports that tiles "never compiled successfully" in "find_min_height" mode. It completes with the following dimensions:\

Optimal tile dimensions: {'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('216.39'), Decimal('280.51')), 'N_term_single': (Decimal('0'), Decimal('0'), Decimal('216.39'), Decimal('43.02')), 'S_term_single': (Decimal('0'), Decimal('0'), Decimal('216.39'), Decimal('43.02')), 'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('115.05'), Decimal('280.51')), 'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('115.05'), Decimal('43.02')), 'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('115.05'), Decimal('43.02')), 'RegFile': (Decimal('0'), Decimal('0'), Decimal('221.76'), Decimal('280.51')), 'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('221.76'), Decimal('43.02')), 'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('221.76'), Decimal('43.02')), 'W_IO': (Decimal('0'), Decimal('0'), Decimal('45.61'), Decimal('280.51')), 'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('170.01'), Decimal('43.02')), 'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('170.01'), Decimal('43.02')), 'DSP': (Decimal('0'), Decimal('0'), Decimal('170.01'), Decimal('561.02'))}

However, the W_IO fails to recompile. The message says "errors but state was recovered, however it gives an error on missing gds/lef for the W_IO:

Tile W_IO had errors but state was recovered:
Traceback (most recent call last):
File "/exp/design/tetrault/saba/FABulous_Kelvin/fabulous/fabric_generator/gds_generator/flows/full_fabric_flow.py", line 145, in _run_tile_flow_worker
state: State = flow.start()
^^^^^^^^^^^^
File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/flow.py", line 683, in start
final_state, step_objects = self.run(
^^^^^^^^^
File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/flows/sequential.py", line 383, in run
current_state = step.start(
^^^^^^^^^^^
File "/nix/store/7dljxn5xpcd3iifq27wlf72h10clhg23-python3.13-librelane-3.0.1/lib/python3.13/site-packages/librelane/steps/step.py", line 1166, in start
views_updates, metrics_updates = self.run(state_in_result, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/exp/design/tetrault/saba/FABulous_Kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 510, in run
return super().run(state_in, **_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/exp/design/tetrault/saba/FABulous_Kelvin/fabulous/fabric_generator/gds_generator/steps/while_step.py", line 150, in run
current_state = self.post_loop_callback(current_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/exp/design/tetrault/saba/FABulous_Kelvin/fabulous/fabric_generator/gds_generator/steps/tile_optimisation.py", line 446, in post_loop_callback
raise RuntimeError(
RuntimeError: Fail to find a clean state after the physical implementation

Tile W_IO missing required outputs (GDS or LEF)

About the XOR message, I'm wondering if the message is not from failed attempts, perhaps masking attemps that did work out?

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

KelvinChung2000 commented Apr 22, 2026

Some of the min_width and min_height modes might never pass due to the extram dimension ratio.

The XOR check is not a problem; we only exclude the result if no working state is found. https://github.com/FPGA-Research/FABulous/pull/646/changes#diff-53d162e590b1758591554897d9ea5e25fe687ee58b273f5c7495c78a889a033bR632-R638

But still, having the XOR error is not great, since this should not have happened in the first place.

@mtetrault
Copy link
Copy Markdown
Contributor

New run, gives a rectangular shape:

Optimal tile dimensions: {
'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('517.44')),
'N_term_single': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('120.96')),
'S_term_single': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('120.96')),
'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('517.44')),
'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('120.96')),
'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('120.96')),
'RegFile': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('517.44')),
'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('120.96')),
'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('120.96')),
'W_IO': (Decimal('0'), Decimal('0'), Decimal('108.48'), Decimal('517.44')),
'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('127.68'), Decimal('120.96')),
'S_term_DSP': (Decimal('0'), Decimal('0'), Decimal('127.68'), Decimal('120.96')),
'DSP': (Decimal('0'), Decimal('0'), Decimal('127.68'), Decimal('1034.88'))}`

@KelvinChung2000 KelvinChung2000 force-pushed the fix/fixing-full-auto-flow branch from 3027675 to cda07a9 Compare April 28, 2026 11:57
@mtetrault
Copy link
Copy Markdown
Contributor

With recent changes:

Optimal tile dimensions:
{'LUT4AB': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('260.40')),
'N_term_single': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('41.70')),
'S_term_single': (Decimal('0'), Decimal('0'), Decimal('241.92'), Decimal('41.70')),
'RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('260.40')),
'N_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('41.70')),
'S_term_RAM_IO': (Decimal('0'), Decimal('0'), Decimal('174.24'), Decimal('41.70')),
'RegFile': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('260.40')),
'N_term_single2': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('41.70')),
'S_term_single2': (Decimal('0'), Decimal('0'), Decimal('247.68'), Decimal('41.70')),
'W_IO': (Decimal('0'), Decimal('0'), Decimal('108.48'), Decimal('260.40')),
'N_term_DSP': (Decimal('0'), Decimal('0'), Decimal('222.72'), Decimal('41.70')),
'S_term_DSP':(Decimal('0'), Decimal('0'), Decimal('222.72'), Decimal('41.70')),
'DSP': (Decimal('0'), Decimal('0'), Decimal('222.72'), Decimal('520.80'))}

@KelvinChung2000
Copy link
Copy Markdown
Collaborator Author

Nice, this matches what I am seeing. There will be some run-to-run variation, but it is within a reasonable range.

@KelvinChung2000 KelvinChung2000 force-pushed the fix/fixing-full-auto-flow branch from 9c52b9d to 4766a5c Compare May 26, 2026 12:34
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I'm currently running a test run, once this ran through we can merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants