Tim Edwards
06/09/2022, 7:05 PMio_oeb[...]
pins, and so only one shows up as a pin in magic. This situation is normally resolved by putting a metal resistor in the path between two pins to virtually separate the net. I'm not aware that the synthesis tools have any option to do that, so the next best thing is just to force the synthesis tools to separate every net to every pin by buffering.Mitch Bailey
06/09/2022, 10:45 PMassign
in verilog, it looks like netgen is using the first net on the left of the first assign statement while the innovus verilog is using the net on the right.
For example, from design.lvs.v
assign io_oeb[31] = io_oeb[29];
assign io_oeb[30] = io_oeb[29];
Of the 3 nets listed here, only io_oeb[29]
is actually used in the gate level verilog and only io_oeb[29]
is extracted in the layout.
When there is a net conflict during extraction, do you remember which net is chosen? Using the same method to chose the net in netgen may solve the problem.
@Jake Ke You might try switching the order of the nets in the assign statements. For example,
assign io_oeb[29] = io_oeb[31];
assign io_oeb[30] = io_oeb[31];
Jake Ke
06/10/2022, 12:09 AMset_isolate_ports -type buffer [all_outputs]
set_fix_multiple_port_nets -outputs -buffer_constants
All output ports are buffered in the netlist. However, design.lvs.v
still has those assign statements. And that does not get rid off the lvs mismatches.
As @Mitch Bailey pointed out, innovus and magic extractions put the wires on the opposite sides of the equation.Mitch Bailey
06/10/2022, 12:16 AMJake Ke
06/10/2022, 12:20 AMMitch Bailey
06/10/2022, 12:21 AMJake Ke
06/10/2022, 12:39 AMassign io_oeb[31] = io_oeb[29];
assign io_oeb[30] = io_oeb[29];
only io_oeb[29] gets the output from a buffer.
If I switch to:
assign io_oeb[29] = io_oeb[31];
assign io_oeb[30] = io_oeb[31];
don't I need to make io_oeb[31] connect to the output pin of the buffer?
I am not familiar with LVS. If I change the instance connection, could that cause LVS errors else where?Mitch Bailey
06/10/2022, 12:43 AMJake Ke
06/10/2022, 1:12 AMTim Edwards
06/10/2022, 1:14 AMJake Ke
06/10/2022, 1:20 AMTim Edwards
06/10/2022, 1:28 AMMitch Bailey
06/10/2022, 2:17 AMJake Ke
06/10/2022, 2:28 AMMatt Venn
06/10/2022, 6:34 AMJake Ke
06/10/2022, 7:34 AMMatt Venn
06/10/2022, 7:35 AMMatt Venn
06/10/2022, 7:36 AMJake Ke
06/10/2022, 7:41 AMMatt Venn
06/10/2022, 7:45 AMMatt Venn
06/10/2022, 7:46 AMMatt Venn
06/10/2022, 7:46 AMJake Ke
06/10/2022, 8:05 AMJake Ke
06/10/2022, 11:29 PMTim Edwards
06/11/2022, 2:33 AMTim Edwards
06/11/2022, 2:58 PMext2spice short voltage
, then when pins of a subcircuit in magic are shorted together, the SPICE netlist will keep both pins and connect them together with an ideal voltage source at zero volts (ext2spice short resistor
does the same thing with an ideal zero-ohm resistor). Netgen knows how to recoginize the zero-volt sources and zero-ohm resistors and treats them as net separators. I am not 100% sure that this will solve your LVS issue, but I think it will. ---Update: There is a small error in netgen's SPICE parser that prevents it from reading the value of a voltage source, so use ext2spice short resistor
, not ext2spice short voltage.
Matt Venn
06/11/2022, 3:12 PMMatt Venn
06/11/2022, 3:12 PMMatt Venn
06/11/2022, 3:19 PMTim Edwards
06/11/2022, 3:21 PMio_oeb
pins being driven by the same net, but io_oeb
is not a constant.Tim Edwards
06/11/2022, 4:59 PMJake Ke
06/11/2022, 10:49 PMext2spice short resistor
works for magic extraction! All pins are preserved in the spice file. Now, I think netgen just needs the the pin matching algorithm fix that you are talking about, correct?
(no matching pin) |io_oeb[37]
(no matching pin) |io_oeb[35]
(no matching pin) |io_oeb[33]
(no matching pin) |io_oeb[31]
(no matching pin) |io_oeb[28]
(no matching pin) |io_oeb[24]
(no matching pin) |io_oeb[16]
(no matching pin) |io_oeb[13]
(no matching pin) |io_oeb[11]
(no matching pin) |io_oeb[9]
(no matching pin) |io_oeb[7]
(no matching pin) |io_oeb[5]
(no matching pin) |io_oeb[3]
(no matching pin) |io_oeb[1]
io_oeb[37] |(no matching pin)
io_oeb[35] |(no matching pin)
io_oeb[33] |(no matching pin)
io_oeb[31] |(no matching pin)
io_oeb[28] |(no matching pin)
io_oeb[24] |(no matching pin)
io_oeb[16] |(no matching pin)
io_oeb[13] |(no matching pin)
io_oeb[11] |(no matching pin)
io_oeb[9] |(no matching pin)
io_oeb[7] |(no matching pin)
io_oeb[5] |(no matching pin)
io_oeb[3] |(no matching pin)
io_oeb[1] |(no matching pin)
Mitch Bailey
06/12/2022, 5:03 PMext2spice short resistor
?Jake Ke
06/12/2022, 5:48 PMTim Edwards
06/12/2022, 9:38 PMTim Edwards
06/12/2022, 9:43 PMJake Ke
06/13/2022, 12:03 AMJake Ke
06/13/2022, 1:20 AMTim Edwards
06/13/2022, 12:37 PMUSE_POWER_PINS
. You can just add a ``define USE_POWER_PINS` at the top of your project wrapper verilog.Jake Ke
06/13/2022, 6:24 PMLinen is a search-engine friendly community platform. We offer integrations with existing Slack/Discord communities and make those conversations Google-searchable.
Powered by