Skip to content

Commit 8e14e65

Browse files
committed
Merge remote-tracking branch 'private/master' into secure-gpl-reduce-TD-iterations
2 parents 5de3c5f + 2d85a03 commit 8e14e65

File tree

5 files changed

+122
-11
lines changed

5 files changed

+122
-11
lines changed

docs/user/FlowVariables.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ configuration file.
239239
| <a name="SYNTH_MINIMUM_KEEP_SIZE"></a>SYNTH_MINIMUM_KEEP_SIZE| For hierarchical synthesis, we keep modules of larger area than given by this variable and flatten smaller modules. The area unit used is the size of a basic nand2 gate from the platform's standard cell library. The default value is platform specific.| 0|
240240
| <a name="SYNTH_NETLIST_FILES"></a>SYNTH_NETLIST_FILES| Skips synthesis and uses the supplied netlist files. If the netlist files contains duplicate modules, which can happen when using hierarchical synthesis on indvidual netlist files and combining here, subsequent modules are silently ignored and only the first module is used.| |
241241
| <a name="SYNTH_OPT_HIER"></a>SYNTH_OPT_HIER| Optimize constants across hierarchical boundaries.| |
242-
| <a name="SYNTH_RETIME_MODULES"></a>SYNTH_RETIME_MODULES| List of modules to apply retiming to. These modules must not get dissolved and as such they should either be the top module or be included in SYNTH_KEEP_MODULES. This is an experimental option and may cause adverse effects.| |
242+
| <a name="SYNTH_RETIME_MODULES"></a>SYNTH_RETIME_MODULES| *This is an experimental option and may cause adverse effects.* *No effort has been made to check if the retimed RTL is logically equivalent to the non-retimed RTL.* List of modules to apply automatic retiming to. These modules must not get dissolved and as such they should either be the top module or be included in SYNTH_KEEP_MODULES. The main use case is to quickly identify if performance can be improved by manually retiming the input RTL. Retiming will treat module ports like register endpoints/startpoints. The objective function of retiming isn't informed by SDC, even the clock period is ignored. As such, retiming will optimize for best delay at potentially high register number cost. Automatic retiming can produce suboptimal results as its timing model is crude and it doesn't find the optimal distribution of registers on long pipelines. See OR discussion #8080.| |
243243
| <a name="SYNTH_WRAPPED_OPERATORS"></a>SYNTH_WRAPPED_OPERATORS| Synthesize multiple architectural options for each arithmetic operator in the design. These options are available for switching among in later stages of the flow.| |
244244
| <a name="TAPCELL_TCL"></a>TAPCELL_TCL| Path to Endcap and Welltie cells file.| |
245245
| <a name="TAP_CELL_NAME"></a>TAP_CELL_NAME| Name of the cell to use in tap cell insertion.| |

etc/DependencyInstaller.sh

Lines changed: 100 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ _installCommon() {
6363
fi
6464
}
6565

66-
_installCentosCleanUp() {
66+
# Enterprise Linux 7 cleanup
67+
_install_EL7_CleanUp() {
6768
yum clean -y all
6869
rm -rf /var/lib/apt/lists/*
6970
}
7071

71-
_installCentosPackages() {
72+
# Enterprise Linux 7 package installation (EL7 = RHEL 7 or CentOS 7)
73+
_install_EL7_Packages() {
7274
yum -y update
7375
yum -y install \
7476
time \
@@ -89,6 +91,67 @@ _installCentosPackages() {
8991
fi
9092
}
9193

94+
95+
# Enterprise Linux 8/9 cleanup
96+
_install_EL8_EL9_CleanUp() {
97+
dnf clean -y all
98+
rm -rf /var/lib/apt/lists/*
99+
}
100+
101+
# Enterprise Linux 8/9 package installation (EL8/EL9 = RHEL, Rocky Linux, AlmaLinux, or CentOS 8 as no CentOS 9 exists)
102+
_install_EL8_EL9_Packages() {
103+
# Re-detect EL version for appropriate KLayout package
104+
if [[ -f /etc/os-release ]]; then
105+
elVersion=$(awk -F= '/^VERSION_ID/{print $2}' /etc/os-release | sed 's/"//g' | cut -d. -f1)
106+
else
107+
echo "ERROR: Could not detect Enterprise Linux version"
108+
exit 1
109+
fi
110+
111+
# EL8 and EL9 use `dnf`, instead of `yum`
112+
dnf -y update
113+
dnf -y install \
114+
time \
115+
ruby \
116+
ruby-devel
117+
118+
# Install KLayout based on EL version, note the different URLs
119+
case "${elVersion}" in
120+
"8")
121+
if ! [ -x "$(command -v klayout)" ]; then
122+
dnf -y install https://www.klayout.org/downloads/CentOS_8/klayout-${klayoutVersion}-0.x86_64.rpm
123+
else
124+
currentVersion=$(klayout -v | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
125+
if _versionCompare "$currentVersion" -ge $klayoutVersion; then
126+
echo "KLayout version greater than or equal to ${klayoutVersion}"
127+
else
128+
echo "KLayout version less than ${klayoutVersion}"
129+
sudo dnf remove -y klayout
130+
dnf -y install https://www.klayout.org/downloads/CentOS_8/klayout-${klayoutVersion}-0.x86_64.rpm
131+
fi
132+
fi
133+
;;
134+
"9")
135+
if ! [ -x "$(command -v klayout)" ]; then
136+
dnf -y install https://www.klayout.org/downloads/RockyLinux_9/klayout-${klayoutVersion}-0.x86_64.rpm
137+
else
138+
currentVersion=$(klayout -v | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
139+
if _versionCompare "$currentVersion" -ge $klayoutVersion; then
140+
echo "KLayout version greater than or equal to ${klayoutVersion}"
141+
else
142+
echo "KLayout version less than ${klayoutVersion}"
143+
sudo dnf remove -y klayout
144+
dnf -y install https://www.klayout.org/downloads/RockyLinux_9/klayout-${klayoutVersion}-0.x86_64.rpm
145+
fi
146+
fi
147+
;;
148+
*)
149+
echo "ERROR: Unsupported Enterprise Linux version: ${elVersion}"
150+
exit 1
151+
;;
152+
esac
153+
}
154+
92155
_installUbuntuCleanUp() {
93156
apt-get autoclean -y
94157
apt-get autoremove -y
@@ -365,15 +428,45 @@ case "${platform}" in
365428
esac
366429

367430
case "${os}" in
368-
"CentOS Linux" )
431+
"CentOS Linux" | "Red Hat Enterprise Linux"* | "AlmaLinux" | "Rocky Linux")
432+
# Enterprise Linux support - dispatch based on specific version
369433
if [[ ${CI} == "yes" ]]; then
370434
echo "WARNING: Installing CI dependencies is only supported on Ubuntu 22.04" >&2
371435
fi
372-
_installORDependencies
373-
if [[ "${option}" == "base" || "${option}" == "all" ]]; then
374-
_installCentosPackages
375-
_installCentosCleanUp
436+
437+
# Detect EL version to choose appropriate functions
438+
if [[ -f /etc/os-release ]]; then
439+
elVersion=$(awk -F= '/^VERSION_ID/{print $2}' /etc/os-release | sed 's/"//g' | cut -d. -f1)
440+
else
441+
echo "ERROR: Could not detect Enterprise Linux version" >&2
442+
exit 1
376443
fi
444+
445+
# First install OpenROAD base
446+
_installORDependencies
447+
448+
# Determine between EL7 vs EL8/9, since yum vs dnf should be used, and different Klayout builds exist
449+
case "${elVersion}" in
450+
"7")
451+
# EL7 = RHEL 7 or CentOS 7
452+
if [[ "${option}" == "base" || "${option}" == "all" ]]; then
453+
_install_EL7_Packages
454+
_install_EL7_CleanUp
455+
fi
456+
;;
457+
"8"|"9")
458+
# EL8/EL9 = RHEL, Rocky Linux, AlmaLinux, or CentOS 8+
459+
if [[ "${option}" == "base" || "${option}" == "all" ]]; then
460+
_install_EL8_EL9_Packages
461+
_install_EL8_EL9_CleanUp
462+
fi
463+
;;
464+
*)
465+
echo "ERROR: Unsupported Enterprise Linux version: ${elVersion}" >&2
466+
exit 1
467+
;;
468+
esac
469+
377470
if [[ "${option}" == "common" || "${option}" == "all" ]]; then
378471
_installCommon
379472
fi

flow/scripts/abc_retime.script

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
st
22
retime -v -o
3+
retime -M 5 -v -o
4+
retime -M 5 -v -o
5+
retime -M 5 -v -o
36
map

flow/scripts/final_report.tcl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ if {
5454
}
5555
} else {
5656
puts "OpenRCX is not enabled for this platform."
57+
puts "Falling back to global route-based estimates."
58+
log_cmd estimate_parasitics -global_routing
5759
}
5860

5961
report_cell_usage

flow/scripts/variables.yaml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,23 @@ SYNTH_CANONICALIZE_TCL:
202202
- synth
203203
SYNTH_RETIME_MODULES:
204204
description: >
205-
List of modules to apply retiming to. These modules must not get
205+
*This is an experimental option and may cause adverse effects.*
206+
*No effort has been made to check if the retimed RTL is logically equivalent
207+
to the non-retimed RTL.*
208+
209+
List of modules to apply automatic retiming to. These modules must not get
206210
dissolved and as such they should either be the top module or be included
207-
in SYNTH_KEEP_MODULES. This is an experimental option and may cause adverse
208-
effects.
211+
in SYNTH_KEEP_MODULES.
212+
213+
The main use case is to quickly identify if performance can be improved by
214+
manually retiming the input RTL.
215+
216+
Retiming will treat module ports like register endpoints/startpoints.
217+
The objective function of retiming isn't informed by SDC, even the clock
218+
period is ignored. As such, retiming will optimize for best delay
219+
at potentially high register number cost. Automatic retiming can produce
220+
suboptimal results as its timing model is crude and it doesn't find the
221+
optimal distribution of registers on long pipelines. See OR discussion #8080.
209222
stages:
210223
- synth
211224
LATCH_MAP_FILE:

0 commit comments

Comments
 (0)