Skip to content

Commit 7b65074

Browse files
committed
designs/asap7/minimal: getting started README.md
Signed-off-by: Øyvind Harboe <[email protected]>
1 parent 461ad79 commit 7b65074

File tree

8 files changed

+133
-0
lines changed

8 files changed

+133
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
Report on a design prior to setting up a configuration
2+
======================================================
3+
4+
This configuration allows running synthesis and floorplan
5+
to extract some basic information useful when setting
6+
up a config.mk file from scratch.
7+
8+
The plan is to run synthesis, then examine the results in the
9+
GUI to see what a realistic floorplan might be:
10+
11+
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
12+
13+
Where, the exploratory config.mk file to be replaced
14+
by a design specific config.mk file is:
15+
16+
DESIGN_CONFIG=designs/asap7/minimal/config.mk
17+
18+
Verilog files that to be investigated are specified by:
19+
20+
VERILOG_FILES="$(ls designs/src/aes/*.v | xargs)"
21+
22+
The Verilog top module name is specified by:
23+
24+
DESIGN_NAME=gcd
25+
26+
Synthesis cleaned and re-run by:
27+
28+
clean_synth synth
29+
30+
The GUI is opened by the makefile target:
31+
32+
gui_synth
33+
34+
`make gui_synth` OpenROAD GUI information
35+
-----------------------------------------
36+
37+
![Alt text](gui_synth.png)
38+
39+
The module hierarchy can here be examined to give a sense of
40+
area required for the default placement density.
41+
42+
`make gui_floorplan` OpenROAD GUI information
43+
---------------------------------------------
44+
45+
Next to iterate on floorplan settings:
46+
47+
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
48+
49+
A few more things can be learned from looking at this minimal floorplan:
50+
51+
- The pins are placed randomly on the edges and at least there
52+
is enough space on the edges to fit the top level pins
53+
- Check that the floorplan size is not completely unreasonable and
54+
at least there is a chance that this design could go through
55+
placement with this density.
56+
57+
![Alt text](gui_floorplan.png)
58+
59+
`make gui_place` OpenROAD GUI information
60+
-----------------------------------------
61+
62+
Next to iterate on placement settings:
63+
64+
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
65+
66+
![Alt text](gui_place_heatmap.png)
67+
68+
![Alt text](gui_place_module.png)
69+
70+
From placement more information about how to set up the config.mk
71+
file can be learned:
72+
73+
- Examine estimated routing congestion to get a sense if there
74+
is a chance that the design can be routed.
75+
- Get a sense of size and location of modules
76+
77+
CTS(Clock tree Synthesis)
78+
-------------------------
79+
80+
After placement, CTS (clock tree synthesis is run). However the minimal design does
81+
not have a clock, so CTS runs quickly, but does nothing.
82+
83+
`make gui_grt` OpenROAD GUI information
84+
-----------------------------------------
85+
86+
For non-trivial designs, some more work will need to be done in floorplan and
87+
placement before there is a chance that global routing will complete:
88+
89+
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
90+
91+
![Alt text](gui_grt.png)
92+
93+
Global routing congestion heatmap can be examined in the GUI.
94+
95+
Next steps
96+
----------
97+
98+
Start creating a config.mk file for your design, write an .sdc file to
99+
examine timing and find reasonable values for the CORE_UTILIZATION
100+
and PLACE_DENSITY for your design considering routing congestion.
101+
102+
Building from your own git repository
103+
=====================================
104+
105+
ORFS, OpenROAD-flow-scripts, supports setting up a config.mk file
106+
in your own git repository without the need to fork ORFS. It is
107+
also possible to perform some preliminary builds of your Verilog
108+
files to examine the results in the OpenROAD GUI.
109+
110+
To build from your own git repository:
111+
112+
FLOW_HOME=~/OpenROAD-flow-scripts/flow make --file=~/OpenROAD-flow-scripts/flow/Makefile DESIGN_CONFIG=config.mk ...
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export DESIGN_NICKNAME = minimal
2+
export SDC_FILE = 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+
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

0 commit comments

Comments
 (0)