Mitch Bailey
02/25/2021, 5:56 PMsky130_fd_pr__special_pfet_pass
is not being extracted. Is this a tech file problem?
Here's a link to the netlist for the sram module.
https://github.com/efabless/sky130_sram_macros/blob/sky130_name_mapping/sram_1rw1r_32_256_8_sky130/sram_1rw1r_32_256_8_sky130.lvs.converted.spMatthew Guthaus
02/25/2021, 6:01 PMTim Edwards
02/25/2021, 6:16 PMMatthew Guthaus
02/25/2021, 6:16 PMTim Edwards
02/25/2021, 6:17 PMMitch Bailey
02/25/2021, 6:18 PMsky130_fd_pr__special_pfet_pass
devices are extracted at all.
The nmos drainOnly devices do not appear to be extracted by magic either, so I might filter them.
Also, I'm currently using the sram macro from efabless and not the one @Matthew Guthaus sent me. It does appear to have parasitics (if that is what drainOnly is referring to).Matthew Guthaus
02/25/2021, 6:19 PMMatthew Guthaus
02/25/2021, 6:19 PMMatthew Guthaus
02/25/2021, 6:19 PMMitch Bailey
02/25/2021, 6:33 PM.SUBCKT sky130_fd_bd_sram__openram_dp_cell bl0 br0 bl1 br1 wl0 wl1 vdd gnd
**
*.SEEDPROM
* Bitcell Core
XM0 Q wl1 bl1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM1 gnd Q_bar Q gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM2 gnd Q_bar Q gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM3 bl0 wl0 Q gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM4 Q_bar wl1 br1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM5 gnd Q Q_bar gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM6 gnd Q Q_bar gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM7 br0 wl0 Q_bar gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.15 m=1
XM8 vdd Q Q_bar vdd sky130_fd_pr__special_pfet_pass W=0.14 L=0.15 m=1
XM9 Q Q_bar vdd vdd sky130_fd_pr__special_pfet_pass W=0.14 L=0.15 m=1
* drainOnly PMOS
XM10 Q_bar wl1 Q_bar vdd sky130_fd_pr__special_pfet_pass L=0.08 W=0.14 m=1
XM11 Q wl0 Q vdd sky130_fd_pr__special_pfet_pass L=0.08 W=0.14 m=1
* drainOnly NMOS
XM12 bl1 gnd bl1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.08 m=1
XM14 br1 gnd br1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.08 m=1
.ENDS
XM8, XM9 are the sky130_fd_pr__special_pfet_pass
(along with 2 parasitics).
I opened the GDS in klayout and saw the nmos diffusion, but I couldn't see any diffusion over the nwell (pmos). There were some conversion errors in magic GDS in. Maybe related?
Reading "pk_sky130_fd_bd_sram__openram_dp_cell".
Error while reading cell "pk_sky130_fd_bd_sram__openram_dp_cell" (byte position 134172): Unknown layer/datatype in boundary, layer=33 type=43
Error while reading cell "pk_sky130_fd_bd_sram__openram_dp_cell" (byte position 138364): Unknown layer/datatype in boundary, layer=22 type=21
Error while reading cell "pk_sky130_fd_bd_sram__openram_dp_cell" (byte position 139324): Unknown layer/datatype in boundary, layer=22 type=22
Error while reading cell "pk_sky130_fd_bd_sram__openram_dp_cell" (byte position 139580): Unknown layer/datatype in boundary, layer=235 type=0
Error while reading cell "pk_sky130_fd_bd_sram__openram_dp_cell" (byte position 142508): Unknown layer/datatype in boundary, layer=33 type=42
Tim Edwards
02/25/2021, 6:47 PMMatthew Guthaus
02/25/2021, 6:48 PMMatthew Guthaus
02/25/2021, 6:49 PMTim Edwards
02/25/2021, 6:50 PMMatthew Guthaus
02/25/2021, 6:53 PMMitch Bailey
02/25/2021, 10:57 PMefabless/caravel
origin/develop
data commit 384a7d5
. @Tim Edwards Is this what you're using to create the masks? Using the klayout tech file as reference, it looks like the layers that magic doesn't recognize are
22/21 cfom.maskAdd
22/22 cfom.maskDrop
33/42 cp1m.maskDrop
33/43 cp1m.maskAdd
235/0 prBoundary.drawing
which don't appear to have anything to do with diffusion. Can someone take a look at the gds data for the openram_dp_cell
and make sure the diffusion for the pmos is there? Needless to say, if it's not getting streamedout, (insert any expletive).Matthew Guthaus
02/26/2021, 12:02 AMMitch Bailey
02/26/2021, 12:06 AMopenram_dp_cell_dummy
Matthew Guthaus
02/26/2021, 12:14 AMMitch Bailey
02/26/2021, 12:21 AMopenram_dp_cell
has the pmos diffusion, but nothing is extracted, so it's probably a rule problem.Matthew Guthaus
02/26/2021, 12:45 AMMitch Bailey
02/26/2021, 1:00 AMopenram_dp_cell
XM8 vdd Q Q_bar vdd sky130_fd_pr__special_pfet_pass W=0.14 L=0.15 m=1
XM9 Q Q_bar vdd vdd sky130_fd_pr__special_pfet_pass W=0.14 L=0.15 m=1
And here's the tech file
layer ppu pfetarea
and-not LVTN
and HVTP
and COREID
# Shrink-grow operation eliminates the smaller ppass device
shrink 70
grow 70
labels DIFF
Looks like the shrink/grow eliminates any device with a width OR length <= 0.14
Parasitic devices have L=0.08, so I'm going to try dropping the shrink/grow to 50Tim Edwards
02/26/2021, 1:57 AMTim Edwards
02/26/2021, 2:08 AMsky130_fd_pr__special_nfet_pass
for npass, sky130_fd_pr__special_nfet_latch
for npd, and sky130_fd_pr__special_pfet_pass
for ppu. As Matt noted, the latter is not a correct name change, because the "pass" devices (which are N-only) are the pass transistors, while the "ppu" are P-pullup devices and "npd" are N-pulldown devices in the back-to-back inverters; if you call the back-to-back inverters a latch, then it's appropriate to call them nfet_latch
and pfet_latch
but not pfet_pass
and I will force that change when I get around to starting pull requests on the library repositories.Tim Edwards
02/26/2021, 2:10 AMTim Edwards
02/26/2021, 2:38 AMMitch Bailey
02/26/2021, 2:43 AMsky130_fd_pr__special_nfet_latch
and sky130_fd_pr__special_pfet_pass
. It doesn't look like sky130_fd_pr__special_nfet_pass
(npass) is used at all.Mitch Bailey
02/26/2021, 3:24 AM* drainOnly PMOS
XM10 Q_bar wl1 Q_bar vdd sky130_fd_pr__special_pfet_pass L=0.08 W=0.14 m=1
XM11 Q wl0 Q vdd sky130_fd_pr__special_pfet_pass L=0.08 W=0.14 m=1
* drainOnly NMOS
XM12 bl1 gnd bl1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.08 m=1
XM14 br1 gnd br1 gnd sky130_fd_pr__special_nfet_latch W=0.21 L=0.08 m=1
Tim Edwards
02/26/2021, 2:52 PMTim Edwards
02/26/2021, 9:30 PMMatthew Guthaus
02/26/2021, 9:30 PMMatthew Guthaus
02/26/2021, 9:31 PMTim Edwards
02/26/2021, 9:35 PMMatthew Guthaus
02/26/2021, 9:36 PMTim Edwards
02/26/2021, 10:00 PM