Skip to content

Commit 21506f1

Browse files
authored
Merge pull request #2807 from Pinata-Consulting/asap7-minimal-readme
designs/asap7/minimal: getting started README.md
2 parents fb2a713 + b76815e commit 21506f1

File tree

10 files changed

+163
-0
lines changed

10 files changed

+163
-0
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ To build from your own git repository:
107107
cd /home/me/myproject
108108
make --file=~/OpenROAD-flow-scripts/flow/Makefile DESIGN_CONFIG=somefolder/config.mk ...
109109

110+
## Running a quick smoke-test of ORFS on your own Verilog
111+
112+
You can [run ORFS on your own Verilog files](./flow/designs/asap7/minimal/README.md)
113+
without setting up a project or moving your Verilog files and even learn
114+
a thing or two about floorplan, placement and routing
115+
before you create an .sdc file and a config.mk file.
116+
110117
## Citing this Work
111118

112119
If you use this software in any published work, we would appreciate a citation!
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Report on a design prior to setting up a configuration
2+
3+
This configuration allows running synthesis and floorplan
4+
to extract some basic information useful when setting
5+
up a config.mk file from scratch.
6+
7+
Below, instructions are given to run synthesis, floorplan, placement and
8+
global route, then examine the results in the GUI to see what a
9+
realistic floorplan and settings might be for your Verilog files.
10+
11+
The example below uses the designs/src/aes/*.v Verilog files, but
12+
the Verilog files do not have to be located in the OpenROAD-flow-scripts
13+
git repository, adjust the VERILOG_FILES argument to point to your Verilog
14+
files:
15+
16+
```
17+
make DESIGN_CONFIG=designs/asap7/minimal/config.mk DESIGN_NAME=aes_cipher_top VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)" clean_synth synth gui_synth
18+
```
19+
20+
Where, the exploratory config.mk file to be replaced
21+
by a design specific config.mk file is:
22+
23+
```
24+
DESIGN_CONFIG=designs/asap7/minimal/config.mk
25+
```
26+
27+
Verilog files that to be investigated are specified by:
28+
29+
```
30+
VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)"
31+
```
32+
33+
The Verilog top module name is specified by:
34+
35+
```
36+
DESIGN_NAME=aes_cipher_top
37+
```
38+
39+
Synthesis cleaned and re-run by:
40+
41+
```
42+
clean_synth synth
43+
```
44+
45+
The GUI is opened by the makefile target:
46+
47+
```
48+
gui_synth
49+
```
50+
51+
## `make gui_synth` OpenROAD GUI information
52+
53+
![Alt text](gui_synth.png)
54+
55+
The module hierarchy can here be examined to give a sense of
56+
area required for the default placement density.
57+
58+
## `make gui_floorplan` OpenROAD GUI information
59+
60+
Next to iterate on floorplan settings:
61+
62+
```
63+
make DESIGN_CONFIG=designs/asap7/minimal/config.mk DESIGN_NAME=aes_cipher_top VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)" clean_floorplan floorplan gui_floorplan
64+
```
65+
66+
A few more things can be learned from looking at this minimal floorplan:
67+
68+
- The pins are placed randomly on the edges and at least there
69+
is enough space on the edges to fit the top level pins
70+
- Check that the floorplan size is not completely unreasonable and
71+
at least there is a chance that this design could go through
72+
placement with this density.
73+
74+
![Alt text](gui_floorplan.png)
75+
76+
## `make gui_place` OpenROAD GUI information
77+
78+
Next to iterate on placement settings:
79+
80+
```
81+
make DESIGN_CONFIG=designs/asap7/minimal/config.mk DESIGN_NAME=aes_cipher_top VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)" clean_place place gui_place
82+
```
83+
84+
![Alt text](gui_place_heatmap.png)
85+
86+
![Alt text](gui_place_module.png)
87+
88+
From placement more information about how to set up the config.mk
89+
file can be learned:
90+
91+
- Examine estimated routing congestion to get a sense if there
92+
is a chance that the design can be routed.
93+
- Get a sense of size and location of modules
94+
95+
## CTS(Clock tree Synthesis)
96+
97+
After placement, CTS (clock tree synthesis is run). However the minimal design does
98+
not have a clock, so CTS runs quickly, but does nothing.
99+
100+
## `make gui_grt` OpenROAD GUI information
101+
102+
For non-trivial designs, some more work will need to be done in floorplan and
103+
placement before there is a chance that global routing will complete:
104+
105+
```
106+
make DESIGN_CONFIG=designs/asap7/minimal/config.mk DESIGN_NAME=aes_cipher_top VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)" clean_place place gui_place
107+
```
108+
109+
![Alt text](gui_grt.png)
110+
111+
Global routing congestion heatmap can be examined in the GUI.
112+
113+
## Next steps
114+
115+
Start creating a config.mk file for your design, write an .sdc file to
116+
examine timing and find reasonable values for the CORE_UTILIZATION
117+
and PLACE_DENSITY for your design considering routing congestion.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export DESIGN_NICKNAME = minimal
2+
export SDC_FILE = $(FLOW_HOME)/designs/asap7/minimal/empty.sdc
3+
export PLATFORM = asap7
4+
# Faster build and more information in GUI with hierarchical synthesis
5+
export SYNTH_HIERARCHICAL ?= 1
6+
# Keep all modules so we can examine the full hierarchy
7+
export MAX_UNGROUP_SIZE ?= 0
8+
9+
# Set the core utilization to 10% for the minimal design to
10+
# maximize chances of getting an initial floorplan. This
11+
# provides a generous area, yet not so big as to make making
12+
# floorplan problematic
13+
export CORE_UTILIZATION ?= 10
14+
# Low placement density to maximize chances of getting a floorplan
15+
export PLACE_DENSITY ?= 0.20
16+
17+
# This won't work with an empty .sdc file
18+
export SKIP_REPORT_METRICS = 1
19+
20+
# Faster build, remove these in your own config.mk
21+
export SKIP_CTS_REPAIR_TIMING = 1
22+
export REMOVE_ABC_BUFFERS = 1
23+
export SKIP_INCREMENTAL_REPAIR = 1
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Creating a basic .sdc file is beyond the scope of
2+
# simple configuration, much as writing Verilog is.
201 KB
Loading
601 KB
Loading
853 KB
Loading
593 KB
Loading
250 KB
Loading

flow/test/test_outoftree.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
#
3+
# deltaDebug.py integration smoke-test, run from ORFS/flow folder.
4+
#
5+
# Exit with error if anything is amiss, including evaluation of
6+
# variable names such as $(false), unused variables, etc.
7+
set -x -ue -o pipefail
8+
9+
cd "$(dirname "$0")/.."
10+
rm -rf results/outoftree/
11+
mkdir -p results/outoftree/
12+
cd results/outoftree/
13+
cp ../../designs/src/aes/* .
14+
make --file=../../Makefile DESIGN_CONFIG=../../designs/asap7/minimal/config.mk DESIGN_NAME=aes_cipher_top VERILOG_FILES="$(ls *.v | xargs)" grt

0 commit comments

Comments
 (0)