Philipp Gühring
10/25/2022, 8:50 AMPhilipp Gühring
10/25/2022, 7:39 PMPhilipp Gühring
10/25/2022, 7:41 PMPhilipp Gühring
10/25/2022, 7:42 PMPhilipp Gühring
10/25/2022, 7:45 PMPhilipp Gühring
10/25/2022, 7:46 PMTim Edwards
10/25/2022, 8:38 PMPhilipp Gühring
10/25/2022, 9:29 PMMitch Bailey
10/26/2022, 12:32 AMCircuit 1: sky130_fd_sc_hvl__lsbufhv2lv_1 |Circuit 2: sky130_fd_sc_hvl__lsbufhv2lv_1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: a_30_1337# |Net: a_30_1337#
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 | sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1
sky130_fd_pr__nfet_g5v0d10v5/2 = 2 | sky130_fd_pr__nfet_g5v0d10v5/2 = 2
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1 | sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1
sky130_fd_pr__pfet_g5v0d10v5/2 = 1 | sky130_fd_pr__pfet_g5v0d10v5/2 = 1
|
Net: VGND_uq0 |Net: VGND
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 2 | sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 4
sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1
|
Net: VNB |Net: VNB
sky130_fd_pr__nfet_g5v0d10v5/4 = 4 | sky130_fd_pr__nfet_g5v0d10v5/4 = 4
sky130_fd_pr__nfet_01v8/4 = 1 | sky130_fd_pr__nfet_01v8/4 = 1
|
Net: a_30_207# |Net: a_30_207#
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1 | sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1
sky130_fd_pr__nfet_g5v0d10v5/2 = 1 | sky130_fd_pr__nfet_g5v0d10v5/2 = 1
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 | sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1
|
Net: a_389_1337# |Net: a_389_1337#
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1 | sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 1
sky130_fd_pr__pfet_01v8_hvt/2 = 1 | sky130_fd_pr__pfet_01v8_hvt/2 = 1
sky130_fd_pr__pfet_01v8_hvt/(1|3) = 1 | sky130_fd_pr__pfet_01v8_hvt/(1|3) = 1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: VPWR_uq0 |(no matching net)
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 |
|
Net: VPWR |(no matching net)
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: A |Net: A
sky130_fd_pr__pfet_g5v0d10v5/2 = 1 | sky130_fd_pr__pfet_g5v0d10v5/2 = 1
sky130_fd_pr__nfet_g5v0d10v5/2 = 1 | sky130_fd_pr__nfet_g5v0d10v5/2 = 1
|
Net: VPB |Net: VPB
sky130_fd_pr__pfet_g5v0d10v5/4 = 2 | sky130_fd_pr__pfet_g5v0d10v5/4 = 2
|
Net: VGND |Net: VPWR
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 2 | sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 2
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
In the first and third section, the only difference is in VGND
. A filtered report might look like
Circuit 1: sky130_fd_sc_hvl__lsbufhv2lv_1 |Circuit 2: sky130_fd_sc_hvl__lsbufhv2lv_1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: a_30_1337# |Net: a_30_1337#
Net: VGND_uq0 |Net: VGND
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 2 | sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 4 *
sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1
|
Net: VNB |Net: VNB
Net: a_30_207# |Net: a_30_207#
Net: a_389_1337# |Net: a_389_1337#
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: VPWR_uq0 |(no matching net)
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 |
|
Net: VPWR |(no matching net)
sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 1 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Net: A |Net: A
Net: VPB |Net: VPB
Net: VGND |Net: VPWR
sky130_fd_pr__nfet_g5v0d10v5/(1|3) = 2 | sky130_fd_pr__pfet_g5v0d10v5/(1|3) = 2
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Splitting into 2 files and using vimdiff to highlight the differences might work too.
Incidentally, this is a case where disconnected nets with the same label in the layout match one net in the schematic.Tim Edwards
10/26/2022, 1:01 PMdebug on
command in the setup (which dumps a ton of data), and drop that information into the JSON file format, and get the GUI viewer to filter that output in a sensible way. Currently, debug on
only produces text output, and does not add to the JSON output, although the information is just an additional level of hierarchy to the output and lends itself to JSON better than it does to text output, which gets so messy that it is practically unreadable.
@Mitch Bailey: I wrote some additional output formatting into netgen so that it will attempt to match the columns on each side, but if net names are different on each side, then it quickly gets lost. The additional information cited above that is output by the debug
option is looking deeper into the connectivity trees, so that's additional information that could be used for better matching. It's also really easy to end up with a matching algorithm that runs O(N^2) and drags netgen down to a crawl.Philipp Gühring
10/26/2022, 3:40 PMTim Edwards
10/26/2022, 4:18 PM