Abhishek Anand
04/08/2023, 8:08 AMMitch Bailey
04/08/2023, 1:15 PMTim Edwards
04/08/2023, 1:58 PMMitch Bailey
04/08/2023, 7:46 PMMatthew Guthaus
04/08/2023, 10:35 PMTim Edwards
04/08/2023, 11:53 PMAbhishek Anand
04/10/2023, 8:04 AMMitch Bailey
04/10/2023, 9:06 AMAbhishek Anand
04/10/2023, 9:21 AMMitch Bailey
04/10/2023, 11:55 AMTim Edwards
04/10/2023, 12:55 PMTim Edwards
04/10/2023, 12:57 PMextract all
should have produced filename.ext
and I have never seen any example in which it didn't. Was there any output from extract all
that might indicate that it didn't write a file?Tim Edwards
04/10/2023, 1:04 PMAbhishek Anand
04/10/2023, 5:03 PMMatthew Guthaus
04/10/2023, 6:04 PMMatthew Guthaus
04/10/2023, 6:04 PMTim Edwards
04/10/2023, 6:20 PMrthresh
to get parasitic resistances. Magic's extraction has a very unusual "lumped resistance" model which calculates a single "effective resistance" for an entire net. This outputs as a single-pin resistor---a value R associated with a net such that R*C will yield the effective point-to-point delay through the net (which of course is wildly inaccurate for anything other than a net with two endpoints). Plus, there aren't any tools that I know of that know how to deal with a single-pin resistor. So the full R-C extraction has to be done with the following recipe (which is floating around several places in the slack workspace):
load <cellname>
flatten <cellname>_flat -dotoplabels
load <cellname>_flat
cellname delete <cellname>
cellname rename <cellname>_flat <cellname>
select top cell
extract do local
extract all
ext2sim labels on
ext2sim
extresist tolerance 10
extresist
ext2spice lvs
ext2spice cthresh 1
ext2spice extresist on
ext2spice
This recipe also reflects the fact that the full R-C extraction isn't clearly meaningful when run on a hiearchical layout, and so it is necessary to flatten the entire layout first. For the 1kB SRAM, though, the cellnames were so long and the hierarchy was so deep that I had to use flatten ... -dotoplabels
to prevent issues with net names becoming rediculously long (and crashing magic, although I fixed that specific issue). That makes it harder to find nodes in simulation, but I can do getnode
in the (flattened) layout to find the name of any specific net I want to look at in the simulation.
Over the course of a week or so, I managed to track down (almost) all of the issues that were causing negative capacitances (there were a surprising number of them that were all completely independent from each other). I think that on the "tiny" SRAM there were no negative capacitances the last time I ran. I also think that the 1kB SRAM still had a handful of small negative capacitances which I just removed from the netlist. I still need to do another round of debugging to track down the remaining source of negative caps. The capacitances come out negative because magic uses a method where it first computes the total parasitic capacitance of a wire to substrate, then subtracts off the portion that is shielded. If it doesn't do that accounting correctly and double-counts some area or counts some area it isn't supposed to, then it can end up subtracting off more than the original total amount. You will at least want to make sure you do the full R-C extraction using the most recent version of magic.
I can share the netlists but they are very large, so I'd prefer to avoid posting them if you can duplicate the way they were generated.Abhishek Anand
04/27/2023, 9:58 AMTim Edwards
04/27/2023, 1:41 PMAbhishek Anand
04/28/2023, 10:19 AMTim Edwards
04/28/2023, 1:05 PMTim Edwards
04/28/2023, 1:16 PMExtracting <cellname> into <cellname>.ext:
Playing around with it a bit, I find that the output you get is exactly equivalent to having no layout at all.Abhishek Anand
05/05/2023, 12:15 PMAbhishek Anand
05/05/2023, 12:16 PMAbhishek Anand
05/05/2023, 12:22 PMTim Edwards
05/05/2023, 7:17 PMTim Edwards
05/05/2023, 7:26 PMAbhishek Anand
05/06/2023, 1:44 PMAbhishek Anand
05/08/2023, 11:01 AMMitch Bailey
05/08/2023, 11:40 AMsky130_fd_pr__special_nfet_pass
extracted in the single port memory cells. In the dual port version, this model is not extracted. @Tim Edwards will this require a rule modification?Tim Edwards
05/08/2023, 1:14 PMnfet_pass
, and it exists in all memory cells. @Abhishek Anand: What statements are you using in your simulation to include the model files?Tim Edwards
05/08/2023, 1:16 PMMitch Bailey
05/08/2023, 1:29 PM$ volare ls
$PDK_ROOT/volare/sky130/versions
└── e6f9c8876da77220403014b116761b0b2d79aab4 (2023.02.10) (enabled)
$ ls $PDK_ROOT/$PDK/libs.ref/sky130_sram_macros/spice/*
$PDK_ROOT/sky130A/libs.ref/sky130_sram_macros/spice/sky130_sram_1kbyte_1rw1r_32x256_8.spice
$PDK_ROOT/sky130A/libs.ref/sky130_sram_macros/spice/sky130_sram_1kbyte_1rw1r_8x1024_8.spice
$PDK_ROOT/sky130A/libs.ref/sky130_sram_macros/spice/sky130_sram_2kbyte_1rw1r_32x512_8.spice
$PDK_ROOT/sky130A/libs.ref/sky130_sram_macros/spice/sram_1rw1r_32_256_8_sky130.spice
$ grep nfet_pass $PDK_ROOT/$PDK/libs.ref/sky130_sram_macros/spice/*
$
Tim Edwards
05/08/2023, 1:31 PM$PDK_ROOT/$PDK/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__special_nfet_pass.pm3.spice
.Tim Edwards
05/08/2023, 1:32 PM.lib
with sky130.lib.spice
and the corner, it should pick up all of the devices in the SRAM cell.Abhishek Anand
05/08/2023, 9:08 PMAbhishek Anand
05/08/2023, 9:09 PMTim Edwards
05/08/2023, 9:26 PMTim Edwards
05/08/2023, 9:30 PMAbhishek Anand
05/08/2023, 9:49 PMAbhishek Anand
05/08/2023, 9:52 PMTim Edwards
05/08/2023, 9:56 PMsky130_sram_0kbytes_1rw_2x16_None_flat.cir
. The incorrect size of special_nfet_pass
devices is in the low-level single-port SRAM cell, so it must be defined in that file. When and how was that netlist created?Abhishek Anand
05/08/2023, 10:03 PMAbhishek Anand
05/08/2023, 10:04 PMTim Edwards
05/08/2023, 10:09 PMTim Edwards
05/09/2023, 7:50 PMTim Edwards
05/09/2023, 8:18 PMsky130_fd_bd_sram__sram_sp_colenda
. A screenshot is attached. In the bottom corner is a label "vnb". There are some very curious things about this label. If you select the pwell around this label and select the entire net, you'll find that the pwell and the nwell are merged together in the same net. If you select the label and type port index
, you'll get an error message saying that you can select only one label at a time. It is impossible to see from the view in magic, because it absorbed and merged various layers on reading in the GDS, but if you do an ASCII dump of the GDS of sky130_fd_bd_sram__sram_sp_colenda
, you'll find that text vnb is placed on layer 64:5 (nwell) at coordinate (1.050, 0.150), and also on layer 64:59 (pwell) at coordinate (1.050, 0.140). The surrounding rectangle is simultaneously on GDS layers 64:16 (nwell pin), 122:16 (pwell pin), and 64:20 (nwell). The parts of this that are related to nwell are all wrong; pin vnb should exist only on pwell. When reading in the GDS, magic is finding an nwell square underneath an nFET transistor, which is incompatible, and not having any recipe for what to do with that illegal combination of layers, part of it gets erased. Ultimately the nwell gets erased but both labels continue to exist (although very hard to tease apart in magic), so vnb ends up making a virtual short to nwell (which will, of course, totally screw up the netlist), and the messed-up transistor is too weird for the extraction engine to figure out, so it ends up with a strange width and length.
Bottom line---Somewhere in OpenRAM you're generating label vnb simultaneously on pwell and nwell, and the nwell part of that needs to be removed.Tim Edwards
05/09/2023, 8:19 PMMatthew Guthaus
05/09/2023, 8:51 PMMatthew Guthaus
05/09/2023, 8:52 PMMatthew Guthaus
05/09/2023, 8:52 PMTim Edwards
05/09/2023, 8:53 PMMatthew Guthaus
05/09/2023, 8:54 PMMatthew Guthaus
05/09/2023, 8:54 PMAbhishek Anand
05/09/2023, 8:55 PMTim Edwards
05/09/2023, 8:58 PMAbhishek Anand
05/09/2023, 9:02 PMTim Edwards
05/09/2023, 9:03 PMTim Edwards
05/09/2023, 9:13 PMJesse Cirimelli-Low
05/09/2023, 9:34 PMTim Edwards
05/09/2023, 9:36 PMAbhishek Anand
05/09/2023, 9:41 PMJesse Cirimelli-Low
05/09/2023, 9:45 PMJesse Cirimelli-Low
05/09/2023, 9:45 PMTim Edwards
05/09/2023, 9:48 PMAbhishek Anand
05/10/2023, 4:46 PMAbhishek Anand
05/10/2023, 4:50 PMTim Edwards
05/10/2023, 5:56 PMAbhishek Anand
05/10/2023, 6:53 PMTim Edwards
05/10/2023, 6:54 PMAbhishek Anand
05/12/2023, 7:39 AMAbhishek Anand
05/19/2023, 7:20 AMAbhishek Anand
06/06/2023, 4:29 PM