Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions flow/designs/asap7/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# asap7 designs

## Findings: worst negative slack (WNS) across asap7

These notes read the committed `rules-base.json` baselines — the worst setup slack each
design reaches at clock-tree synthesis (`cts`), global route (`globalroute`) and `finish`.
The plot and table below are regenerated from that data by
[`flow/util/plot_wns.py`](../../util/plot_wns.py); no flow run is needed, so the numbers
are exactly what CI checks against.

What stands out:

- **Every asap7 design closes with negative setup slack.** All 18 baselines have
`finish` WNS < 0, so the committed asap7 constraints target clocks the flow does not
actually meet — these baselines track *how far short* each design lands, not timing
closure. `swerv_wrapper` (≈ −318) and `mock-alu` (≈ −300) are the extreme cases, an
order of magnitude worse than the cluster around −15 … −50 (`aes*`, `mock-cpu`,
`uart`, `jpeg`).

- **Worst slack is often not stable across stages.** Some designs pin their critical
path early and barely move (`cva6`, `jpeg`, `mock-cpu`: `cts ≈ globalroute ≈ finish`).
Others move a lot: `swerv_wrapper` degrades from −80 at cts/globalroute to −318 at
finish, and `riscv32i`/`riscv32i-mock-sram` slip from ≈ −47 (cts) to ≈ −81 (finish) —
routing and final extraction make the path materially worse than CTS predicted.

- **Global route is sometimes more pessimistic than finish.** For `gcd`
(cts −85.9 → globalroute −110 → finish −96.7) and `aes-block`
(cts −84 → globalroute −31 → finish −57) the worst-slack estimate swings between
stages rather than monotonically worsening. This is the same GRT-vs-post-route
estimate gap explored in [`flow/docs/rcx`](../../docs/rcx/README.md) (PR #4302), here
visible at the design level rather than per net.

The takeaway for anyone using cts-stage slack as a proxy for the final result: for asap7
it is a usable rank ordering but not a reliable magnitude — several designs move tens of
units (and `swerv_wrapper` hundreds) between cts and finish.

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — asap7](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| swerv_wrapper | -80 | -80 | -318 |
| mock-alu | -289 | -303 | -300 |
| gcd | -85.9 | -110 | -96.7 |
| gcd-ccs | -101 | -93.7 | -96.4 |
| ethmac | -88.6 | -103 | -93.3 |
| riscv32i-mock-sram | -47.5 | -52.8 | -81.3 |
| riscv32i | -47.5 | -49.8 | -81.2 |
| jpeg_lvt | -30 | -30 | -63.9 |
| aes-block | -84.1 | -31.1 | -56.6 |
| ibex | -79.4 | -74.3 | -52.5 |
| cva6 | -50 | -50 | -50 |
| uart | -47.6 | -58.7 | -49.1 |
| jpeg | -34 | -34 | -34 |
| aes_lvt | -18 | -18 | -26.1 |
| aes | -28.9 | -28 | -24.2 |
| aes-mbff | -20.8 | -19 | -20.8 |
| mock-cpu | -16.6 | -16.6 | -16.6 |
| ethmac_lvt | -19 | -29.5 | -15.2 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/asap7/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 29 additions & 0 deletions flow/designs/gf12/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# gf12 designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — gf12](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| bp_single | -632 | -470 | -227 |
| bp_quad | -375 | -223 | -225 |
| ariane | -257 | -214 | -212 |
| coyote | -200 | -200 | -200 |
| bp_dual | -758 | -100 | -165 |
| ca53 | -100 | -100 | -100 |
| swerv_wrapper | -75 | -75 | -75 |
| ibex | -51 | -51 | -51 |
| tinyRocket | -40 | -40 | -40 |
| jpeg | -96 | -53.2 | -25 |
| aes | -21 | -21 | -21 |
| gcd | -21.5 | -26.3 | -14 |
| ariane133 | -20.2409 | 0 | 0 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/gf12/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions flow/designs/gf180/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# gf180 designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — gf180](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| aes-hybrid | -0.967 | -1.1 | -1.1 |
| aes | -0.789 | -0.876 | -0.918 |
| riscv32i | -0.586 | -0.659 | -0.63 |
| ibex | -0.5 | -0.5 | -0.539 |
| jpeg | -0.375 | -0.375 | -0.375 |
| uart-blocks | -0.3 | -0.3 | -0.3 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/gf180/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions flow/designs/gf55/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# gf55 designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — gf55](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| aes | | | 0 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/gf55/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions flow/designs/gt2n/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# gt2n designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — gt2n](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| aes | -25 | -75.2 | -75.2 |
| jpeg | -50 | -50 | -50 |
| gcd | -25 | -25 | -25 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/gt2n/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions flow/designs/ihp-sg13g2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# ihp-sg13g2 designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — ihp-sg13g2](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| i2c-gpio-expander | -1 | -1 | -1 |
| ibex | -0.4 | -0.4 | -0.4 |
| jpeg | -0.4 | -0.4 | -0.4 |
| riscv32i | -0.3 | -0.3 | -0.3 |
| aes | -0.225 | -0.225 | -0.225 |
| gcd | -0.13 | -0.13 | -0.13 |
| spi | 0 | -0.0426 | -0.045 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/ihp-sg13g2/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 32 additions & 0 deletions flow/designs/nangate45/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# nangate45 designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — nangate45](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| bp_quad | -150 | -150 | -150 |
| black_parrot | -3.31 | -3.45 | -3.26 |
| mempool_group | -2.31 | -2.31 | -2.31 |
| swerv | -0.671 | -0.719 | -0.677 |
| ariane133 | -0.579 | -0.569 | -0.595 |
| swerv_wrapper | -0.344 | -0.357 | -0.35 |
| dynamic_node | -0.362 | -0.38 | -0.344 |
| ariane136 | -0.3 | -0.3 | -0.318 |
| bp_be_top | -0.331 | -0.315 | -0.318 |
| bp_multi_top | -0.24 | -0.24 | -0.24 |
| jpeg | -0.147 | -0.165 | -0.164 |
| tinyRocket | -0.14 | -0.168 | -0.154 |
| bp_fe_top | -0.09 | -0.09 | -0.131 |
| ibex | -0.11 | -0.127 | -0.11 |
| aes | -0.041 | -0.0692 | -0.0667 |
| gcd | -0.0529 | -0.0657 | -0.0559 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/nangate45/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions flow/designs/sky130hd/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# sky130hd designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — sky130hd](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| microwatt | -2.71 | -2.8 | -2.73 |
| gcd | -1.36 | -1.58 | -1.47 |
| riscv32i | -1.41 | -1.55 | -1.37 |
| jpeg | -0.716 | -0.877 | -0.654 |
| ibex | -0.505 | -0.576 | -0.5 |
| aes | -0.18 | -0.554 | -0.425 |
| chameleon | -0.321 | -0.356 | -0.282 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/sky130hd/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions flow/designs/sky130hs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# sky130hs designs

<!-- BEGIN WNS (generated by flow/util/plot_wns.py) -->
## WNS

Worst setup slack per design at three flow stages — clock-tree synthesis (`cts`), global route (`globalroute`) and `finish` — read from each design's `rules-base.json`. Negative means setup timing is not met. Values are in this PDK's native timing unit (ps for `asap7`, ns for most others), so they are comparable within this PDK but not across PDKs.

The bar is the `finish` slack; the markers show the `cts` and `globalroute` slack for the same design, so stage-to-stage movement is visible.

![WNS by design — sky130hs](wns.png)

| design | cts | globalroute | finish |
| --- | ---: | ---: | ---: |
| gcd | -0.358 | -1 | -1 |
| riscv32i | -0.303 | -0.695 | -0.571 |
| ibex | -0.35 | -0.525 | -0.35 |
| jpeg | -0.2 | -0.268 | -0.2 |
| aes | -0.14 | -0.206 | -0.145 |

_Generated by `flow/util/plot_wns.py` from `rules-base.json`; regenerate with `python3 flow/util/plot_wns.py`._
<!-- END WNS -->
Binary file added flow/designs/sky130hs/wns.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading