Matthew Guthaus
03/01/2022, 7:13 PMCell dummy_cell_2rw disconnected node: w_n1073741817_n1073741817#
I'm trying to isolate further as I can only recreate it on a full SRAM right now when I do extract unique all which leads to a bunch of other flattening during LVS.Matthew Guthaus
03/01/2022, 7:50 PMMatthew Guthaus
03/01/2022, 9:24 PMMatthew Guthaus
03/01/2022, 9:25 PMMatthew Guthaus
03/01/2022, 9:27 PMMatthew Guthaus
03/01/2022, 9:29 PMMatthew Guthaus
03/01/2022, 9:52 PMMatthew Guthaus
03/02/2022, 8:34 PMMitch Bailey
03/03/2022, 12:15 AMMatthew Guthaus
03/03/2022, 12:25 AMMatthew Guthaus
03/03/2022, 12:25 AMMatthew Guthaus
03/03/2022, 12:25 AMMitch Bailey
03/03/2022, 12:32 AMMatthew Guthaus
03/03/2022, 12:41 AMMatthew Guthaus
03/03/2022, 12:49 AMMitch Bailey
03/03/2022, 12:50 AMMitch Bailey
03/03/2022, 12:51 AMMatthew Guthaus
03/03/2022, 12:51 AMMatthew Guthaus
03/03/2022, 12:52 AMMitch Bailey
03/03/2022, 12:52 AMMatthew Guthaus
03/03/2022, 12:52 AMMatthew Guthaus
03/03/2022, 12:53 AMMitch Bailey
03/03/2022, 12:57 AMMatthew Guthaus
03/03/2022, 12:57 AMMatthew Guthaus
03/03/2022, 12:59 AMMitch Bailey
03/03/2022, 1:06 AM.SUBCKT pinv_1 A Z vdd gnd
*.PININFO A:I Z:O vdd:B gnd:B
* INPUT : A
* OUTPUT: Z
* POWER : vdd
* GROUND: gnd
Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u
Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u
.ENDS pinv_1
versus
.SUBCKT pinv_1 A Z vdd gnd
*.PININFO A:I Z:O vdd:B gnd:B
* INPUT : A
* OUTPUT: Z
* POWER : vdd
* GROUND: gnd
Xpinv_pmos Z A vdd vdd sky130_fd_pr__pfet_01v8 m=2 w=1.26 l=0.15
Xpinv_nmos Z A gnd gnd sky130_fd_pr__nfet_01v8 m=2 w=0.74 l=0.15
.ENDS pinv_1
Matthew Guthaus
03/03/2022, 1:10 AMMitch Bailey
03/03/2022, 1:18 AMJesse Cirimelli-Low
03/03/2022, 1:50 AMJesse Cirimelli-Low
03/03/2022, 1:51 AMJesse Cirimelli-Low
03/03/2022, 1:51 AMJesse Cirimelli-Low
03/03/2022, 1:52 AMMatthew Guthaus
03/03/2022, 6:00 PMMatthew Guthaus
03/03/2022, 6:34 PMJesse Cirimelli-Low
03/03/2022, 7:09 PMMitch Bailey
03/03/2022, 10:52 PMExtracting wordline_driver_array into wordline_driver_array.ext:
Warning: Ports "in_15" and "in_14" are electrically shorted.
Warning: Ports "in_15" and "in_13" are electrically shorted.
Warning: Ports "in_15" and "in_12" are electrically shorted.
Warning: Ports "in_15" and "in_11" are electrically shorted.
Warning: Ports "in_15" and "in_10" are electrically shorted.
Warning: Ports "in_15" and "in_9" are electrically shorted.
Warning: Ports "in_15" and "in_8" are electrically shorted.
Warning: Ports "in_15" and "in_7" are electrically shorted.
Warning: Ports "in_15" and "in_6" are electrically shorted.
Warning: Ports "in_15" and "in_5" are electrically shorted.
Warning: Ports "in_15" and "in_4" are electrically shorted.
Warning: Ports "in_15" and "in_3" are electrically shorted.
Warning: Ports "in_15" and "in_2" are electrically shorted.
Warning: Ports "in_15" and "in_1" are electrically shorted.
Warning: Ports "in_15" and "in_0" are electrically shorted.
Warning: Ports "in_15" and "en" are electrically shorted.
Looks like the in_*
labels are placed at the A terminals of the nand gate. Unfortunately, the en
taps are also at the A terminal, leaving the B terminals unlabeled at this level. Magic may be able to handle this by creating automatic ports, but can I get this fixed before proceeding?Mitch Bailey
03/04/2022, 12:49 AMport_address
, the decode signal is input with li1 at the en connection (nand A port) while the B port is unconnected.Jesse Cirimelli-Low
03/04/2022, 12:53 AMMitch Bailey
03/04/2022, 1:09 AMport_address
and port_address_0
and then running with the modified run_ext.sh
gave me a clean LVS result.Jesse Cirimelli-Low
03/04/2022, 1:10 AMJesse Cirimelli-Low
03/04/2022, 1:10 AMJesse Cirimelli-Low
03/04/2022, 1:12 AMJesse Cirimelli-Low
03/04/2022, 1:14 AMMitch Bailey
03/04/2022, 1:21 AMMitch Bailey
03/04/2022, 1:23 AMJesse Cirimelli-Low
03/04/2022, 1:23 AMMatthew Guthaus
03/04/2022, 1:26 AMMatthew Guthaus
03/04/2022, 1:27 AMMatthew Guthaus
03/04/2022, 1:28 AMMitch Bailey
03/04/2022, 1:33 AMMatthew Guthaus
03/04/2022, 3:26 PMMatthew Guthaus
03/04/2022, 3:26 PMMitch Bailey
03/04/2022, 3:44 PMMatthew Guthaus
03/04/2022, 4:05 PMMitch Bailey
03/04/2022, 4:11 PMMatthew Guthaus
03/04/2022, 4:12 PMMatthew Guthaus
03/04/2022, 4:13 PMMitch Bailey
03/04/2022, 4:14 PMMatthew Guthaus
03/04/2022, 4:15 PMMatthew Guthaus
03/04/2022, 4:15 PMMitch Bailey
03/04/2022, 4:16 PMMatthew Guthaus
03/04/2022, 4:16 PMMatthew Guthaus
03/04/2022, 4:17 PMMitch Bailey
03/04/2022, 4:19 PMMatthew Guthaus
03/04/2022, 4:20 PMMitch Bailey
03/05/2022, 8:54 AMsetup.tcl
file and run_ext.sh
files, I got a clean LVS run. magic 8.3.274, netgen 1.5.219
Subcircuit pins:
Circuit 1: sram |Circuit 2: sram
-------------------------------------------|-------------------------------------------
addr0[2] |addr0[2]
addr0[0] |addr0[0]
addr0[3] |addr0[3]
addr0[1] |addr0[1]
addr1[2] |addr1[2]
addr1[0] |addr1[0]
addr1[3] |addr1[3]
addr1[1] |addr1[1]
vdd |vdd
gnd |gnd
dout0[0] |dout0[0]
dout0[1] |dout0[1]
dout0[2] |dout0[2]
dout0[3] |dout0[3]
dout1[0] |dout1[0]
dout1[1] |dout1[1]
dout1[2] |dout1[2]
dout1[3] |dout1[3]
csb0 |csb0
web0 |web0
clk0 |clk0
csb1 |csb1
clk1 |clk1
din0[0] |din0[0]
din0[1] |din0[1]
din0[2] |din0[2]
din0[3] |din0[3]
---------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sram and sram are equivalent.
Circuits match uniquely.
Hopefully eventually, the additions to the setup file to flatten cells with disconnected nets will not be necessary. This is an ongoing discussion.Matthew Guthaus
03/05/2022, 12:40 PMTim Edwards
03/06/2022, 3:59 PMsram.tar.gz
posts is the one I should be looking at. . .
FYI, two things:
(1) w_n1073741817_n1073741817#
is not a randomly-assigned name. It follows magic's standard for naming nets that aren't labeled: Find the lower-leftmost geometry on the lowest plane of the net, and create a node name from the plane name and the lower-left coordinate, using "n" for "negative" to keep the name valid for SPICE syntax. The node name above is the coordinate at what magic considers "negative infinity", and is what you get for the substrate. Since the name is unwieldy, I often put something like set SUB VSUBS
in the .magicrc file so that the substrate net has a recognizable name and doesn't take up so many characters.
(2) The substrate extraction used to be pretty straightforward after my first implementation (some years ago). However, after trying to extract a number of deep-nwell structures, it became obvious that the extraction method was incapable of dealing with isolated pwell regions. So I had to rework the whole extraction method. I started off properly by working in a new branch. Then I made the dreadful mistake of believing that the method was working correctly, and I merged that into the master branch. Then I discovered some major flaws in the implementation (I still think the method itself is valid), and have been scrambling to get it corrected since. As of now it seems to work right on a wide variety of examples. But there are still a handful of assumptions in the code that I was unsure about, so there's still room for counterexamples.Matthew Guthaus
03/06/2022, 4:48 PMMatthew Guthaus
03/06/2022, 6:07 PMTim Edwards
03/06/2022, 9:41 PMgnd
because if GND is also gnd
then you are forcing them to be the same regardless of the circuit connectivity.Matthew Guthaus
03/06/2022, 10:24 PMMatthew Guthaus
03/06/2022, 10:25 PMTim Edwards
03/06/2022, 10:35 PMMitch Bailey
03/06/2022, 10:43 PMTim Edwards
04/06/2022, 1:55 AMMitch Bailey
04/06/2022, 2:04 AM