Skip to content

Commit e71bba9

Browse files
committed
Merge commit 'refs/pull/1157/head' of https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts into HEAD
2 parents f580d3e + acd9292 commit e71bba9

32 files changed

+1937
-1431
lines changed

flow/Makefile

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,20 @@
77
# ==============================================================================
88

99
# DESIGN_CONFIG=./designs/nangate45/aes/config.mk
10+
# DESIGN_CONFIG=./designs/nangate45/ariane133/config.mk
1011
# DESIGN_CONFIG=./designs/nangate45/ariane136/config.mk
1112
# DESIGN_CONFIG=./designs/nangate45/black_parrot/config.mk
1213
# DESIGN_CONFIG=./designs/nangate45/bp_be_top/config.mk
1314
# DESIGN_CONFIG=./designs/nangate45/bp_fe_top/config.mk
1415
# DESIGN_CONFIG=./designs/nangate45/bp_multi_top/config.mk
16+
# DESIGN_CONFIG=./designs/nangate45/bp_quad/config.mk
1517
# DESIGN_CONFIG=./designs/nangate45/dynamic_node/config.mk
1618
# DESIGN_CONFIG=./designs/nangate45/gcd/config.mk
1719
# DESIGN_CONFIG=./designs/nangate45/ibex/config.mk
1820
# DESIGN_CONFIG=./designs/nangate45/jpeg/config.mk
21+
# DESIGN_CONFIG=./designs/nangate45/mempool_group/config.mk
1922
# DESIGN_CONFIG=./designs/nangate45/swerv/config.mk
2023
# DESIGN_CONFIG=./designs/nangate45/swerv_wrapper/config.mk
21-
# DESIGN_CONFIG=./designs/nangate45/tiny-tests/config.mk
2224
# DESIGN_CONFIG=./designs/nangate45/tinyRocket/config.mk
2325

2426
# DESIGN_CONFIG=./designs/tsmc65lp/aes/config.mk
@@ -41,53 +43,60 @@
4143
# DESIGN_CONFIG=./designs/gf12/ariane/config.mk
4244
# DESIGN_CONFIG=./designs/gf12/ca53/config.mk
4345
# DESIGN_CONFIG=./designs/gf12/coyote/config.mk
44-
# DESIGN_CONFIG=./designs/gf12/dynamic_node/config.mk
4546
# DESIGN_CONFIG=./designs/gf12/gcd/config.mk
4647
# DESIGN_CONFIG=./designs/gf12/ibex/config.mk
4748
# DESIGN_CONFIG=./designs/gf12/jpeg/config.mk
48-
# DESIGN_CONFIG=./designs/gf12/swerv/config.mk
4949
# DESIGN_CONFIG=./designs/gf12/swerv_wrapper/config.mk
5050
# DESIGN_CONFIG=./designs/gf12/tinyRocket/config.mk
5151

52-
# DESIGN_CONFIG=./designs/gf12/bsg_padring/config.mk
53-
# DESIGN_CONFIG=./designs/gf12/bsg_loopback/config.mk
54-
# DESIGN_CONFIG=./designs/gf12/bp_single/config.mk
52+
# DESIGN_CONFIG=./designs/gf12/ariane133/config.mk
5553
# DESIGN_CONFIG=./designs/gf12/bp_dual/config.mk
5654
# DESIGN_CONFIG=./designs/gf12/bp_quad/config.mk
55+
# DESIGN_CONFIG=./designs/gf12/bp_single/config.mk
5756

57+
# DESIGN_CONFIG=./designs/sky130hd/aes/config.mk
58+
# DESIGN_CONFIG=./designs/sky130hd/chameleon/config.mk
59+
# DESIGN_CONFIG=./designs/sky130hd/chameleon_hier/config.mk
60+
# DESIGN_CONFIG=./designs/sky130hd/coyote_tc/config.mk
5861
# DESIGN_CONFIG=./designs/sky130hd/gcd/config.mk
5962
# DESIGN_CONFIG=./designs/sky130hd/ibex/config.mk
60-
# DESIGN_CONFIG=./designs/sky130hd/aes/config.mk
6163
# DESIGN_CONFIG=./designs/sky130hd/jpeg/config.mk
62-
# DESIGN_CONFIG=./designs/sky130hd/coyote_tc/config.mk
63-
# DESIGN_CONFIG=./designs/sky130hd/chameleon/config.mk
64+
# DESIGN_CONFIG=./designs/sky130hd/microwatt/config.mk
6465
# DESIGN_CONFIG=./designs/sky130hd/riscv32i/config.mk
65-
# DESIGN_CONFIG=./designs/sky130hd/chameleon_hier/config.mk
6666

67+
# DESIGN_CONFIG=./designs/sky130hs/aes/config.mk
6768
# DESIGN_CONFIG=./designs/sky130hs/gcd/config.mk
6869
# DESIGN_CONFIG=./designs/sky130hs/ibex/config.mk
69-
# DESIGN_CONFIG=./designs/sky130hs/aes/config.mk
7070
# DESIGN_CONFIG=./designs/sky130hs/jpeg/config.mk
7171
# DESIGN_CONFIG=./designs/sky130hs/riscv32i/config.mk
7272

73+
# DESIGN_CONFIG=./designs/asap7/aes/config.mk
74+
# DESIGN_CONFIG=./designs/asap7/ethmac/config.mk
7375
# DESIGN_CONFIG=./designs/asap7/gcd/config.mk
7476
# DESIGN_CONFIG=./designs/asap7/ibex/config.mk
75-
# DESIGN_CONFIG=./designs/asap7/aes/config.mk
7677
# DESIGN_CONFIG=./designs/asap7/jpeg/config.mk
77-
# DESIGN_CONFIG=./designs/asap7/ethmac/config.mk
78-
# DESIGN_CONFIG=./designs/asap7/uart/config.mk
79-
# DESIGN_CONFIG=./designs/asap7/sha3/config.mk
78+
# DESIGN_CONFIG=./designs/asap7/megaboom/config.mk
79+
# DESIGN_CONFIG=./designs/asap7/mock-array-big/config.mk
8080
# DESIGN_CONFIG=./designs/asap7/riscv32i/config.mk
81+
# DESIGN_CONFIG=./designs/asap7/sha3/config.mk
8182
# DESIGN_CONFIG=./designs/asap7/swerv_wrapper/config.mk
83+
# DESIGN_CONFIG=./designs/asap7/uart-blocks/config.mk
84+
# DESIGN_CONFIG=./designs/asap7/uart/config.mk
85+
86+
# DESIGN_CONFIG=./designs/intel16/aes/config.mk
87+
# DESIGN_CONFIG=./designs/intel16/gcd/config.mk
8288

83-
# DESIGN_CONFIG=./designs/intel22/gcd/config.mk
8489
# DESIGN_CONFIG=./designs/intel22/aes/config.mk
90+
# DESIGN_CONFIG=./designs/intel22/gcd/config.mk
91+
# DESIGN_CONFIG=./designs/intel22/ibex/config.mk
92+
# DESIGN_CONFIG=./designs/intel22/jpeg/config.mk
8593

8694
# DESIGN_CONFIG=./designs/gf180/aes/config.mk
8795
# DESIGN_CONFIG=./designs/gf180/ibex/config.mk
8896
# DESIGN_CONFIG=./designs/gf180/jpeg/config.mk
8997
# DESIGN_CONFIG=./designs/gf180/riscv32i/config.mk
9098
# DESIGN_CONFIG=./designs/gf180/sha3/config.mk
99+
# DESIGN_CONFIG=./designs/gf180/uart-blocks/config.mk
91100
#
92101
# Default design
93102
DESIGN_CONFIG ?= ./designs/nangate45/gcd/config.mk

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,8 @@ export PDN_TCL = designs/asap7/mock-array/Element/pdn.tcl
3636
# At time of adding this option, only 3 iterations were needed for 0
3737
# violations.
3838
export DETAILED_ROUTE_ARGS=-bottom_routing_layer M2 -top_routing_layer M5 -save_guide_updates -verbose 1 -droute_end_iter 10
39+
40+
# since we are specifying DETAILED_ROUTE_ARGS, we need to communicate the
41+
# same information to other stages in the flow.
42+
export MIN_ROUTING_LAYER = M2
43+
export MAX_ROUTING_LAYER = M5

flow/designs/asap7/mock-array/README.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,87 @@ Now build the design as usual:
3333
```
3434
make
3535
```
36+
37+
Element/constraint.sdc
38+
----------------------
39+
40+
A relatively simple constraint.sdc is adequate for the Element as
41+
timing is exported when the Element macro is made and checked at the
42+
mock-array-big level.
43+
44+
Note that a failure on timing at the Element level is
45+
not a problem, as long as timing is met at the mock-array-big level.
46+
47+
The purpose of the constraint.sdc file at the Element level is to
48+
be able to iterate on the Element during development and work on,
49+
for instance, maximum operating frequency changes in the Verilog,
50+
but also to give the tools some guidance on how to optimize the
51+
macro.
52+
53+
Optimizing Element/constraint.sdc
54+
---------------------------------
55+
56+
Before considering the various strategies to articulate an Element/constraint.sdc
57+
file below, note that no tests have been run to verify that these
58+
different constraint.sdc changes below have any effects on the quality
59+
of results at the mock-array-big level. If there are no substantial
60+
differences in quality of results and timing is met, then the differences
61+
between the strategies below are inconsequential.
62+
63+
A single macro is made for all the elements in the array, though strictly
64+
speaking each macro is unique in that the timing constraints of each element
65+
in the array is different.
66+
67+
To illustrate, consider the `assign io_lsbOuts_0 = io_lsbIns_1;` statement in Element.v.
68+
Here a signal is routed from left to right, through the Element without the signal
69+
being registered.
70+
71+
Clearly, the maximum input delay for `io_lsbIns_1` is
72+
smaller for the leftmost than for the rightmost Element.
73+
74+
Taking a step back, it is also worth considering what level of detail is
75+
appropriate for the Element's constraint.sdc file.
76+
77+
In the beginning of a project, during exploration, the .sdc file does not
78+
need to be particularly detailed. In fact, details can be counterproductive,
79+
as they tend to be inaccurate and cause the tools to spend time solving potential non-issues.
80+
81+
Consider minimum input delay, which relates to hold times. If the main concern
82+
of architectural exploration is to ensure that the design can operate on a
83+
sufficiently high frequency, then specifying minimum input delays during
84+
exploration is premature. Minimum input delay is a constraint that belongs at
85+
the end the development cycle when the design is well established and won't change
86+
and the concern is to lock down the macro for its specific operating frequency.
87+
88+
Choosing a strategy for Element/constraint.sdc combinational paths
89+
------------------------------------------------------------------
90+
91+
It isn't possible to articulate a single .sdc file that exactly captures the
92+
constraints of an Element as each element is used in unique circumstances.
93+
Instead, a choice has to made and each choice has its pros and cons.
94+
95+
It is relatively easy to set up a maximum input/output delay for paths
96+
that start or end in a register, so this case is not discussed here.
97+
98+
It is the combinational(unregistered) in -> out
99+
paths that are tricky to create constraints for.
100+
101+
- Strategy used as of writing: mark non-registered/combinational paths through
102+
the Element as false paths. This will not steer the tools to optimize the
103+
through element path, such as discussed above and there's no timing information
104+
available at the Element level for these combinational paths.
105+
However, at the `MockArray` level when the Elements are used, timing will
106+
be checked, because the .lib file generated for the Element contains timing
107+
information, even for false paths.
108+
- Use `set_max_delay` for combinational paths. This will make the tool try
109+
to optimize the combinational path and there will be timing information available.
110+
However, path segmentation could occur with OpenSTA. Refer [here](https://docs.xilinx.com/r/2020.2-English/ug906-vivado-design-analysis/TIMING-13-Timing-Paths-Ignored-Due-to-Path-Segmentation).
111+
- Overconstrain: set up a maximum input/output path for the element and ignore
112+
timing violations at the Element level for combinational paths.
113+
The timing violations for the combinational paths are not real violations,
114+
because the maximum input and output paths can not occur at the same time
115+
in the array. The leftmost Element has the shortest maximum input path and
116+
and the rightmost the longest maximum input path for
117+
`assign io_lsbOuts_0 = io_lsbIns_1;`. The OpenROAD tool could put too much
118+
emphasis on optimising the combinational path in this case, which could
119+
lead to less than optimal results and/or inflated run times.

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,8 @@ verilog:
4545
# At time of adding this option, only 12 iterations were needed for 0
4646
# violations.
4747
export DETAILED_ROUTE_ARGS=-bottom_routing_layer M2 -top_routing_layer M7 -save_guide_updates -verbose 1 -droute_end_iter 15
48+
49+
# since we are specifying DETAILED_ROUTE_ARGS, we need to communicate the
50+
# same information to other stages in the flow.
51+
export MIN_ROUTING_LAYER = M2
52+
export MAX_ROUTING_LAYER = M7

0 commit comments

Comments
 (0)