From 541b744e829e7516fe2984d9472eed88083a07a1 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Thu, 14 May 2026 16:21:29 -0700 Subject: [PATCH] create separate nand cells for user drc sky130 cell --- .../sky130/gds_lib/sky130_custom_nand2_dec.gds | Bin 0 -> 4020 bytes .../sky130/gds_lib/sky130_custom_nand3_dec.gds | Bin 0 -> 6274 bytes .../sky130/gds_lib/sky130_custom_nand4_dec.gds | Bin 0 -> 10704 bytes .../sky130/sp_lib/sky130_custom_nand2_dec.sp | 8 ++++++++ .../sky130/sp_lib/sky130_custom_nand3_dec.sp | 11 +++++++++++ .../sky130/sp_lib/sky130_custom_nand4_dec.sp | 12 ++++++++++++ .../tech/tech_configs/tech_custom_cell.py | 6 +++--- 7 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 technology/sky130/gds_lib/sky130_custom_nand2_dec.gds create mode 100644 technology/sky130/gds_lib/sky130_custom_nand3_dec.gds create mode 100644 technology/sky130/gds_lib/sky130_custom_nand4_dec.gds create mode 100644 technology/sky130/sp_lib/sky130_custom_nand2_dec.sp create mode 100644 technology/sky130/sp_lib/sky130_custom_nand3_dec.sp create mode 100644 technology/sky130/sp_lib/sky130_custom_nand4_dec.sp diff --git a/technology/sky130/gds_lib/sky130_custom_nand2_dec.gds b/technology/sky130/gds_lib/sky130_custom_nand2_dec.gds new file mode 100644 index 0000000000000000000000000000000000000000..6d37eb17075cea310e6e7ae88e8f267fbdc8946c GIT binary patch literal 4020 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 EKd>PyF#rGn literal 0 HcmV?d00001 diff --git a/technology/sky130/sp_lib/sky130_custom_nand2_dec.sp b/technology/sky130/sp_lib/sky130_custom_nand2_dec.sp new file mode 100644 index 00000000..77d1cffe --- /dev/null +++ b/technology/sky130/sp_lib/sky130_custom_nand2_dec.sp @@ -0,0 +1,8 @@ +* NGSPICE file created from sky130_fd_bd_sram__openram_sp_custom_nand2_dec.ext - technology: sky130A + +.subckt sky130_custom_nand2_dec A B Z VDD GND +X0 Z A VDD VDD sky130_fd_pr__pfet_01v8 w=1.12 l=0.15 +X1 VDD B Z VDD sky130_fd_pr__pfet_01v8 w=1.12 l=0.15 +X2 a_196_224# B GND GND sky130_fd_pr__nfet_01v8 w=0.74 l=0.15 +X3 Z A a_196_224# GND sky130_fd_pr__nfet_01v8 w=0.74 l=0.15 +.ends diff --git a/technology/sky130/sp_lib/sky130_custom_nand3_dec.sp b/technology/sky130/sp_lib/sky130_custom_nand3_dec.sp new file mode 100644 index 00000000..5ab03866 --- /dev/null +++ b/technology/sky130/sp_lib/sky130_custom_nand3_dec.sp @@ -0,0 +1,11 @@ +* Top level circuit sky130_fd_bd_sram__openram_sp_custom_nand3_dec +.subckt sky130_custom_nand3_dec A B C Z VDD GND + +X1001 Z A a_n346_328# GND sky130_fd_pr__nfet_01v8 W=0.74u L=0.15u m=1 +X1002 a_n346_256# C GND GND sky130_fd_pr__nfet_01v8 W=0.74u L=0.15u m=1 +X1003 a_n346_328# B a_n346_256# GND sky130_fd_pr__nfet_01v8 W=0.74u L=0.15u m=1 +X1000 Z B VDD VDD sky130_fd_pr__pfet_01v8 W=1.12u L=0.15u m=1 +X1004 Z A VDD VDD sky130_fd_pr__pfet_01v8 W=1.12u L=0.15u m=1 +X1005 Z C VDD VDD sky130_fd_pr__pfet_01v8 W=1.12u L=0.15u m=1 +.ends + diff --git a/technology/sky130/sp_lib/sky130_custom_nand4_dec.sp b/technology/sky130/sp_lib/sky130_custom_nand4_dec.sp new file mode 100644 index 00000000..4fbfb229 --- /dev/null +++ b/technology/sky130/sp_lib/sky130_custom_nand4_dec.sp @@ -0,0 +1,12 @@ +* NGSPICE file created from sky130_fd_bd_sram__openram_sp_custom_nand4_dec.ext - technology: sky130A + +.subckt sky130_custom_nand4_dec A B C D Z VDD GND +X0 VDD C Z VDD sky130_fd_pr__pfet_01v8 w=1.12u l=0.15u +X1 a_n384_98# C a_128_208# GND sky130_fd_pr__nfet_01v8 w=0.74u l=0.15u +X2 Z D VDD VDD sky130_fd_pr__pfet_01v8 w=1.12u l=0.15u +X3 Z B VDD VDD sky130_fd_pr__pfet_01v8 w=1.12u l=0.15u +X4 a_128_136# A Z GND sky130_fd_pr__nfet_01v8 w=0.74u l=0.15u +X5 VDD A Z VDD sky130_fd_pr__pfet_01v8 w=1.12u l=0.15u +X6 a_128_208# B a_128_136# GND sky130_fd_pr__nfet_01v8 w=0.74u l=0.15u +X7 GND D a_n384_98# GND sky130_fd_pr__nfet_01v8 w=0.74u l=0.15u +.ends diff --git a/technology/sky130/tech/tech_configs/tech_custom_cell.py b/technology/sky130/tech/tech_configs/tech_custom_cell.py index 0ce078d5..357f4e7d 100644 --- a/technology/sky130/tech/tech_configs/tech_custom_cell.py +++ b/technology/sky130/tech/tech_configs/tech_custom_cell.py @@ -226,9 +226,9 @@ cell_properties.write_driver.port_map = {'din': 'DIN', # If it is a list, the first is single port and the second is dual port. # If it is string, it is used for both single and dual port. cell_properties.names["dff"] = "sky130_fd_bd_sram__openram_dff" -cell_properties.names["nand2_dec"] = ["sky130_fd_bd_sram__openram_dp_nand2_dec", "sky130_fd_bd_sram__openram_dp_nand2_dec"] -cell_properties.names["nand3_dec"] = ["sky130_fd_bd_sram__openram_dp_nand3_dec", "sky130_fd_bd_sram__openram_dp_nand3_dec"] -cell_properties.names["nand4_dec"] = ["sky130_fd_bd_sram__openram_dp_nand4_dec", "sky130_fd_bd_sram__openram_dp_nand4_dec"] +cell_properties.names["nand2_dec"] = ["sky130_custom_nand2_dec", "sky130_fd_bd_sram__openram_dp_nand2_dec"] +cell_properties.names["nand3_dec"] = ["sky130_custom_nand3_dec", "sky130_fd_bd_sram__openram_dp_nand3_dec"] +cell_properties.names["nand4_dec"] = ["sky130_custom_nand4_dec", "sky130_fd_bd_sram__openram_dp_nand4_dec"] cell_properties.names["bitcell_1port"] = "sky130_custom_cell" cell_properties.names["replica_bitcell_1port"] = "sky130_custom_replica"