Mitch Bailey
12/30/2022, 9:23 PMexport NETGEN_COLUMNS=80
before LVS.
2. The nfet looks like it’s an extracted parameterized cell. Are you running from a mag
file or gds?Rita
12/30/2022, 10:03 PMMitch Bailey
12/30/2022, 10:07 PM$PDK_ROOT/$PDK/libs.tech/netgen/${PDK}_setup.tcl
?
Could you share your LVS command?Rita
12/30/2022, 10:49 PMRita
12/30/2022, 10:49 PMRita
12/30/2022, 10:50 PMMitch Bailey
12/30/2022, 10:54 PMlvs "mpw8.spice mpw8" "mpw8_mag.spice mpw8_mag" <setup_file>
Replace <setup_file>
with the full path to the setup file.Rita
12/30/2022, 11:02 PMRita
12/30/2022, 11:13 PMRita
12/30/2022, 11:13 PMRita
12/31/2022, 12:47 AMRita
12/31/2022, 12:47 AMRita
12/31/2022, 12:48 AMRita
12/31/2022, 1:41 AMz-a-p-k-i-n-g
01/23/2023, 1:48 PMMitch Bailey
02/21/2023, 6:32 AMuser_proj_example
has the following assign statements for top level signals.
assign la_data_out[27] = io_out[35];
assign la_data_out[26] = io_out[34];
assign la_data_out[25] = io_out[33];
assign la_data_out[24] = io_out[32];
assign la_data_out[23] = io_out[31];
assign la_data_out[22] = io_out[30];
assign la_data_out[21] = io_out[29];
assign la_data_out[20] = io_out[28];
assign la_data_out[19] = io_out[27];
assign la_data_out[18] = io_out[26];
assign la_data_out[17] = io_out[25];
assign la_data_out[16] = io_out[24];
assign la_data_out[15] = io_out[23];
assign la_data_out[14] = io_out[22];
assign la_data_out[13] = io_out[21];
assign la_data_out[12] = io_out[20];
assign la_data_out[11] = io_out[19];
assign la_data_out[10] = io_out[18];
assign la_data_out[9] = io_out[17];
assign la_data_out[8] = io_out[16];
assign la_data_out[7] = io_out[15];
assign la_data_out[6] = io_out[14];
assign la_data_out[5] = io_out[13];
assign la_data_out[4] = io_out[12];
assign la_data_out[3] = io_out[11];
assign la_data_out[2] = io_out[10];
assign la_data_out[1] = io_out[9];
assign la_data_out[0] = io_out[8];
assign io_oeb[35] = io_oeb[10];
assign io_oeb[34] = io_oeb[10];
assign io_oeb[33] = io_oeb[10];
assign io_oeb[32] = io_oeb[10];
assign io_oeb[31] = io_oeb[10];
assign io_oeb[30] = io_oeb[10];
assign io_oeb[29] = io_oeb[10];
assign io_oeb[28] = io_oeb[10];
assign io_oeb[27] = io_oeb[10];
assign io_oeb[26] = io_oeb[10];
assign io_oeb[25] = io_oeb[10];
assign io_oeb[24] = io_oeb[10];
assign io_oeb[23] = io_oeb[10];
assign io_oeb[22] = io_oeb[10];
assign io_oeb[21] = io_oeb[10];
assign io_oeb[20] = io_oeb[10];
assign io_oeb[19] = io_oeb[10];
assign io_oeb[18] = io_oeb[10];
assign io_oeb[17] = io_oeb[10];
assign io_oeb[16] = io_oeb[10];
assign io_oeb[15] = io_oeb[10];
assign io_oeb[14] = io_oeb[10];
assign io_oeb[13] = io_oeb[10];
assign io_oeb[12] = io_oeb[10];
assign io_oeb[11] = io_oeb[10];
assign io_oeb[9] = io_oeb[10];
assign io_oeb[8] = io_oeb[10];
This results in shorts between pins at the top level. To prevent magic from deleting the shorted pins, I’m using
ext2spice short resistor
This preserves all the pins in the layout, but still getting these messages (maybe from verilog?)
Duplicate pin io_oeb[34] in cell user_project_wrapper
Duplicate pin la_data_out[27] in cell user_project_wrapper
Duplicate pin la_data_out[26] in cell user_project_wrapper
Duplicate pin la_data_out[25] in cell user_project_wrapper
Duplicate pin la_data_out[24] in cell user_project_wrapper
Duplicate pin la_data_out[23] in cell user_project_wrapper
Duplicate pin la_data_out[22] in cell user_project_wrapper
Duplicate pin la_data_out[21] in cell user_project_wrapper
Duplicate pin la_data_out[20] in cell user_project_wrapper
Duplicate pin la_data_out[19] in cell user_project_wrapper
Duplicate pin la_data_out[18] in cell user_project_wrapper
Duplicate pin la_data_out[17] in cell user_project_wrapper
Duplicate pin la_data_out[16] in cell user_project_wrapper
Duplicate pin la_data_out[15] in cell user_project_wrapper
Duplicate pin la_data_out[14] in cell user_project_wrapper
Duplicate pin la_data_out[13] in cell user_project_wrapper
Duplicate pin la_data_out[12] in cell user_project_wrapper
Duplicate pin la_data_out[11] in cell user_project_wrapper
Duplicate pin la_data_out[10] in cell user_project_wrapper
Duplicate pin la_data_out[9] in cell user_project_wrapper
Duplicate pin la_data_out[8] in cell user_project_wrapper
Duplicate pin la_data_out[7] in cell user_project_wrapper
Duplicate pin la_data_out[6] in cell user_project_wrapper
Duplicate pin la_data_out[5] in cell user_project_wrapper
Duplicate pin la_data_out[4] in cell user_project_wrapper
Duplicate pin la_data_out[3] in cell user_project_wrapper
Duplicate pin la_data_out[2] in cell user_project_wrapper
Duplicate pin la_data_out[1] in cell user_project_wrapper
Duplicate pin la_data_out[0] in cell user_project_wrapper
and LVS yields a matching topology with pin mismatches.
(no matching pin) |io_oeb[35]
(no matching pin) |io_out[35]
(no matching pin) |io_out[34]
(no matching pin) |io_out[33]
(no matching pin) |io_out[32]
(no matching pin) |io_out[31]
(no matching pin) |io_out[30]
(no matching pin) |io_out[29]
(no matching pin) |io_out[28]
(no matching pin) |io_out[27]
(no matching pin) |io_out[26]
(no matching pin) |io_out[25]
(no matching pin) |io_out[24]
(no matching pin) |io_out[23]
(no matching pin) |io_out[22]
(no matching pin) |io_out[21]
(no matching pin) |io_out[20]
(no matching pin) |io_out[19]
(no matching pin) |io_out[18]
(no matching pin) |io_out[17]
(no matching pin) |io_out[16]
(no matching pin) |io_out[15]
(no matching pin) |io_out[14]
(no matching pin) |io_out[13]
(no matching pin) |io_out[12]
(no matching pin) |io_out[11]
(no matching pin) |io_out[10]
(no matching pin) |io_out[9]
(no matching pin) |io_out[8]
io_oeb[35] |(no matching pin)
io_out[35] |(no matching pin)
io_out[34] |(no matching pin)
io_out[33] |(no matching pin)
io_out[32] |(no matching pin)
io_out[31] |(no matching pin)
io_out[30] |(no matching pin)
io_out[29] |(no matching pin)
io_out[28] |(no matching pin)
io_out[27] |(no matching pin)
io_out[26] |(no matching pin)
io_out[25] |(no matching pin)
io_out[24] |(no matching pin)
io_out[23] |(no matching pin)
io_out[22] |(no matching pin)
io_out[21] |(no matching pin)
io_out[20] |(no matching pin)
io_out[19] |(no matching pin)
io_out[18] |(no matching pin)
io_out[17] |(no matching pin)
io_out[16] |(no matching pin)
io_out[15] |(no matching pin)
io_out[14] |(no matching pin)
io_out[13] |(no matching pin)
io_out[12] |(no matching pin)
io_out[11] |(no matching pin)
io_out[10] |(no matching pin)
io_out[9] |(no matching pin)
io_out[8] |(no matching pin)
These pins should match, as far as I can tell.
This output is from netgen’s MatchPins
routine after printing the matching pins. So maybe the deleted pins are causing the routine to stop before it should.
I’ll look into it a little more, but would welcome any advice.
I think that ideally, LVS should not delete shorted pins, but rather check that all pins are shorted in the same manner in both the layout and source.
(The user_proj_example
level does not have text, so extracting the gds, as is, isn’t very helpful. I flattened user_proj_example
in the user_project_wrapper
layout, but when running LVS, netgen takes 8 hours to flatten the verilog side of user_proj_example
. Since the verilog top is just a wrapper, I replaced the user_proj_example
call in user_project_wrapper
with the actual contents of user_proj_example
and netgen runs in about 5 mins.)Joshua Thater
03/31/2023, 3:43 AMextract all
ext2spice lvs
ext2spice
Once this is done I open netgen and run the following command:
lvs "inv.spice inv" "inv_mag.spice inv_mag" sky130A_setup.tcl
I figure I am doing something wrong when I create my layout, but I am not able to pinpoint what it is. I've attached an image of my layout along with the spice files and the comp.out file. I appreciate any help on this issue. Thanks!Karla Julieth Camacho Mercado
04/17/2023, 4:23 AMAhmed Reda
04/18/2023, 2:55 AMAhmed Reda
04/18/2023, 2:55 AMSam Ellicott
04/26/2023, 4:46 PMAhmed Reda
04/29/2023, 1:51 PMgds read <cell>
flatten -doinplace dac_3v_8bit
extract do local
extract all
ext2spice lvs
ext2spice
Thanks.Minsang Yu
05/24/2023, 8:12 AMopamp.sp
: pre-layout file
opamp.spice
: post-layout fileMitch Bailey
05/29/2023, 8:10 AMTim Edwards
05/29/2023, 9:21 AMMitch Bailey
05/29/2023, 9:35 AMTim Edwards
05/30/2023, 10:09 AMAhmed Reda
05/30/2023, 10:53 PMselect top cell
flatten -doinplace dac_3v_8bit_0
flatten -doinplace sbamuxm4_0
extract do local
extract all
ext2spice lvs
ext2spice
Thanks in advanceSam Crow
06/05/2023, 12:27 AMmodel *cell_name* blackbox
to mark a subcircuit as blackbox in netgen lvs setup.tcl script and I can confirm with puts [model *cell_name*]
that the model type for cell_name changes from subcircuit to blackbox. But then in the lvs report I see it is still comparing them as subcircuits (and thus failing lvs because they don't match, hench why I want to make them black box)... I'm not sure I understand how to achieve the blackbox behavior I want.
Furthermore (maybe related?): the above describes the behavior after setting model blackbox on
, when I set model blackbox off
the behavior is the same except that model *cell_name*
returns "module" which does not appear to be a valid model type according to the documentation. Nor is that difference of behavior documented in the section on model blackbox on|off in the documentation at http://opencircuitdesign.com/netgen/ maybe I'm looking in the wrong place?Emilio Baungarten
06/09/2023, 5:16 PM