Config Updates + Magic Update + Add CVC files to PDK proper instead of being inside OpenLane ~ sky130.json whitespace reformat ~ sky130:magic -> `f7df5e7c86fb47c5fd445c846afddc6fbabad6ae` ~ `CELL_PAD` -> `GPL/DPL_CELL_PADDING` ~ `CELL_PAD_EXECLUDE` -> `CELL_PAD_EXCLUDE`
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index f40b720..69e9049 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -1012,6 +1012,7 @@ rm -f ${OPENLANE_STAGING_$*}/rules.openrcx.sky130$*.max.spef_extractor cp -r openlane/custom_cells ${OPENLANE_STAGING_$*} + cp -r openlane/cvc ${OPENLANE_STAGING_$*} ${CPP} ${SKY130$*_DEFS} openlane/config.tcl ${OPENLANE_STAGING_$*}/config.tcl ${CPP} ${SKY130$*_DEFS} openlane/rules.openrcx.sky130$*.min.magic \
diff --git a/sky130/openlane/config.tcl b/sky130/openlane/config.tcl index a1172d9..856d9c1 100755 --- a/sky130/openlane/config.tcl +++ b/sky130/openlane/config.tcl
@@ -86,9 +86,9 @@ #endif (!EF_FORMAT) # Klayout setup -set ::env(KLAYOUT_TECH) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/$::env(PDK).lyt" -set ::env(KLAYOUT_PROPERTIES) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/$::env(PDK).lyp" -set ::env(KLAYOUT_DRC_TECH_SCRIPT) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/$::env(PDK)_mr.drc" +set ::env(KLAYOUT_TECH) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/tech/$::env(PDK).lyt" +set ::env(KLAYOUT_PROPERTIES) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/tech/$::env(PDK).lyp" +set ::env(KLAYOUT_DRC_TECH_SCRIPT) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/drc/$::env(PDK)_mr.drc" #set ::env(KLAYOUT_DRC_TECH) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/klayout/$::env(PDK).lydrc" # netgen setup @@ -167,3 +167,6 @@ set ::env(RT_MIN_LAYER) "met1" set ::env(RT_MAX_LAYER) "met5" + +# CVC +set ::env(CVC_SCRIPTS_DIR) "$::env(PDK_ROOT)/$::env(PDK)/libs.tech/openlane/cvc" \ No newline at end of file
diff --git a/sky130/openlane/cvc/cdl.awk b/sky130/openlane/cvc/cdl.awk new file mode 100644 index 0000000..96c7c08 --- /dev/null +++ b/sky130/openlane/cvc/cdl.awk
@@ -0,0 +1,16 @@ +/Black-box entry subcircuit/ { # remove black-box defintions + while ( $1 != ".ends" ) { + getline; + } + getline; +} +/^\*/ { # remove comments + next; +} +/^.ENDS .*/ { # remove name from ends lines + print $1; + next; +} + { + print $0; +} \ No newline at end of file
diff --git a/sky130/openlane/cvc/cvcrc b/sky130/openlane/cvc/cvcrc new file mode 100644 index 0000000..2bd054f --- /dev/null +++ b/sky130/openlane/cvc/cvcrc
@@ -0,0 +1,36 @@ + +CVC_MODEL_FILE = $CVC_SCRIPTS_DIR/models +CVC_TOP = $DESIGN_NAME +CVC_MODE = $CVC_TOP +CVC_NETLIST = $signoff_tmpfiles/$DESIGN_NAME.cdl +CVC_POWER_FILE = $signoff_tmpfiles/$CVC_TOP.power +CVC_REPORT_FILE = $signoff_reports/$CVC_TOP.rpt +CVC_FUSE_FILE = '' +CVC_REPORT_TITLE = 'CVC $CVC_TOP' +CVC_CIRCUIT_ERROR_LIMIT = '100' +CVC_SEARCH_LIMIT = '100' +CVC_LEAK_LIMIT = '0.0002' +CVC_SOI = 'false' +CVC_SCRC = 'false' +CVC_VTH_GATES = 'false' +CVC_MIN_VTH_GATES = 'false' +CVC_IGNORE_VTH_FLOATING = 'false' +CVC_IGNORE_NO_LEAK_FLOATING = 'false' +CVC_LEAK_OVERVOLTAGE = 'true' +CVC_LOGIC_DIODES = 'false' +CVC_ANALOG_GATES = 'true' +CVC_BACKUP_RESULTS = 'false' +CVC_MOS_DIODE_ERROR_THRESHOLD = '0' +CVC_SHORT_ERROR_THRESHOLD = '0' +CVC_BIAS_ERROR_THRESHOLD = '0' +CVC_FORWARD_ERROR_THRESHOLD = '0' +CVC_FLOATING_ERROR_THRESHOLD = '0' +CVC_GATE_ERROR_THRESHOLD = '0' +CVC_LEAK?_ERROR_THRESHOLD = '0' +CVC_EXPECTED_ERROR_THRESHOLD = '0' +CVC_OVERVOLTAGE_ERROR_THRESHOLD = '0' +CVC_PARALLEL_CIRCUIT_PORT_LIMIT = '0' +CVC_CELL_ERROR_LIMIT_FILE = '' +CVC_CELL_CHECKSUM_FILE = '' +CVC_LARGE_CIRCUIT_SIZE = '10000000' +CVC_NET_CHECK_FILE = ''
diff --git a/sky130/openlane/cvc/models b/sky130/openlane/cvc/models new file mode 100644 index 0000000..cdbff13 --- /dev/null +++ b/sky130/openlane/cvc/models
@@ -0,0 +1,53 @@ +MN nfet_01v8 Vth=0.2 Vgs=1.8 Vds=1.8 +MP pfet_01v8_hvt Vth=-0.2 Vgs=1.8 Vds=1.8 + +R short model=switch_on + +D sky130_fd_pr__diode_pw2nd_05v5 +D sky130_fd_pr__diode_pw2nd_11v0 +D sky130_fd_pr__diode_pd2nw_05v5 +D sky130_fd_pr__model__parasitic__diode_ps2dn +D sky130_fd_pr__model__parasitic__diode_ps2nw +D sky130_fd_pr__model__parasitic__diode_pw2dn +D condiode + + +#R sky130_fd_pr__res_generic_m1 R=l/w*0.125 +#R sky130_fd_pr__res_generic_m2 R=l/w*0.125 +#R sky130_fd_pr__res_generic_m3 R=l/w*0.047 +#R sky130_fd_pr__res_generic_m4 R=l/w*0.047 +#R sky130_fd_pr__res_generic_nd R=l/w*0.029 +R sky130_fd_pr__res_generic_m1 R=l/w +R sky130_fd_pr__res_generic_m2 R=l/w +R sky130_fd_pr__res_generic_m3 R=l/w +R sky130_fd_pr__res_generic_m4 R=l/w +R sky130_fd_pr__res_generic_m5 R=l/w +R sky130_fd_pr__res_generic_nd R=l/w*120 +R sky130_fd_pr__res_generic_nd__hv R=l/w*114 +R sky130_fd_pr__res_generic_pd__hv R=l/w*191 +R sky130_fd_pr__res_generic_po R=l/w*48 +R sky130_fd_pr__res_xhigh_po R=l/w*2000 +R sky130_fd_pr__res_high_po R=l/w*2000 + +MN sky130_fd_pr__nfet_01v8 Vth=0.2 Vgs=1.8 Vds=1.8 +MN sky130_fd_pr__nfet_01v8_lvt Vth=0.1 Vgs=1.8 Vds=1.8 +MN sky130_fd_pr__special_nfet_latch Vth=0.2 Vgs=1.8 Vds=1.8 +MN sky130_fd_pr__nfet_03v3_nvt Vth=0.2 Vgs=3.3 Vds=3.3 +MN sky130_fd_pr__esd_nfet_g5v0d10v5 Vth=0.2 +MN sky130_fd_pr__nfet_05v0_nvt Vth=0.2 +MN sky130_fd_pr__nfet_g5v0d10v5 Vth=0.2 +MN sky130_fd_bs_flash__special_sonosfet_star Vth=0.2 + +MP sky130_fd_pr__pfet_01v8 Vth=-0.2 Vgs=1.8 Vds=1.8 +MP sky130_fd_pr__pfet_01v8_lvt Vth=-0.1 Vgs=1.8 Vds=1.8 +MP sky130_fd_pr__pfet_01v8_hvt Vth=-0.3 Vgs=1.8 Vds=1.8 +MP sky130_fd_pr__special_pfet_pass Vth=-0.2 Vgs=1.8 Vds=1.8 +MP sky130_fd_pr__pfet_g5v0d10v5 Vth=-0.2 + +C sky130_fd_pr__cap_mim_m3_1 +C sky130_fd_pr__cap_mim_m3_2 +C sky130_fd_pr__cap_var + +Q sky130_fd_pr__pnp_05v5 + +
diff --git a/sky130/openlane/cvc/power.awk b/sky130/openlane/cvc/power.awk new file mode 100644 index 0000000..5b3466e --- /dev/null +++ b/sky130/openlane/cvc/power.awk
@@ -0,0 +1,15 @@ +BEGIN { # Print power and standard_input definitions + printf "%s power 1.8\n", vdd; + printf "%s power 0.0\n", gnd; + printf "#define std_input min@%s max@%s\n", gnd, vdd; +} +$1 == "input" { # Print input nets + gsub(/;/, ""); + if ( $2 == vdd || $2 == gnd ) { # ignore power nets + next; + } + if ( NF == 3 ) { # print buses as net[range] + $2 = $3 $2; + } + print $2, "input std_input"; +} \ No newline at end of file
diff --git a/sky130/openlane/sky130_fd_sc_hd/config.tcl b/sky130/openlane/sky130_fd_sc_hd/config.tcl index 26bea27..eeea933 100755 --- a/sky130/openlane/sky130_fd_sc_hd/config.tcl +++ b/sky130/openlane/sky130_fd_sc_hd/config.tcl
@@ -33,7 +33,7 @@ set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_2" #capacitance : 0.017653; set ::env(SYNTH_DRIVING_CELL_PIN) "Y" -# update these +# update these set ::env(SYNTH_CAP_LOAD) "33.442" ; # femtofarad __inv_16 pin A cap (https://github.com/google/skywater-pdk-libs-sky130_fd_sc_hd/blob/main/cells/inv/sky130_fd_sc_hd__inv_16__tt_025C_1v80.lib.json) set ::env(SYNTH_MIN_BUF_PORT) "sky130_fd_sc_hd__buf_2 A X" set ::env(SYNTH_TIEHI_PORT) "sky130_fd_sc_hd__conb_1 HI" @@ -56,7 +56,8 @@ set ::env(FAKEDIODE_CELL) "sky130_ef_sc_hd__fakediode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "sky130_fd_sc_hd__tap* sky130_fd_sc_hd__decap* sky130_ef_sc_hd__decap* sky130_fd_sc_hd__fill*" # Clk Buffers info CTS data
diff --git a/sky130/openlane/sky130_fd_sc_hdll/config.tcl b/sky130/openlane/sky130_fd_sc_hdll/config.tcl index 8fb7d42..f6c343a 100755 --- a/sky130/openlane/sky130_fd_sc_hdll/config.tcl +++ b/sky130/openlane/sky130_fd_sc_hdll/config.tcl
@@ -53,7 +53,8 @@ set ::env(FAKEDIODE_CELL) "sky130_fd_sc_hdll__fakediode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "$::env(STD_CELL_LIBRARY)__tap* $::env(STD_CELL_LIBRARY)__decap* $::env(STD_CELL_LIBRARY)__fill*" # Clk Buffers info CTS data
diff --git a/sky130/openlane/sky130_fd_sc_hs/config.tcl b/sky130/openlane/sky130_fd_sc_hs/config.tcl index 39e80b9..8761689 100755 --- a/sky130/openlane/sky130_fd_sc_hs/config.tcl +++ b/sky130/openlane/sky130_fd_sc_hs/config.tcl
@@ -54,7 +54,8 @@ set ::env(DIODE_CELL) "sky130_fd_sc_hs__diode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "sky130_fd_sc_hs__tap* sky130_fd_sc_hs__decap* sky130_fd_sc_hs__fill*" set ::env(ROOT_CLK_BUFFER) sky130_fd_sc_hs__clkbuf_16
diff --git a/sky130/openlane/sky130_fd_sc_hvl/config.tcl b/sky130/openlane/sky130_fd_sc_hvl/config.tcl index 54f04ba..edc73f0 100644 --- a/sky130/openlane/sky130_fd_sc_hvl/config.tcl +++ b/sky130/openlane/sky130_fd_sc_hvl/config.tcl
@@ -5,14 +5,14 @@ set ::env(LIB_SYNTH) "\ $::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_fd_sc_hvl__tt_025C_3v30.lib\ $::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_fd_sc_hvl__tt_025C_3v30_lv1v80.lib\ - " +" set ::env(LIB_FASTEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_fd_sc_hvl__ff_n40C_5v50.lib" set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_fd_sc_hvl__ss_150C_1v65.lib" #else (!EF_FORMAT) set ::env(LIB_SYNTH) "\ $::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_fd_sc_hvl__tt_025C_3v30.lib\ $::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_fd_sc_hvl__tt_025C_3v30_lv1v80.lib\ - " +" set ::env(LIB_FASTEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_fd_sc_hvl__ff_n40C_5v50.lib" set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_fd_sc_hvl__ss_150C_1v65.lib" #endif (!EF_FORMAT) @@ -39,7 +39,7 @@ set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hvl__inv_2" #capacitance : 0.017653; set ::env(SYNTH_DRIVING_CELL_PIN) "Y" -# update these +# update these set ::env(SYNTH_CAP_LOAD) "70.77" ; # femtofarad __inv_16 pin A cap (https://github.com/google/skywater-pdk-libs-sky130_fd_sc_hvl/blob/main/cells/inv/sky130_fd_sc_hvl__inv_16__tt_025C_3v30.lib.json) set ::env(SYNTH_MIN_BUF_PORT) "sky130_fd_sc_hvl__buf_1 A X" set ::env(SYNTH_TIEHI_PORT) "sky130_fd_sc_hvl__conb_1 HI" @@ -61,7 +61,8 @@ set ::env(DIODE_CELL) "sky130_fd_sc_hvl__diode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "sky130_fd_sc_hvl__tap* sky130_fd_sc_hvl__decap* sky130_fd_sc_hvl__fill*" # Clk Buffers info CTS data
diff --git a/sky130/openlane/sky130_fd_sc_ls/config.tcl b/sky130/openlane/sky130_fd_sc_ls/config.tcl index 2e6130d..d303922 100755 --- a/sky130/openlane/sky130_fd_sc_ls/config.tcl +++ b/sky130/openlane/sky130_fd_sc_ls/config.tcl
@@ -56,7 +56,8 @@ set ::env(FAKEDIODE_CELL) "sky130_fd_sc_ls__fakediode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "$::env(STD_CELL_LIBRARY)__tap* $::env(STD_CELL_LIBRARY)__decap* $::env(STD_CELL_LIBRARY)__fill*" # Clk Buffers info CTS data
diff --git a/sky130/openlane/sky130_fd_sc_ms/config.tcl b/sky130/openlane/sky130_fd_sc_ms/config.tcl index 72f5c2f..51cd1a8 100755 --- a/sky130/openlane/sky130_fd_sc_ms/config.tcl +++ b/sky130/openlane/sky130_fd_sc_ms/config.tcl
@@ -55,7 +55,8 @@ set ::env(DIODE_CELL) "sky130_fd_sc_ms__diode_2" set ::env(DIODE_CELL_PIN) "DIODE" -set ::env(CELL_PAD) 4 +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} set ::env(CELL_PAD_EXCLUDE) "$::env(STD_CELL_LIBRARY)__tap* $::env(STD_CELL_LIBRARY)__decap* $::env(STD_CELL_LIBRARY)__fill*" # Clk Buffers info CTS data
diff --git a/sky130/openlane/sky130_osu_sc_t18/config.tcl b/sky130/openlane/sky130_osu_sc_t18/config.tcl index eb9753c..2f35abb 100755 --- a/sky130/openlane/sky130_osu_sc_t18/config.tcl +++ b/sky130/openlane/sky130_osu_sc_t18/config.tcl
@@ -56,8 +56,9 @@ #set ::env(FAKEDIODE_CELL) "sky130_osu_sc_t18__fakediode_2" set ::env(DIODE_CELL_PIN) "A" -set ::env(CELL_PAD) 4 -set ::env(CELL_PAD_EXECLUDE) "FILLX*" +set ::env(GPL_CELL_PADDING) {0} +set ::env(DPL_CELL_PADDING) {4} +set ::env(CELL_PAD_EXCLUDE) "FILLX*" # Clk Buffers info CTS data set ::env(ROOT_CLK_BUFFER) CLKBUFX1
diff --git a/sky130/sky130.json b/sky130/sky130.json index 566764e..1af4c5c 100644 --- a/sky130/sky130.json +++ b/sky130/sky130.json
@@ -1,4 +1,5 @@ -#define DESCRIPTION Skywater 0.13um CMOS, local interconntect + high-resistance poly +{ +#define DESCRIPTION Skywater 0.13um CMOS, local interconnect + high-resistance poly #ifdef METAL5 #define OPTION1 + 5 metal layer backend stack #else @@ -19,7 +20,6 @@ #else #define OPTION4 #endif (RERAM) -{ "foundry": "SW", "foundry-name": "SkyWater", "node": "TECHNAME", @@ -57,46 +57,46 @@ #endif (REDISTRIBUTION) ], "stdcells": { - "sky130_fd_sc_hd": "FD_SC_HD_COMMIT", - "sky130_fd_sc_hdll": "FD_SC_HDLL_COMMIT", - "sky130_fd_sc_hs": "FD_SC_HS_COMMIT", - "sky130_fd_sc_hvl": "FD_SC_HVL_COMMIT", - "sky130_fd_sc_lp": "FD_SC_LP_COMMIT", - "sky130_fd_sc_ls": "FD_SC_LS_COMMIT", - "sky130_fd_sc_ms": "FD_SC_MS_COMMIT", - "sky130_osu_sc_t12": "OSU_T12_COMMIT", - "sky130_osu_sc_t15": "OSU_T15_COMMIT", - "sky130_osu_sc_t18": "OSU_T18_COMMIT" + "sky130_fd_sc_hd": "FD_SC_HD_COMMIT", + "sky130_fd_sc_hdll": "FD_SC_HDLL_COMMIT", + "sky130_fd_sc_hs": "FD_SC_HS_COMMIT", + "sky130_fd_sc_hvl": "FD_SC_HVL_COMMIT", + "sky130_fd_sc_lp": "FD_SC_LP_COMMIT", + "sky130_fd_sc_ls": "FD_SC_LS_COMMIT", + "sky130_fd_sc_ms": "FD_SC_MS_COMMIT", + "sky130_osu_sc_t12": "OSU_T12_COMMIT", + "sky130_osu_sc_t15": "OSU_T15_COMMIT", + "sky130_osu_sc_t18": "OSU_T18_COMMIT" }, "iocells": { "sky130_fd_io": "FD_IO_COMMIT" }, "primitive": { - "sky130_fd_pr": "FD_PR_COMMIT" + "sky130_fd_pr": "FD_PR_COMMIT" }, "memory": { - "sky130_sram_macros": "SRAM_COMMIT" + "sky130_sram_macros": "SRAM_COMMIT" }, "other": { - "sky130_ml_xx_hd": "ALPHA_COMMIT" + "sky130_ml_xx_hd": "ALPHA_COMMIT" }, "build": { - "open_pdks": "OPEN_PDKS_VERSION", - "magic": "MAGIC_VERSION" + "open_pdks": "OPEN_PDKS_VERSION", + "magic": "MAGIC_VERSION" }, "commit": { - "open_pdks": "OPEN_PDKS_COMMIT", - "magic": "MAGIC_COMMIT" + "open_pdks": "OPEN_PDKS_COMMIT", + "magic": "MAGIC_COMMIT" }, "reference": { - "open_pdks": "d7faec2b6f384254449e0172c4f26083f77d3ff5", - "magic": "fe2eb6d3906ed15ade0e7a51daea80dd4e3846e2", - "skywater_pdk": "f70d8ca46961ff92719d8870a18a076370b85f6c", - "sky130_osu_sc_t12": "6af093f919721daec4bb256c4c40aaa8bc84f4bd", - "sky130_osu_sc_t15": "f1eef844734f73d3c79d83b82352118263eb7686", - "sky130_osu_sc_t18": "3128b623aaea315248d39173e09b49a3dc82aa40", - "sky130_sram_macros": "c2333394e0b0b9d9d71185678a8d8087715d5e3b", - "sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb", - "xschem_sky130": "16efae642739ba5c50aa2a40e403b036a5e31a6c" + "open_pdks": "d7faec2b6f384254449e0172c4f26083f77d3ff5", + "magic": "f7df5e7c86fb47c5fd445c846afddc6fbabad6ae", + "skywater_pdk": "f70d8ca46961ff92719d8870a18a076370b85f6c", + "sky130_osu_sc_t12": "6af093f919721daec4bb256c4c40aaa8bc84f4bd", + "sky130_osu_sc_t15": "f1eef844734f73d3c79d83b82352118263eb7686", + "sky130_osu_sc_t18": "3128b623aaea315248d39173e09b49a3dc82aa40", + "sky130_sram_macros": "c2333394e0b0b9d9d71185678a8d8087715d5e3b", + "sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb", + "xschem_sky130": "16efae642739ba5c50aa2a40e403b036a5e31a6c" } -} +} \ No newline at end of file