Extracting a Netlist from NETEX-G's ASCII Output

Netex-G is first and foremost a geometry engine. It builds "nets" from conductor and via information by unionizing all the conductors on each layer of a PCB. Think of each resulting geometry as a "net" on that particular layer.

The program then looks at the via layers above and below each conductor layer to see where the vias intersect conductors. It is able then to follow the connection from one layer to the next using this via/conductor intersection.

The end result is a list of conductors and vias that are electrically connected. By default NETEX-G assigns net names starting at Net1, Net2, Net3 .... until all groups have been accounted for.

Adding Net Name and Pin Information

Without any additional information we are not yet able to provide a conventional net list. However there are a couple of ways to add labels for both nets and pins (aka nodes).

What ASCII File to Use?

Netex-G dumps a number of files into the "working" directory (user defines this directory in the settings) and the one that contains the desired net/pin information is always named: *_rewrite_mrg_neall_ascexfilt.txt.

Note: Files in the working directory are erased when Netex-G is closed unless the user has set a preference to retain them.

Where to Find Net and Pin Information

The ASCII file is broken into many sections and it evolved over the years as sections were added. Hence, you will find net and pin information scattered in multiple locations.

The Net Table

There is a section starting with B_NET_TABLE and terminated by E_NET_TABLE that contains indices for the net names. This allows other sections to reference the index number instead of spelling out what might be a long net name. This section looks like the sample below:

1     Net1
2     Net2
3     Net3
4     Net4
5     Net5
6     +5V
7     24MHZ
8     CLKIN
9     Net9
10    GND
95    Net151
96    $$$3116
97    Net153

The COMP Section

The COMP section lists each component that is placed (this information usually is derived from ODB++ input to Netex-G). This section begins with B_COMP and is terminated by E_COMP.

Each component that is placed starts with B_COMP_REF and is terminated by E_COMP_REF

The Pin List

Within each component placement section, there is a list of pins that begins with B_COMP_PIN and is terminated by E_COMP_PIN.

Each line in this section defines a pin and its attributes. These include (from left to right)

A sample of a placed component is shown below:

R1            52070.000000 13970.000000  1
COMP_NAME R1_8W_1206
COMP_EXTENT 4953.000000  1524.000000  52070.000000 13970.000000 0.000000     M0
1             50355.500000 13970.000000  1      3        0.000  M0 80
2             53784.500000 13970.000000  1      3        0.000  M0 6

One can see that pin 1 is located at 50.3555,13.97 mm on stackup 1 (the top of the PCB) using the padstack found at index 3. Rotation = 0.00, no mirroring and it is attached to the net with index 80.

One could write a simple program that would iterate through all the component placements, extract the reference designator, extract the pin labels and the net index and build a conventional netlist from this information. It would not include any "nets" of conductors extracted by NETEX-G that were electrically isolated from the component pins, however.

LIBRARY (Conductor and Via Geometries)

This section (which can be identified by searching for the string LIBRARY starting in column 1) lists all of the conductor and via geometries sorted by net.

The first line of each group of conductors/vias (i.e. a NET) start with the keyword NET.

Following that keyword is the net's name.

Following the net name are pins or nodes.

Each node entry has 4 fields:

A sample is shown below:

NET 24MHZ R5.1 8445500 43180000 1 Y1.3 11404600 39141400 1 U7.1 10795000 15494000 1
VIA 1 7 635000 13
7874000 13589000
VIA 1 7 635000 13
10795000 13716000
7852850 13145000
7895150 13145000
7937260 13149020
7978790 13157030
8019380 13168950
8058650 13184670

Collecting all the netlist information from the NET lines should result in the same netlist as generated by iterating through the component pins with the exception that this approach will include any conductor/via nets that are electrically isolated from the pins.