Aleksandar Pajkanovic
10/21/2023, 9:44 PMVSUBS showing up out of nowhereAleksandar Pajkanovic
10/21/2023, 9:59 PMVSUBS shows up in the netlist extracted (for lvs) from Magic, that means that we didn't connect up the substrate... Well, the thing in our case is the following:
1. we have 5 subcells (one of them a simple opamp), each designed on its own, each carefully and thoroughly checked against DRC and LVS
2. we have put those 5 subcells in a top cell magic file and routed them together.
3. we connected all the grounds together in Magic layout just the same as in Xschem top cell schematic
4. during extraction of independent subcells we never saw any report of VSUBS
5. when doing
extract all
ext2spice lvs
ext2spice
on the top cell, we get a spice netlist that puts VSUBS instead of the gnd node in the opamp (called ground, we didn't use global nodes)...
When we do LVS, for 4 subcells we get:
Flattening unmatched subcell sky130_fd_pr__res_xhigh_po_0p69_XZX24Q in circuit dac_cell2 (1)(4 instances)
Flattening unmatched subcell sky130_fd_pr__pfet_g5v0d10v5_FGUWVM#1 in circuit dac_cell2 (1)(1 instance)
Flattening unmatched subcell sky130_fd_pr__pfet_g5v0d10v5_FGK6VM in circuit dac_cell2 (1)(3 instances)
Class dac_cell2 (0):  Merged 2 parallel devices.
Class dac_cell2 (0):  Merged 1 series devices.
Class dac_cell2 (1):  Merged 2 parallel devices.
Class dac_cell2 (1):  Merged 1 series devices.
Subcircuit summary:
Circuit 1: dac_cell2                       |Circuit 2: dac_cell2                       
-------------------------------------------|-------------------------------------------
sky130_fd_pr__pfet_g5v0d10v5 (4)           |sky130_fd_pr__pfet_g5v0d10v5 (4)           
sky130_fd_pr__res_xhigh_po_0p69 (4->1)     |sky130_fd_pr__res_xhigh_po_0p69 (4->1)     
Number of devices: 5                       |Number of devices: 5                       
Number of nets: 9                          |Number of nets: 9                          
---------------------------------------------------------------------------------------
Resolving symmetries by property value.
Resolving symmetries by pin name.
Netlists match uniquely.
Subcircuit pins:
Circuit 1: dac_cell2                       |Circuit 2: dac_cell2                       
-------------------------------------------|-------------------------------------------
vgnd                                       |vgnd                                       
vbias                                      |vbias                                      
vsw                                        |vsw                                        
iout_n                                     |iout_n                                     
iout                                       |iout                                       
vsup                                       |vsup                                       
iref                                       |iref                                       
---------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes dac_cell2 and dac_cell2 are equivalent.
but for the subcell 5, the opamp we get:
Circuit 1: miel21_opamp                    |Circuit 2: miel21_opamp                    
-------------------------------------------|-------------------------------------------
sky130_fd_pr__pfet_g5v0d10v5 (3)           |sky130_fd_pr__pfet_g5v0d10v5 (26->3)       
sky130_fd_pr__nfet_g5v0d10v5 (5)           |sky130_fd_pr__nfet_g5v0d10v5 (14->5)       
sky130_fd_pr__res_xhigh_po_0p69 (3->1)     |sky130_fd_pr__res_xhigh_po_0p69 (3->1)     
sky130_fd_pr__cap_mim_m3_1 (1)             |sky130_fd_pr__cap_mim_m3_1 (1)             
Number of devices: 10                      |Number of devices: 10                      
Number of nets: 9                          |Number of nets: 9                          
---------------------------------------------------------------------------------------
Netlists match uniquely.
Subcircuit pins:
Circuit 1: miel21_opamp                    |Circuit 2: miel21_opamp                    
-------------------------------------------|-------------------------------------------
ground                                     |VSUBS **Mismatch**                         
inNeg                                      |inNeg                                      
inPos                                      |inPos                                      
outSingle                                  |outSingle                                  
power                                      |power                                      
---------------------------------------------------------------------------------------
Cell pin lists for miel21_opamp and miel21_opamp altered to match.
Device classes miel21_opamp and miel21_opamp are equivalent.
and then (omitting quite a bit of lines)
Circuit contains 12 nets, and 2 disconnected pins.
Circuit 1 contains 8 devices, Circuit 2 contains 8 devices.
Circuit 1 contains 12 nets,    Circuit 2 contains 12 nets.
Final result: 
Top level cell failed pin matching.
Logging to file "comp.out" disabled
LVS Done.
Again, note that individual LVS check for the opamp passes without any issues, circuits and netlists equivalent. And yet, here netgen shows Mismatch for that very same circuit.
@Tim Edwards do you have an idea, maybe?Aleksandar Pajkanovic
10/21/2023, 10:03 PMcomp.outAleksandar Pajkanovic
10/21/2023, 10:04 PMTim Edwards
10/21/2023, 11:17 PMVSUBS substrate node that is not connected to ground.  Then it is hard for magic to figure out that all the subcell substrates connect together, connect to VSUBS and thereby connect VSUBS back to ground through the subcells.  The easiest thing to do is just to draw a single substrate contact (psc on psd) on the ground net in the top level cell.  That will tie ground to the substrate in the top level cell and avoid the extraction problem.Aleksandar Pajkanovic
10/21/2023, 11:31 PMAleksandar Pajkanovic
10/21/2023, 11:32 PMTim Edwards
10/21/2023, 11:35 PMAleksandar Pajkanovic
10/21/2023, 11:37 PMAleksandar Pajkanovic
10/21/2023, 11:37 PMTim Edwards
10/21/2023, 11:57 PMmiel21_opamp.  That cell also has substrate connections only within subcells.  So if you draw yet another substrate contact inside miel21_opamp that is connected to net ground , that will fix the issue (I confirmed it).
It's definitely an error in magic that it extracts the ground net of miel21_opamp as VSUBS and not as ground, and the pin ground vanishes from the netlist.  But if you use the workaround, then I don't have to treat the error as desperately needing attention.Aleksandar Pajkanovic
10/21/2023, 11:58 PMAleksandar Pajkanovic
10/22/2023, 12:08 AMmiel21_opamp, so just wandering now for the love of philosophy - what's the proper way of "refreshing" it in the top cell (and not close/open Magic)?Tim Edwards
10/22/2023, 12:09 AMflush miel21_opamp would do it.Aleksandar Pajkanovic
10/22/2023, 12:20 AMVSUBS is definitely gone, thank you!
It seems there's something messed up with the netlist coming out of dac_cell3, so we'll take a look there. However, it is reporting another strange thing:
Subcircuit pins:
Circuit 1: dac_top_cell                    |Circuit 2: dac_top_cell
-------------------------------------------|-------------------------------------------
out                                        |out
vbias07                                    |(no matching pin)
in3                                        |in3
in1                                        |in1
vbias18                                    |vbias18
in4                                        |in4
in2                                        |in2
vgnd                                       |vgnd
vsup                                       |(no matching pin)
(no matching pin)                          |vbias07
(no matching pin)                          |vsup
vbias07                                    |(no matching pin)
vsup                                       |(no matching pin)
---------------------------------------------------------------------------------------
Cell pin lists for dac_top_cell and dac_top_cell altered to match.
Device classes dac_top_cell and dac_top_cell are equivalent.
Final result: Top level cell failed pin matching.
There obviously is vbias07 in both circuits, so... Is this common behavior from netgen when there is a misconnection or again something we need to tackle with a workaround?Aleksandar Pajkanovic
10/22/2023, 12:21 AMTim Edwards
10/22/2023, 2:42 AMsetlabel layer metal2.  Then you can erase the floating square of metal1 that used to be the label attachment area.Aleksandar Pajkanovic
10/22/2023, 6:12 AM