OpenROAD-flow-scripts icon indicating copy to clipboard operation
OpenROAD-flow-scripts copied to clipboard

ORFS call to yosys-abc hits assertion if capacitive_load_unit isn't ff

Open jeffng-or opened this issue 9 months ago • 1 comments

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

jeffng-or avatar Mar 28 '25 16:03 jeffng-or

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.

jeffng-or avatar Mar 28 '25 16:03 jeffng-or