caravel does not pass device-level LVS without PDK modifications
This is a list of the problems encountered (and workarounds) to run full device level LVS on an empty instance of caravel using run_full_lvs of the caravel branch of https://github.com/d-m-bailey/extra_be_checks.git.
- Add
SUBCUTtogpio_control_blocklayout aroundgpio_logic_high. - Modify the
chip_iolayout cells according to https://github.com/efabless/caravel/pull/29 - The above layout modifications require patched versions of
sky130_ef_io.spiceandsky130_fd_io.spicewhich are included inextra_be_checks/spice. - Remove property comparison for
res_generic_po,res_generic_li, andres_generic_m*.chip_iocircuits use the same subcells in schematic with sizes that don't correspond to multiple different layouts. Fix is inextra_be_checkssetup file. - Ignore
__fill_*,__tapvpwrvgnd_, and__fakediode_when comparing. These cells are not included in some of thecaravelblocks. Fix is inextra_be_checkssetup file. - Create
user_project_wrapper.vgl verilog from__user_project_wrapper.vrtl verilog. Fix is inextra_be_checks/verilog. - Patch
sky130_fd_sc_hd.spiceandsky130_fd_sc_hvl.spicewith correct diodepjparameters. Patched files are inextra_be_checks/spice. - Change
vdda1_core,vdda2_core,vssa1_core,vssa2_core,vccd1_core,vccd2_core,vssd1_core,vssd2_core,vssd_core, andvccd_corefrom wires to pins. The layout has text and with cifinput(vendor), text are converted to pins. NOTE:vdda_core,vssa_core,vssio_core, andvddio_coreremain as wires. Will submit a pull request for an (untested) patch to the rtl.
To run:
git clone -b caravel https://github.com/d-m-bailey/extra_be_checks.git
export LVS_ROOT=$PWD/extra_be_checks
export LOG_ROOT=<the log root>
export SIGNOFF_ROOT=<the log root>
export WORK_ROOT=<the work root>
export CARAVEL_ROOT=<the caravel root>
export MCW_ROOT=<the mcw root>
$LVS_ROOT/run_be_checks caravel <gate level caravel verilog> <gds file>
Default referenced files are listed in $WORK_ROOT/spice_files and $WORK_ROOT/verilog_files.
I don't know how to submit pull requests for layout or spice files.
There are still size errors in chip_io. Sometimes netgen reports size errors instead of lvs errors. Currently investigating.
Thank you @d-m-bailey , point 1 is done and currently on caravel_redesign branch
Caravel passed LVS a few days ago, so this issue will be closed. However, for the record, note that all required changes to library cells are PDK issues, and tickets are being generated in the open_pdks repository to handle them. Meanwhile, we are using a method of getting the design LVS clean on the top level with abstracted I/O cells, and passing that design off to Mitch to apply PDK changes and verify that the design passes LVS down to the device level.
This issue will be renamed to reflect that LVS is still not passing at the device level using the current PDK, and will remain open until such time as we can run LVS at the device level with no special modifications. It is still a high priority item but currently does not block tapeout.