Skip to content

Commit 2eb90cf

Browse files
authored
Merge pull request #106 from d-m-bailey/extract-once
Eliminates duplicate extraction for LVS and OEB checks.
2 parents 19c22e2 + efba02d commit 2eb90cf

7 files changed

Lines changed: 27 additions & 21 deletions

File tree

src/cf_precheck/be_checks/run_cvc

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,22 @@ export RESULTS_DIR=$WORK_ROOT/ext
7575
if [[ $EXTRACT_LAYOUT == yes ]]; then
7676
env RUN_DIR=$RESULTS_DIR CIFIN_STYLE= EXTRACT_STYLE= LOG_FILE=ext.log $LVS_ROOT/run_extract
7777
ext_status=$?
78+
gzip -c -f $RESULTS_DIR/$DESIGN_NAME.gds.spice > $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz
7879
fi
7980

8081
echo " "
8182
echo "Running CVC..."
8283

8384
# Create cdl file from extracted spice file if it doesn't exist
84-
if [[ ! -f $RESULTS_DIR/$DESIGN_NAME.cdl.gz || $RESULTS_DIR/$DESIGN_NAME.gds.spice -nt $RESULTS_DIR/$DESIGN_NAME.cdl.gz ]]; then
85-
if [[ ! -f $RESULTS_DIR/$DESIGN_NAME.gds.spice ]]; then
86-
echo "Could not create cdl file from $RESULTS_DIR/$DESIGN_NAME.gds.spice"
85+
if [[ ! -f $WORK_ROOT/$DESIGN_NAME.cdl.gz || $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz -nt $WORK_ROOT/$DESIGN_NAME.cdl.gz ]]; then
86+
if [[ ! -f $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz ]]; then
87+
echo "Could not create cdl file from $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz"
8788
exit 2
8889
else
89-
echo "Creating $RESULTS_DIR/$DESIGN_NAME.cdl"
90-
$LVS_ROOT/tech/$PDK/spi2cdl $RESULTS_DIR/$DESIGN_NAME.gds.spice |
91-
gzip -c >$RESULTS_DIR/$DESIGN_NAME.cdl.gz
90+
echo "Creating $WORK_ROOT/$DESIGN_NAME.cdl.gz"
91+
gunzip -c $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz |
92+
$LVS_ROOT/tech/$PDK/spi2cdl - |
93+
gzip -c >$WORK_ROOT/$DESIGN_NAME.cdl.gz
9294
fi
9395
fi
9496

src/cf_precheck/be_checks/run_full_lvs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ if [[ $WORK_ROOT != $LOG_ROOT ]]; then
296296
fi
297297
if [[ $WORK_ROOT != $SIGNOFF_ROOT ]]; then
298298
cp $WORK_ROOT/lvs.report $WORK_ROOT/lvs.unflattened $SIGNOFF_ROOT/.
299+
gzip -c $WORK_ROOT/ext/$TOP_LAYOUT.gds.spice > $SIGNOFF_ROOT/$TOP_LAYOUT.gds.spice.gz
299300
fi
300301

301302
# Set exit code

src/cf_precheck/be_checks/run_oeb_check

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,22 @@ export RESULTS_DIR=$WORK_ROOT/ext
8383
if [[ $EXTRACT_LAYOUT == yes ]]; then
8484
env RUN_DIR=$RESULTS_DIR CIFIN_STYLE= EXTRACT_STYLE= LOG_FILE=ext.log $LVS_ROOT/run_extract
8585
ext_status=$?
86+
gzip -c -f $RESULTS_DIR/$DESIGN_NAME.gds.spice > $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz
8687
fi
8788

8889
echo " "
8990
echo "Running CVC for oeb check..."
9091

9192
# Create cdl file from extracted spice file if it doesn't exist
92-
if [[ ! -f $RESULTS_DIR/$DESIGN_NAME.cdl.gz || $RESULTS_DIR/$DESIGN_NAME.gds.spice -nt $RESULTS_DIR/$DESIGN_NAME.cdl.gz ]]; then
93-
if [[ ! -f $RESULTS_DIR/$DESIGN_NAME.gds.spice ]]; then
94-
echo "Could not create cdl file from $RESULTS_DIR/$DESIGN_NAME.gds.spice"
93+
if [[ ! -f $WORK_ROOT/$DESIGN_NAME.cdl.gz || $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz -nt $WORK_ROOT/$DESIGN_NAME.cdl.gz ]]; then
94+
if [[ ! -f $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz ]]; then
95+
echo "Could not create cdl file from $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz"
9596
exit 2
9697
else
97-
echo "Creating $RESULTS_DIR/$DESIGN_NAME.cdl"
98-
$LVS_ROOT/tech/$PDK/spi2cdl $RESULTS_DIR/$DESIGN_NAME.gds.spice |
99-
gzip -c >$RESULTS_DIR/$DESIGN_NAME.cdl.gz
98+
echo "Creating $WORK_ROOT/$DESIGN_NAME.cdl.gz"
99+
gunzip -c $SIGNOFF_ROOT/$DESIGN_NAME.gds.spice.gz |
100+
$LVS_ROOT/tech/$PDK/spi2cdl - |
101+
gzip -c >$WORK_ROOT/$DESIGN_NAME.cdl.gz
100102
fi
101103
fi
102104

src/cf_precheck/be_checks/tech/sky130A/cvcrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CVC_TOP = $DESIGN_NAME
2-
CVC_NETLIST = $RESULTS_DIR/$CVC_TOP.cdl.gz
2+
CVC_NETLIST = $WORK_ROOT/$CVC_TOP.cdl.gz
33
CVC_MODE = $CVC_TOP
44
CVC_MODEL_FILE = $LVS_ROOT/tech/$PDK/cvc.models
55
CVC_POWER_FILE = $WORK_ROOT/cvc.power.$CVC_TOP

src/cf_precheck/be_checks/tech/sky130B/cvcrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CVC_TOP = $DESIGN_NAME
2-
CVC_NETLIST = $RESULTS_DIR/$CVC_TOP.cdl.gz
2+
CVC_NETLIST = $WORK_ROOT/$CVC_TOP.cdl.gz
33
CVC_MODE = $CVC_TOP
44
CVC_MODEL_FILE = $LVS_ROOT/tech/$PDK/cvc.models
55
CVC_POWER_FILE = $WORK_ROOT/cvc.power.$CVC_TOP

src/cf_precheck/check_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ def run(self) -> bool:
5858
(KlayoutZeroArea.__ref__, KlayoutZeroArea),
5959
(SpikeCheck.__ref__, SpikeCheck),
6060
(IllegalCellnameCheck.__ref__, IllegalCellnameCheck),
61-
(Oeb.__ref__, Oeb),
6261
(Lvs.__ref__, Lvs),
62+
(Oeb.__ref__, Oeb),
6363
])
6464

6565

src/cf_precheck/config.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,21 +185,22 @@ def run_be_check(
185185
log_path = f"{output_directory}/logs"
186186
report_path = f"{output_directory}/outputs/reports"
187187
log_file_path = f"{log_path}/{check}_check.log"
188-
tmp_dir = f"{output_directory}/tmp"
189-
190-
for d in [log_path, tmp_dir, f"{output_directory}/outputs", report_path]:
191-
os.makedirs(d, exist_ok=True)
192188

193189
if check == "LVS":
194190
be_script = "run_be_checks"
195191
extra_args = "--nooeb"
192+
tmp_dir = f"{output_directory}/tmp"
196193
elif check == "OEB":
197194
be_script = "run_oeb_check"
198-
extra_args = ""
195+
extra_args = "--noextract" if (Path(report_path) / f"{design_name}.gds.spice.gz").exists() else ""
196+
tmp_dir = f"{output_directory}/tmp_oeb"
199197
else:
200198
logging.error(f"Unknown backend check: {check}")
201199
return False
202200

201+
for d in [log_path, tmp_dir, f"{output_directory}/outputs", report_path]:
202+
os.makedirs(d, exist_ok=True)
203+
203204
be_checks_dir = str(Path(__file__).parent / "be_checks")
204205

205206
be_env: dict = {}
@@ -229,7 +230,7 @@ def run_be_check(
229230

230231
be_env.update(os.environ)
231232
with open(log_file_path, "w") as be_log:
232-
logging.info(f"Running: {be_script}")
233+
logging.info(f"Running: {be_script} {extra_args}")
233234
logging.info(f"{check} output directory: {output_directory}")
234235
p = subprocess.run(be_cmd, stderr=be_log, stdout=be_log, env=be_env)
235236
stat = p.returncode

0 commit comments

Comments
 (0)