The-OpenROAD-Project / OpenLane

OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen and custom methodology scripts for design exploration and optimization.
https://openlane.readthedocs.io/
Apache License 2.0
1.35k stars 373 forks source link

Error in routing for picorv32a #1842

Closed mariamrakka closed 1 year ago

mariamrakka commented 1 year ago

Description

I am running the design flow example using picorv32a design. I am using commit e910d115dc75c51407f652330bce8ed997c45946 and I have all steps successful up to run_routing, where I am getting the below log of error during detailed routing (note that I am using pdks i have installed separately in open_pdks directory):

OpenROAD 9a713f0e8a51769207918da28adfd3c02b854375 
This program is licensed under the BSD-3 license. See the LICENSE file for details.
Components of this program may be licensed under more restrictive licenses which must be honored.
[INFO]: Reading ODB at '/openlane/designs/picorv32a/runs/RUN_2023.06.03_07.02.57/tmp/routing/25-fill.odb'…
define_corners Typical
read_liberty -corner Typical /home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib
[WARNING STA-0163] /home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib line 23, default_fanout_load is 0.0.
[INFO ORD-0030] Using 2 thread(s).
[INFO DRT-0149] Reading tech and libs.

Units:                1000
Number of layers:     13
Number of macros:     442
Number of vias:       25
Number of viarulegen: 25

[INFO DRT-0150] Reading design.

Design:                   picorv32
Die area:                 ( 0 0 ) ( 546215 556935 )
Number of track patterns: 12
Number of DEF vias:       0
Number of components:     39492
Number of terminals:      411
Number of snets:          2
Number of nets:           10163

[INFO DRT-0167] List of default vias:
  Layer mcon
    default via: L1M1_PR
  Layer via
    default via: M1M2_PR
  Layer via2
    default via: M2M3_PR
  Layer via3
    default via: M3M4_PR
  Layer via4
    default via: M4M5_PR
[INFO DRT-0162] Library cell analysis.
[INFO DRT-0163] Instance analysis.
  Complete 10000 instances.
  Complete 20000 instances.
  Complete 30000 instances.
[INFO DRT-0164] Number of unique instances = 265.
[INFO DRT-0168] Init region query.
[INFO DRT-0018]   Complete 10000 insts.
[INFO DRT-0018]   Complete 20000 insts.
[INFO DRT-0018]   Complete 30000 insts.
[INFO DRT-0024]   Complete FR_MASTERSLICE.
[INFO DRT-0024]   Complete Fr_VIA.
[INFO DRT-0024]   Complete li1.
[INFO DRT-0024]   Complete mcon.
[INFO DRT-0024]   Complete met1.
[INFO DRT-0024]   Complete via.
[INFO DRT-0024]   Complete met2.
[INFO DRT-0024]   Complete via2.
[INFO DRT-0024]   Complete met3.
[INFO DRT-0024]   Complete via3.
[INFO DRT-0024]   Complete met4.
[INFO DRT-0024]   Complete via4.
[INFO DRT-0024]   Complete met5.
[INFO DRT-0033] FR_MASTERSLICE shape region query size = 0.
[INFO DRT-0033] FR_VIA shape region query size = 0.
[INFO DRT-0033] li1 shape region query size = 453622.
[INFO DRT-0033] mcon shape region query size = 456210.
[INFO DRT-0033] met1 shape region query size = 112939.
[INFO DRT-0033] via shape region query size = 3940.
[INFO DRT-0033] met2 shape region query size = 2573.
[INFO DRT-0033] via2 shape region query size = 3152.
[INFO DRT-0033] met3 shape region query size = 2564.
[INFO DRT-0033] via3 shape region query size = 3152.
[INFO DRT-0033] met4 shape region query size = 868.
[INFO DRT-0033] via4 shape region query size = 64.
[INFO DRT-0033] met5 shape region query size = 80.
[INFO DRT-0165] Start pin access.
[INFO DRT-0076]   Complete 100 pins.
[INFO DRT-0076]   Complete 200 pins.
[INFO DRT-0076]   Complete 300 pins.
[INFO DRT-0076]   Complete 400 pins.
[INFO DRT-0076]   Complete 500 pins.
[INFO DRT-0076]   Complete 600 pins.
[INFO DRT-0076]   Complete 700 pins.
[INFO DRT-0076]   Complete 800 pins.
[INFO DRT-0076]   Complete 900 pins.
[INFO DRT-0077]   Complete 1000 pins.
[INFO DRT-0078]   Complete 1009 pins.
[INFO DRT-0079]   Complete 100 unique inst patterns.
[INFO DRT-0079]   Complete 200 unique inst patterns.
[WARNING DRT-0087] No valid pattern for unique instance 07761, master is sky130_vsdinv.
[WARNING DRT-0087] No valid pattern for unique instance 07777, master is sky130_vsdinv.
[INFO DRT-0081]   Complete 247 unique inst patterns.
[INFO DRT-0082]   Complete 1000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
13259
[INFO DRT-0082]   Complete 2000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09267
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09269
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09271
[INFO DRT-0082]   Complete 3000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09685
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09799
[INFO DRT-0082]   Complete 4000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09743
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09690
[INFO DRT-0082]   Complete 5000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09436
[INFO DRT-0082]   Complete 6000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08026
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08386
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
10478
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12535
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12502
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12589
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12570
[INFO DRT-0082]   Complete 7000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08496
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12636
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08487
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12512
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12664
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07903
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12663
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08614
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08908
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12721
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08486
[INFO DRT-0082]   Complete 8000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12782
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08743
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08516
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08784
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08559
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08590
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08577
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07902
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08221
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
14021
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08607
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08681
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07850
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07761
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07859
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07846
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
07777
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08622
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
13169
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08633
[INFO DRT-0082]   Complete 9000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09239
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08543
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
14294
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08644
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08880
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
08645
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09035
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09050
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
09027
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
13034
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12265
[INFO DRT-0083]   Complete 10000 groups.
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12305
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12155
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12184
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12169
@@@ dead end inst
@@@ dead end inst
[ERROR DRT-0085] Valid access pattern combination not found for 
12198
Error: droute.tcl, 38 DRT-0085

Below is my config.jason file:

{
    "DESIGN_NAME": "picorv32",
    "VERILOG_FILES": "dir::src/picorv32a.v",
    "CLOCK_PORT": "clk",
    "CLOCK_NET": "clk",
    "GLB_RESIZER_TIMING_OPTIMIZATIONS": true,
    "GPL_CELL_PADDING": 2,
    "DPL_CELL_PADDING": 2,
    "CLOCK_PERIOD": 24,
    "FP_CORE_UTIL": 35,
    "LIB_SYNTH": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib",
    "LIB_SLOWEST": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__slow.lib",
    "LIB_FASTEST": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__fast.lib",
    "LIB_TYPICAL": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib",
    "EXTRA_LEFS": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_vsdinv.lef",
    "pdk::sky130*": {
        "SYNTH_MAX_FANOUT": 6,
        "scl::sky130_fd_sc_ms": {
            "FP_CORE_UTIL": 30
        }
    }
}

Expected Behavior

successful routing

Environment report

Kernel: Linux v5.19.0-42-generic
Distribution: ubuntu 22.04
Python: v3.7.16 (OK)
Container Engine: docker v24.0.2 (OK)
OpenLane Git Version: e910d115dc75c51407f652330bce8ed997c45946
pip: INSTALLED
python-venv: INSTALLED
---
PDK Version Verification Status: FAILED
/home/mariam/OpenLane/pdks/sky130A not found.
Traceback (most recent call last):
  File "/home/mariam/OpenLane/dependencies/verify_versions.py", line 76, in verify_versions
    raise Exception(f"{pdk_dir} not found.")
Exception: /home/mariam/OpenLane/pdks/sky130A not found.

Failed to verify sky130A.
---
Git Log (Last 3 Commits)

e910d115 2023-05-31T14:38:01+03:00 Read top level spef when using STA_MULTICORNER_READ_LIBS (#1830) - Kareem Farid -  (HEAD -> master, tag: 2023.06.01, origin/master, origin/HEAD)
6bb1e0dd 2023-05-30T17:44:50+03:00 Add `gui.py` (#1824) - Kareem Farid -  (tag: 2023.05.31)
bee7c9d2 2023-05-29T18:14:34+03:00 Fix Max Transition Time Usage (#1826) - Mohamed Gaber -  (tag: 2023.05.30)
---
Git Remotes

origin  https://github.com/The-OpenROAD-Project/OpenLane (fetch)
origin  https://github.com/The-OpenROAD-Project/OpenLane (push)

Reproduction material

issue.tar.gz

Relevant log output

{
    "DESIGN_NAME": "picorv32",
    "VERILOG_FILES": "dir::src/picorv32a.v",
    "CLOCK_PORT": "clk",
    "CLOCK_NET": "clk",
    "GLB_RESIZER_TIMING_OPTIMIZATIONS": true,
    "GPL_CELL_PADDING": 2,
    "DPL_CELL_PADDING": 2,
    "CLOCK_PERIOD": 24,
    "FP_CORE_UTIL": 35,
    "LIB_SYNTH": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib",
    "LIB_SLOWEST": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__slow.lib",
    "LIB_FASTEST": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__fast.lib",
    "LIB_TYPICAL": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_fd_sc_hd__typical.lib",
    "EXTRA_LEFS": "/home/mariam/OpenLane/designs/picorv32a/src/sky130_vsdinv.lef",
    "pdk::sky130*": {
        "SYNTH_MAX_FANOUT": 6,
        "scl::sky130_fd_sc_ms": {
            "FP_CORE_UTIL": 30
        }
    }
}
maliberty commented 1 year ago

The problem is coming from openroad but the issue file is for magic. Please upload a reproduce that shows the routing error.

% cat run.sh 
#!/bin/sh
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
cd $dir;
export DESIGN_NAME='picorv32';
export MAGIC_GDS='./results/signoff/picorv32.magic.gds';
export MAGIC_MAGICRC='pdk/sky130A/libs.tech/magic/sky130A.magicrc';
export MAGIC_SCRIPT='openlane/scripts/magic/gds/mag_with_pointers.tcl';
export PACKAGED_SCRIPT_0='openlane/scripts/magic/wrapper.tcl';
export PACKAGED_SCRIPT_1='openlane/scripts/magic/gds/mag_with_pointers.tcl';
export signoff_tmpfiles='./tmp/signoff';
TOOL_BIN=${TOOL_BIN:-magic}
$TOOL_BIN -dnull -noconsole -rcfile $MAGIC_MAGICRC < $PACKAGED_SCRIPT_0
mariamrakka commented 1 year ago

I reran the steps ensuring I use gen_pdn and it worked.