| # LVS Documentation |
| |
| Explains how to use the runset. |
| |
| ## Folder Structure |
| |
| ```text |
| π lvs |
| β£ πtesting Testing environment directory for GF180ULL LVS. |
| β£ πrule_decks All LVS rule decks used in GF180ULL. |
| β£ πgf_018ULL.lvs Main LVS rule deck that call all runsets. |
| β£ πREADME.md This file to document the LVS run for GF180ULL. |
| β πrun_lvs.py Main python script used for GF180ULL LVS. |
| ``` |
| |
| ## **Prerequisites** |
| You need the following set of tools installed to be able to run GF180ULL LVS: |
| - Python 3.6+ |
| - KLayout 0.28.4+ |
| |
| ## **Usage** |
| |
| The `run_lvs.py` script takes your input gds and netlist files to run LVS rule deck of GF180ULL technology on it with switches to select subsets of all checks. |
| |
| ```bash |
| run_lvs.py (--help| -h) |
| run_lvs.py (--layout=<layout_path>) (--netlist=<netlist_path>) (--variant=<combined_options>) [--thr=<thr>] [--run_dir=<run_dir_path>] [--topcell=<topcell_name>] [--run_mode=<run_mode>] [--verbose] [--lvs_sub=<sub_name>] [--no_net_names] [--spice_comments] [--scale] [--schematic_simplify] [--net_only] [--top_lvl_pins] [--combine] [--purge] [--purge_nets] |
| ``` |
| |
| Example: |
| ```bash |
| python3 run_lvs.py --layout=testing/testcases/extraction_checking/nfet_01v8.gds --netlist=testing/testcases/extraction_checking/nfet_01v8.cdl --variant=C --run_mode=deep --run_dir=lvs_switch_checking --lvs_sub=vdd! |
| ``` |
| |
| ### Options |
| |
| - `--help -h` Print this help message. |
| |
| - `--layout=<layout_path>` The input GDS file path. |
| |
| - `--netlist=<netlist_path>` The input netlist file path. |
| |
| - `--variant=<combined_options>` Select combined options of metal_top, mim_option, and metal_level. Allowed values (A, B, C). |
| - variant=A: Select metal_top=30K mim_option=A metal_level=3LM poly_res=1K, and mim_cap=2 |
| - variant=B: Select metal_top=11K mim_option=B metal_level=4LM poly_res=1K, and mim_cap=2 |
| - variant=C: Select metal_top=9K mim_option=B metal_level=5LM poly_res=1K, and mim_cap=2 |
| |
| - `--thr=<thr>` The number of threads used in run. |
| |
| - `--run_dir=<run_dir_path>` Run directory to save all the results [default: pwd] |
| |
| - `--topcell=<topcell_name>` Topcell name to use. |
| |
| - `--run_mode=<run_mode>` Select klayout mode Allowed modes (flat , deep, tiling). [default: deep] |
| |
| - `--lvs_sub=<sub_name>` Substrate name used in your design. |
| |
| - `--verbose` Detailed rule execution log for debugging. |
| |
| - `--no_net_names` Discard net names in extracted netlist. |
| |
| - `--spice_comments` Enable netlist comments in extracted netlist. |
| |
| - `--scale` Enable scale of 1e6 in extracted netlist. |
| |
| - `--schematic_simplify` Enable schematic simplification in input netlist. |
| |
| - `--net_only` Enable netlist object creation only in extracted netlist. |
| |
| - `--top_lvl_pins` Enable top level pins only in extracted netlist. |
| |
| - `--combine` Enable netlist combine only in extracted netlist. |
| |
| - `--purge` Enable netlist purge all only in extracted netlist. |
| |
| - `--purge_nets` Enable netlist purge nets only in extracted netlist. |
| |
| |
| ## **LVS Outputs** |
| |
| You could find the run results at your run directory if you previously specified it through `--run_dir=<run_dir_path>`. Default path of run directory is `lvs_run_<date>_<time>` in current directory. |
| |
| ### Folder Structure of run results |
| |
| ```text |
| π lvs_run_<date>_<time> |
| β£ π lvs_run_<date>_<time>.log |
| β π <your_design_name>.cir |
| β π <your_design_name>.lvsdb |
| ``` |
| |
| The result is a database file (`<your_design_name>.lvsdb`) contains LVS extractions and comparison results. |
| You could view it on your file using: `klayout <input_gds_file> -m <resut_db_file> `, or you could view it on your gds file via netlist browser option in tools menu using klayout GUI. |
| |
| You could also find the extracted netlist generated from your design at (`<your_design_name>.cir`) in your run directory. |
| |
| |
| ## **Devices Status** |
| |
| |Device Group|Device Name |Sim Models |Google Standard Name |Status |Standard Digital|Analog|Advanced Analog|RF |HV |ESD | |
| |------------|-----------------------|------------------|--------------------------|------------------|----------------|------|---------------|-----|-----|-----| |
| |MOSFET |nmos_1p8 |:heavy_check_mark:|nfet_01v8 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_1p8_dw |:x: |nfet_01v8_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_1p8_nat |:heavy_check_mark:|nfet_01v8_nvt |:x: |Yes |Yes |Maybe |Maybe|No |No | |
| |MOSFET |nmos_3p3 |:heavy_check_mark:|nfet_03v3 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_3p3_dw |:heavy_check_mark:|nfet_03v3_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_3p3_nat |:heavy_check_mark:|nfet_03v3_nvt |:x: |Yes |Yes |Maybe |Maybe|No |No | |
| |MOSFET |nmos_5p0 |:x: |nfet_05v0 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_5p0_dw |:x: |nfet_05v0_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_6p0 |:heavy_check_mark:|nfet_06v0 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_6p0_dw |:heavy_check_mark:|nfet_06v0_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |nmos_6p0_nat |:heavy_check_mark:|nfet_06v0_nvt |:x: |Yes |Yes |Maybe |Maybe|No |No | |
| |MOSFET |pmos_1p8 |:heavy_check_mark:|pfet_01v8 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_1p8_dw |:x: |pfet_01v8_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_3p3 |:heavy_check_mark:|pfet_03v3 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_3p3_dw |:heavy_check_mark:|pfet_03v3_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_5p0 |:x: |pfet_05v0 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_5p0_dw |:x: |pfet_05v0_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_6p0 |:heavy_check_mark:|pfet_06v0 |:x: |Yes |Yes |Yes |Maybe|No |No | |
| |MOSFET |pmos_6p0_dw |:heavy_check_mark:|pfet_06v0_dn |:x: |Yes |Yes |Yes |Maybe|No |No | |
| | | | | | | | | | | | | |
| |BJT |vnpn_10x10 |:heavy_check_mark:|npn_10p00x10p00 | |No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_5x5 |:heavy_check_mark:|npn_05p00x05p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x16 |:heavy_check_mark:|npn_00p54x16p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x8 |:heavy_check_mark:|npn_00p54x08p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x2 |:heavy_check_mark:|npn_00p54x02p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x16_3p3 |:x: |npn_00p54x16p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x8_3p3 |:x: |npn_00p54x08p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_0p54x2_3p3 |:x: |npn_00p54x02p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vnpn_5x5_3p3 |:x: |npn_05p00x05p00 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vpnp_6p0_0p42x20 |:heavy_check_mark:|pnp_00p42x20p00_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vpnp_6p0_0p42x10 |:heavy_check_mark:|pnp_00p42x10p00_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vpnp_6p0_0p42x5 |:heavy_check_mark:|pnp_00p42x05p00_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vpnp_6p0_5x5 |:heavy_check_mark:|pnp_05p00x05p00_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| |BJT |vpnp_6p0_10x10 |:heavy_check_mark:|pnp_10p00x10p00_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |Maybe|No | |
| | | | | | | | | | | | | |
| |DIODE |np_1p8 |:heavy_check_mark:|diode_nd2ps_01v8 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |np_1p8_dw |:x: |diode_nd2ps_01v8_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |np_3p3 |:heavy_check_mark:|diode_nd2ps_03v3 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |np_3p3_dw |:heavy_check_mark:|diode_nd2ps_03v3_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |np_6p0 |:heavy_check_mark:|diode_nd2ps_06v0 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |np_6p0_dw |:heavy_check_mark:|diode_nd2ps_06v0_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_1p8 |:heavy_check_mark:|diode_pd2nw_01v8 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_1p8_dw |:x: |diode_pd2nw_01v8_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_3p3 |:heavy_check_mark:|diode_pd2nw_03v3 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_3p3_dw |:heavy_check_mark:|diode_pd2nw_03v3_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_6p0 |:heavy_check_mark:|diode_pd2nw_06v0 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |pn_6p0_dw |:heavy_check_mark:|diode_pd2nw_06v0_dn |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |nwp_6p0 |:heavy_check_mark:|diode_nw2ps_06v0 |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |dnwpw |:heavy_check_mark:|diode_pw2dw |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| |DIODE |dnwps |:heavy_check_mark:|diode_dw2ps |:x: |Maybe |Yes |Yes |Maybe|No |Maybe| |
| | | | | | | | | | | | | |
| |RES |nplus_u |:heavy_check_mark:|res_nd_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |nplus_u_dw |:x: |res_nd_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |nplus_s |:heavy_check_mark:|res_nd_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |nplus_s_dw |:x: |res_nd_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |npolyf_u |:heavy_check_mark:|res_npo_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |npolyf_u_dw |:x: |res_npo_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |npolyf_s |:heavy_check_mark:|res_npo_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |npolyf_s_dw |:x: |res_npo_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |pplus_u |:heavy_check_mark:|res_pd_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |pplus_u_dw |:x: |res_pd_3t_uns_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |pplus_s |:heavy_check_mark:|res_pd_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |pplus_s_dw |:x: |res_pd_3t_sal_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |pwell |:heavy_check_mark:|res_pw_3t |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u |:heavy_check_mark:|res_ppo_3t_uns |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_dw |:x: |res_ppo_3t_uns_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_s |:heavy_check_mark:|res_ppo_3t_sal |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_s_dw |:x: |res_ppo_3t_sal_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_1k |:heavy_check_mark:|res_ppo_3t_uns_1k |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_1k_dw |:x: |res_ppo_3t_uns_1k_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_2k |:heavy_check_mark:|res_ppo_3t_uns_2k |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_2k_dw |:x: |res_ppo_3t_uns_2k_dn |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |ppolyf_u_fhr_16p0_lv |:heavy_check_mark:|res_ppo_3t_uns_fhr_16v0 |:x: |No |Yes |Yes |Maybe|Yes |Maybe| |
| |RES |ppolyf_u_fhr_16p0_lv_dw|:x: |res_ppo_3t_uns_fhr_16v0_dw|:x: |No |Yes |Yes |Maybe|Yes |Maybe| |
| | | | | | | | | | | | | |
| |RES |rm1 |:heavy_check_mark:|res_m1 |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |rm2 |:heavy_check_mark:|res_m2 |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |rm3 |:heavy_check_mark:|res_m3 |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |rm4 |:heavy_check_mark:|res_m4 |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |rm5 |:heavy_check_mark:|res_m5 |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| |RES |tm9k |:heavy_check_mark:|res_tm_9k |:x: |No |Yes |Yes |Maybe|Maybe|Maybe| |
| | | | | | | | | | | | | |
| |MIMCAP |mim_0p85fF |:heavy_check_mark:|cap_mim_0f85 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_1p0fF |:heavy_check_mark:|cap_mim_1f0 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_1p5fF |:heavy_check_mark:|cap_mim_1f5 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_2p0fF |:heavy_check_mark:|cap_mim_2f0 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_0p85fF_tm |:heavy_check_mark:|cap_mim_0f85_tm |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_1p5fF_tm |:heavy_check_mark:|cap_mim_1f5_tm |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_1p0fF_tm |:heavy_check_mark:|cap_mim_1f0 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_2p0fF_tm |:heavy_check_mark:|cap_mim_2f0_tm |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |MIMCAP |mim_1p5fF_stk |:heavy_check_mark:|cap_mim_1f5_stk |:x: |No |Yes |Yes |Yes |No |No | |
| | | | | | | | | | | | | |
| |MOSCAP |nmoscap_1p8 |:heavy_check_mark:|cap_nmos_01v8 |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_1p8_dw |:x: |cap_nmos_01v8_dn |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_1p8_nwell |:heavy_check_mark:|cap_nmos_1p8_nwell |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_1p8_dnwell |:heavy_check_mark:|cap_nmos_1p8_dnwell |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_6p0 |:heavy_check_mark:|cap_nmos_06v0 |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_6p0_dw |:heavy_check_mark:|cap_nmos_06v0_dn |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_6p0_nwell |:heavy_check_mark:|cap_nmos_6p0_nwell |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |nmoscap_6p0_dnwell |:heavy_check_mark:|cap_nmos_06v0_dnw |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |pmoscap_1p8 |:heavy_check_mark:|cap_pmos_01v8 |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |pmoscap_1p8_dw |:x: |cap_pmos_01v8_dn |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |pmoscap_6p0 |:heavy_check_mark:|cap_pmos_06v0 |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| |MOSCAP |pmoscap_6p0_dw |:heavy_check_mark:|cap_pmos_06v0_dn |:heavy_check_mark:|Maybe |Yes |Yes |Maybe|No |No | |
| | | | | | | | | | | | | |
| |PISCAP |pis_1p8 |:heavy_check_mark:|cap_pis_01v8 |:heavy_check_mark:|No |Yes |Yes |Maybe|No |No | |
| |PISCAP |pis_1p8_dw |:x: |cap_pis_01v8_dn |:heavy_check_mark:|No |Yes |Yes |Maybe|No |No | |
| |PISCAP |pis_6p0 |:heavy_check_mark:|cap_pis_06v0 |:heavy_check_mark:|No |Yes |Yes |Maybe|No |No | |
| |PISCAP |pis_6p0_dw |:x: |cap_pis_06v0_dn |:heavy_check_mark:|No |Yes |Yes |Maybe|No |No | |
| | | | | | | | | | | | | |
| |VARACTOR |pn_varactor_1p8 |:heavy_check_mark:|cap_var_pd2nw_01v8 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |pn_varactor_1p8_dw |:x: |cap_var_pd2nw_01v8_dn |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |pn_varactor_6p0 |:heavy_check_mark:|cap_var_pd2nw_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |pn_varactor_6p0_dw |:x: |cap_var_pd2nw_06v0_dn |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |mos_varactor_1p8 |:heavy_check_mark:|cap_var_fet_01v8 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |mos_varactor_1p8_dw |:heavy_check_mark:|cap_var_fet_01v8_dn |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |mos_varactor_6p0 |:heavy_check_mark:|cap_var_fet_06v0 |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| |VARACTOR |mos_varactor_6p0_dw |:heavy_check_mark:|cap_var_fet_06v0_dn |:heavy_check_mark:|No |Yes |Yes |Yes |No |No | |
| | | | | | | | | | | | | |
| |eFuse |eFuse |:heavy_check_mark:|efuse |:x: |Maybe |Yes |Yes |No |Maybe|No | |