Skip to content

Commit 6eabbdb

Browse files
committed
2 parents ad99104 + 0f102f7 commit 6eabbdb

File tree

118 files changed

+11001
-17241
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+11001
-17241
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,7 @@ core.*
7979
__pycache__/
8080

8181
dependencies/
82+
.vscode/
83+
.metals/
84+
perf.data
85+
perf.data.old

README.md

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,51 @@
33
[![Build Status](https://jenkins.openroad.tools/buildStatus/icon?job=OpenROAD-flow-scripts-Public%2Fpublic_tests_all%2Fmaster)](https://jenkins.openroad.tools/view/Public/job/OpenROAD-flow-scripts-Public/job/public_tests_all/job/master/)
44
[![Docs](https://readthedocs.org/projects/openroad-flow-scripts/badge/?version=latest)](https://openroad-flow-scripts.readthedocs.io/en/latest/?badge=latest)
55

6-
OpenROAD Flow is a full RTL-to-GDS flow built entirely on open-source tools.
7-
The project aims for automated, no-human-in-the-loop digital circuit design
8-
with 24-hour turnaround time.
6+
OpenROAD-flow-scripts (ORFS) is a fully autonomous, RTL-GDSII flow
7+
for rapid architecture and design space exploration, early prediction
8+
of QoR and detailed physical design implementation. However, ORFS
9+
also enables manual intervention for finer user control of individual
10+
flow stages through Tcl commands and Python APIs.
11+
12+
![ORFS_Flow](./docs/images/ORFS_Flow.svg)
13+
14+
## Tool Installation
15+
16+
### Local Installation
17+
18+
Document for detailed local installation steps found [here](./docs/user/BuildLocally.md).
19+
20+
### Docker Based Installation
21+
22+
To ease dependency installation issues, ORFS uses docker images.
23+
Docker image includes ORFS binaries, applications as well as all
24+
required dependencies. All of the flow tools are encapsulated
25+
inside the container image.
26+
27+
If `Docker` is not installed already, install latest docker tool
28+
based on OS from [here](https://docs.docker.com/engine/install/).
29+
30+
To manage docker as non-root user and verify that you can run
31+
`docker` commands without `sudo` must complete steps from
32+
[here](https://docs.docker.com/engine/install/linux-postinstall/).
33+
34+
#### Build ORFS with Docker
35+
36+
Document for detailed steps on docker based installation found
37+
[here](./docs/user/BuildWithDocker.md).
938

1039
## Using the Flow
1140

12-
- See the OpenROAD [documentation here](https://openroad.readthedocs.io/en/latest/).
13-
- How to [start using OpenROAD flow here](https://openroad-flow-scripts.readthedocs.io/en/latest/user/GettingStarted.html).
14-
- Our [user guide here](https://openroad-flow-scripts.readthedocs.io/en/latest/user/UserGuide.html).
15-
- Our [Flow Tutorial here](https://openroad-flow-scripts.readthedocs.io/en/latest/tutorials/FlowTutorial.html).
41+
- For details about the OpenROAD and the available features and
42+
individual flows commands, see the documentation
43+
[here](https://openroad.readthedocs.io/en/latest/).
44+
- For details about automated flow setup, see ORFS docs
45+
[here](https://openroad-flow-scripts.readthedocs.io/en/latest/user/GettingStarted.html).
46+
- Flow tutorial to run the complete OpenROAD based flow from
47+
RTL-GDSII, see the tutorial
48+
[here](https://openroad-flow-scripts.readthedocs.io/en/latest/tutorials/FlowTutorial.html).
49+
- To watch ORFS flow tutorial videos, check
50+
[here](https://theopenroadproject.org/video).
1651

1752
## Citing this Work
1853

docs/images/ORFS_Flow.svg

Lines changed: 4 additions & 0 deletions
Loading

docs/images/gcd_final.webp

78.8 KB
Loading

docs/tutorials/FlowTutorial.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,14 @@ on how to use the [GUI](https://openroad.readthedocs.io/en/latest/main/README.ht
442442
aside from the layout are docking windows that can be undocked. Also it
443443
can be close and reopened from the Windows menu.
444444

445+
446+
Note: When you are using remote access, you will need to include -Y (or -X) option in your command to
447+
enable X11 applications to function properly over the network. By using the command "ssh -Y" followed
448+
by the remote servers' address or hostname, you can establish a secure connection and activate X11 forwarding.
449+
This feature enables you to run graphical programs on the remote server and have their windows display
450+
on your local machines desktop environment.
451+
452+
445453
In this section, learn how to:
446454

447455
1. Visualize design hierarchy

docs/user/BuildLocally.md

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,63 @@ sudo ./setup.sh
1818
``` shell
1919
./build_openroad.sh --local
2020
```
21-
> **Note:** There is a `build_openroad.log` file that is generated with every build in the main directory. In case of filing issues, it can be uploaded in the "Relevant log output" section of OpenROAD-flow-scripts repo [issue form](https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/issues/new?assignees=&labels=&template=bug_report_with_orfs.yml).
21+
> **Note:** There is a `build_openroad.log` file that is generated with every
22+
> build in the main directory. In case of filing issues, it can be uploaded
23+
> in the "Relevant log output" section of OpenROAD-flow-scripts repo
24+
> [issue form](https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/issues/new?assignees=&labels=&template=bug_report_with_orfs.yml).
2225
2326
## Verify Installation
2427

25-
The binaries should be available on your `$PATH` after setting up the
26-
environment.
28+
The binaries should be available on your `$PATH` after setting
29+
up the environment.
2730

2831
``` shell
2932
source ./env.sh
3033
yosys -help
3134
openroad -help
32-
exit
35+
cd flow
36+
make
3337
```
3438

39+
Above `make` command run from RTL-GDSII generation for default
40+
design `gcd` with `nangate45` pdk. You can view final layout with
41+
OpenROAD GUI as,
42+
43+
```
44+
make gui_final
45+
```
46+
47+
![gcd_final.webp](../images/gcd_final.webp)
48+
49+
## Using Pre-built Binaries
50+
51+
You can download pre-built binaries with self contained dependencies
52+
included from the Precision Innovations github repository
53+
[here](https://github.com/Precision-Innovations/OpenROAD/actions/workflows/github-actions-build-deb-package.yml).
54+
55+
Thanks to [Precision Innovations](http://www.precisioninno.com) for hosting and maintaining these binaries.
56+
57+
The following platforms are supported currently:
58+
- Ubuntu 20.04/22.04
59+
- Debian 10/11
60+
61+
Use following steps to download:
62+
63+
Step 1: Click on the [Precision Innovations Github releases link](https://github.com/Precision-Innovations/OpenROAD/releases).
64+
65+
Step 2: Download the artifacts for your distribution.
66+
67+
Step 3: Run the install command based on platform use package installer.
68+
For example Ubuntu 20.04 use:
69+
```shell
70+
sudo apt install ./openroad_2.0_amd64-ubuntu20.04.deb
71+
```
72+
73+
You can install these binaries within docker as well.
74+
75+
> **Thanks** to Precision Innovations (www.precisioninno.com) for providing
76+
> and supporting this daily release of pre built installers to the community.
77+
3578
## Compiling and debugging in Visual Studio Code
3679

3780
Set up environment variables to point to tools that CMake from within

docs/user/FlowVariables.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Note:
6464
| `TAPCELL_TCL` | = | = | = | = | = |
6565
| `MACRO_PLACE_HALO` | ?= | ?= | ?= | ?= | ?= |
6666
| `MACRO_PLACE_CHANNEL` | ?= | ?= | ?= | ?= | ?= |
67-
| `PDN_CFG` | ?= | ?= | ?= | ?= | ?= |
67+
| `PDN_TCL` | ?= | ?= | ?= | ?= | ?= |
6868
| `IO_PLACER_H` | = | = | = | = | ?= |
6969
| `IO_PLACER_V` | = | = | = | = | ?= |
7070
| Placement | | | | | |
@@ -131,7 +131,7 @@ Note:
131131
| `MACRO_PLACE_HALO` | horizontal/vertical halo around macros (microns). Used by automatic macro placement. |
132132
| `MACRO_PLACE_CHANNEL` | horizontal/vertical channel width between macros (microns). Used by automatic macro placement when `RTLMP_FLOW` is disabled. Imagine channel=10 and halo=5. Then macros must be 10 apart but standard cells must be 5 away from a macro.|
133133
| `MACRO_BLOCKAGE_HALO` | Blockage width overridden from default calculation. |
134-
| `PDN_CFG` | File path which has a set of power grid policies used by `pdn` to be applied to the design, such as layers to use, stripe width and spacing to generate the actual metal straps. |
134+
| `PDN_TCL` | File path which has a set of power grid policies used by `pdn` to be applied to the design, such as layers to use, stripe width and spacing to generate the actual metal straps. |
135135
| `MAKE_TRACKS` | Tcl file that defines add routing tracks to a floorplan. |
136136
| `IO_PLACER_H` | The metal layer on which to place the I/O pins horizontally (top and bottom of the die). |
137137
| `IO_PLACER_V` | The metal layer on which to place the I/O pins vertically (sides of the die). |

flow/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
settings.mk

flow/Makefile

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# settings.mk is not under source control. Put variables into this
2+
# file to avoid having to adding the to the make command line.
3+
-include settings.mk
4+
15
# ==============================================================================
26
# Uncomment or add the design to run
37
# ==============================================================================
@@ -80,6 +84,8 @@
8084
# DESIGN_CONFIG=./designs/intel22/aes/config.mk
8185

8286
# DESIGN_CONFIG=./designs/gf180/aes/config.mk
87+
# DESIGN_CONFIG=./designs/gf180/ibex/config.mk
88+
# DESIGN_CONFIG=./designs/gf180/jpeg/config.mk
8389
#
8490
# Default design
8591
DESIGN_CONFIG ?= ./designs/nangate45/gcd/config.mk
@@ -423,6 +429,12 @@ clean_synth:
423429
.PHONY: floorplan
424430
floorplan: $(RESULTS_DIR)/2_floorplan.odb \
425431
$(RESULTS_DIR)/2_floorplan.sdc
432+
433+
.PHONY: floorplan_info
434+
floorplan_info:
435+
@echo DIE_AREA=$(DIE_AREA)
436+
@echo CORE_AREA=$(CORE_AREA)
437+
426438
# ==============================================================================
427439

428440
ifneq ($(FOOTPRINT),)
@@ -443,7 +455,7 @@ $(RESULTS_DIR)/2_2_floorplan_io.odb: $(RESULTS_DIR)/2_1_floorplan.odb $(IO_CONST
443455
ifndef IS_CHIP
444456
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement_random.tcl -metrics $(LOG_DIR)/2_2_floorplan_io.json) 2>&1 | tee $(LOG_DIR)/2_2_floorplan_io.log
445457
else
446-
cp $< $@
458+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
447459
endif
448460

449461
# STEP 3: Timing Driven Mixed Sized Placement
@@ -453,7 +465,7 @@ ifeq ($(MACRO_PLACEMENT),)
453465
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tdms_place.tcl -metrics $(LOG_DIR)/2_3_tdms.json) 2>&1 | tee $(LOG_DIR)/2_3_tdms_place.log
454466
else
455467
$(info [INFO][FLOW] Using manual macro placement file $(MACRO_PLACEMENT))
456-
cp $< $@
468+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
457469
endif
458470

459471
# STEP 4: Macro Placement
@@ -469,11 +481,11 @@ $(RESULTS_DIR)/2_5_floorplan_tapcell.odb: $(RESULTS_DIR)/2_4_floorplan_macro.odb
469481

470482
# STEP 6: PDN generation
471483
#-------------------------------------------------------------------------------
472-
$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_CFG) $(PDN_TCL)
484+
$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_TCL)
473485
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/pdn.tcl -metrics $(LOG_DIR)/2_6_pdn.json) 2>&1 | tee $(LOG_DIR)/2_6_pdn.log
474486

475487
$(RESULTS_DIR)/2_floorplan.odb: $(RESULTS_DIR)/2_6_floorplan_pdn.odb
476-
cp $< $@
488+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
477489

478490
$(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb
479491

@@ -506,7 +518,7 @@ $(RESULTS_DIR)/3_2_place_iop.odb: $(RESULTS_DIR)/3_1_place_gp_skip_io.odb $(IO_C
506518
ifndef IS_CHIP
507519
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement.tcl -metrics $(LOG_DIR)/3_2_place_iop.json) 2>&1 | tee $(LOG_DIR)/3_2_place_iop.log
508520
else
509-
cp $< $@
521+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
510522
endif
511523

512524
# STEP 3: Global placement with placed IOs, timing-driven, and routability-driven.
@@ -529,7 +541,7 @@ $(RESULTS_DIR)/3_5_place_dp.odb: $(RESULTS_DIR)/3_4_place_resized.odb
529541
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_place.tcl -metrics $(LOG_DIR)/3_5_opendp.json) 2>&1 | tee $(LOG_DIR)/3_5_opendp.log
530542

531543
$(RESULTS_DIR)/3_place.odb: $(RESULTS_DIR)/3_5_place_dp.odb
532-
cp $< $@
544+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
533545

534546
$(RESULTS_DIR)/3_place.sdc: $(RESULTS_DIR)/2_floorplan.sdc
535547
cp $< $@
@@ -570,7 +582,7 @@ $(RESULTS_DIR)/4_2_cts_fillcell.odb: $(RESULTS_DIR)/4_1_cts.odb
570582
$(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/4_cts.odb
571583

572584
$(RESULTS_DIR)/4_cts.odb: $(RESULTS_DIR)/4_2_cts_fillcell.odb
573-
cp $< $@
585+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
574586

575587
.PHONY: clean_cts
576588
clean_cts:
@@ -608,7 +620,7 @@ endif
608620
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_route.tcl -metrics $(LOG_DIR)/5_2_TritonRoute.json) 2>&1 | tee $(LOG_DIR)/5_2_TritonRoute.log
609621

610622
$(RESULTS_DIR)/5_route.odb: $(RESULTS_DIR)/5_2_route.odb
611-
cp $< $@
623+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
612624

613625
$(RESULTS_DIR)/5_route.sdc: $(RESULTS_DIR)/4_cts.sdc
614626
cp $< $@
@@ -656,7 +668,10 @@ finish: $(LOG_DIR)/6_report.log \
656668
$(RESULTS_DIR)/6_final.v \
657669
$(RESULTS_DIR)/6_final.sdc \
658670
$(GDS_FINAL_FILE)
659-
@printf "%-25s %10s\n" Log "Elapsed seconds"
671+
-@$(UTILS_DIR)/genElapsedTime.py -d "$(LOG_DIR)"
672+
673+
.PHONY:
674+
elapsed:
660675
-@$(UTILS_DIR)/genElapsedTime.py -d "$(LOG_DIR)"
661676

662677
# ==============================================================================
@@ -666,7 +681,7 @@ $(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb $(FILL_CONFIG)
666681
($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/density_fill.tcl -metrics $(LOG_DIR)/6_density_fill.json) 2>&1 | tee $(LOG_DIR)/6_density_fill.log
667682
else
668683
$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb
669-
cp $< $@
684+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
670685
endif
671686

672687
$(RESULTS_DIR)/6_1_fill.sdc: $(RESULTS_DIR)/5_route.sdc
@@ -690,17 +705,17 @@ skip_resize: $(RESULTS_DIR)/3_3_place_gp.odb
690705
.PHONY: skip_cts
691706
skip_cts: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc
692707
# mock all intermediate results
693-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/4_1_cts.odb
694-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/4_2_cts_fillcell.odb
695-
cp $(RESULTS_DIR)/3_place.sdc $(RESULTS_DIR)/4_cts.sdc
696-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/4_cts.odb
708+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 4_1_cts.odb
709+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 4_2_cts_fillcell.odb
710+
cd $(RESULTS_DIR) && ln -sf 3_place.sdc 4_cts.sdc
711+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 4_cts.odb
697712

698713
# Skipping route can be useful to create a mock abstract
699714
.PHONY: skip_route
700715
skip_route: $(RESULTS_DIR)/4_cts.odb $(RESULTS_DIR)/4_cts.sdc
701-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/5_1_grt.odb
702-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/5_2_route.odb
703-
cp $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/6_1_fill.odb
716+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 5_1_grt.odb
717+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 5_2_route.odb
718+
cd $(RESULTS_DIR) && ln -sf 3_place.odb 6_1_fill.odb
704719
touch $(RESULTS_DIR)/6_final.spef
705720

706721
# To create a mock abstract quickly, good enough to iterate quickly on
@@ -743,7 +758,7 @@ $(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSO
743758
$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log
744759

745760
$(GDS_FINAL_FILE): $(GDS_MERGED_FILE)
746-
cp $^ $@
761+
ln -sf $(shell realpath --relative-to=$(dir $@) $<) $@
747762

748763
.PHONY: drc
749764
drc: $(REPORTS_DIR)/6_drc.lyrdb

flow/designs/asap7/mock-array-big/Element/config.mk

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
include designs/asap7/mock-array-big/defaults.mk
2+
13
export DESIGN_NAME = Element
24
export DESIGN_NICKNAME = mock-array-big_Element
35

@@ -10,9 +12,15 @@ export PLACE_DENSITY = 0.50
1012
export GPL_TIMING_DRIVEN = 0
1113
export GPL_ROUTABILITY_DRIVEN = 0
1214

13-
export CORE_AREA = $(shell python3 designs/asap7/mock-array-big/ce_core_area.py)
14-
export DIE_AREA = $(shell python3 designs/asap7/mock-array-big/ce_die_area.py)
15+
export CORE_AREA = $(shell export MOCK_ARRAY_HEIGHT=$(MOCK_ARRAY_HEIGHT) && export MOCK_ARRAY_WIDTH=$(MOCK_ARRAY_WIDTH) && export MOCK_ARRAY_PITCH_SCALE=$(MOCK_ARRAY_PITCH_SCALE) && python3 designs/asap7/mock-array-big/ce_core_area.py)
16+
export DIE_AREA = $(shell export MOCK_ARRAY_HEIGHT=$(MOCK_ARRAY_HEIGHT) && export MOCK_ARRAY_WIDTH=$(MOCK_ARRAY_WIDTH) && export MOCK_ARRAY_PITCH_SCALE=$(MOCK_ARRAY_PITCH_SCALE) && python3 designs/asap7/mock-array-big/ce_die_area.py)
1517

1618
export IO_CONSTRAINTS = designs/asap7/mock-array-big/Element/io.tcl
1719

1820
export PDN_TCL = designs/asap7/mock-array-big/Element/pdn.tcl
21+
22+
# max routing layer need to be set to M5, since M6 is needed for next level up to connect
23+
# to the ring and stipe
24+
export MAX_ROUTING_LAYER = M5
25+
26+
export PRIVATE_DIR=designs/asap7/mock-array-big

0 commit comments

Comments
 (0)