ORFS call to yosys-abc hits assertion if capacitive_load_unit isn't ff
Subject
[Flow] for any util, flow Makefile, or flow script issues.
Describe the bug
If the first Liberty file that is listed in LIB_FILES has capacitive_load_unit set to anything other than "ff", the ORFS call to yosys-abc (via yosys) fails with an assertion error that is hidden from the ORFS user.
What the ORFS user sees is:
24. Executing ABC pass (technology mapping using ABC).
24.1. Extracting gate netlist of module `\gcd' to `<abc-temp-dir>/input.blif'..
24.1.1. Executing ABC.
ERROR: ABC: execution of command ""/home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/tools/install/yosys/bin/yosys-abc" -s -f /tmp/yosys-abc-6lOhd2/abc.script 2>&1" failed: return code 134.
Command exited with non-zero status 1
Expected Behavior
yosys-abc (and more specifically abc) should be able to handle a capacitive_load_unit other than ff and scale the values accordingly for their own use.
Environment
ORFS 344623d0a158d1385a920da5dda85d157eb65386 (Jeff's branch with the mods to ASAP7 for repro)
Can also use https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/pull/3010
To Reproduce
make DESIGN_CONFIG=designs/asap7/gcd/config.mk
The contents of the abc script that gets executed and generates the assertion:
echo + read_blif "/tmp/yosys-abc-6lOhd2/input.blif";
read_blif "/tmp/yosys-abc-6lOhd2/input.blif";
echo + read_lib -X "*x1p*_ASAP7*" -X "*xp*_ASAP7*" -X "SDF*" -X "ICG*" -w "/ho
me/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/./objects/asap7/gcd/base/lib/mer
ged.lib" ;
read_lib -X "*x1p*_ASAP7*" -X "*xp*_ASAP7*" -X "SDF*" -X "ICG*" -w "/home/jeff
ng/dev/vt_ref/OpenROAD-flow-scripts/flow/./objects/asap7/gcd/base/lib/merged.lib
" ;
echo + read_constr -v "/home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/./obje
cts/asap7/gcd/base/abc.constr";
read_constr -v "/home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/./objects/asa
p7/gcd/base/abc.constr";
echo + source /home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/scripts/abc_spe
ed.script;
source /home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/scripts/abc_speed.scri
pt;
echo + write_blif /tmp/yosys-abc-6lOhd2/output.blif;
write_blif /tmp/yosys-abc-6lOhd2/output.blif
Relevant log output
Screenshots
No response
Additional Context
No response
The ABC assertion is:
+ source /home/jeffng/dev/vt_ref/OpenROAD-flow-scripts/flow/scripts/abc_speed.script
yosys-abc: src/map/scl/sclSize.h:154: abc::SC_Man *abc::Abc_SclManAlloc(abc::SC_Lib *, abc::Abc_Ntk_t *): Assertion `pLib->unit_cap_snd == 15' failed.
unit_cap_snd is the exponent for the cap_load_unit statement (unit_cap_fst is the value).
In this case cap_load_unit(0.001,pf) is equivalent to cap_load_unit(1,ff), but abc doesn't check that.
Ideally, unit_cap_snd and unit_cap_fst are converted into whatever abc expects and then that's checked. Or just handle the scaling like most other tools do.