← Back to team overview

kicad-developers team mailing list archive

Re: How to SCH_SCREEN::SchematicCleanup?

 

Hi,

On 15.06.2016 08:53, jp charras wrote:

> I do not understand why net ties are related to schematic cleanup.
> They are 2 separate features.

For the "net ties as special junctions" implementation, the cleanup code
needs to be adjusted -- that's where they come together.

> Although no decision was taken, inside a schematic, the best way for a
net tie is a virtual
> component with 2 (or more) pins connected to each net and a specific
footprint put on the board (to
> control the location of nets connection, the connected layers ...

I'm not totally opposed to creating magic components, but I think
completely special-casing net ties through the entire stack is easier to
use, easier to implement and easier to maintain over the long term.

If it were a special component, we'd have to extend the component edit
dialog, which already has a lot of properties that do not really apply
to net ties. There are no sub-units, there is no De-Morgan style, no
value or reference. So the UI would basically have two modes for the
dialog, one where a check mark is set and all other widgets are
disabled, and one that behaved as before.

The library would allow us to support several graphic styles, which is
kind of a bonus, but the disadvantage is that there would have to be
components for different numbers of connected nets and graphical
layouts, and placing a tie would require the full component selection
process and creation of new components if the particular variant the
user needs doesn't exist yet (which is already annoying with power symbols).

For three and more connections, the most common symbol in datasheets
seems to be a thicker junction with an arrow pointing to it, although
that is by no means universal. Most people just draw normal junctions
and assume the layouter knows what they mean, it seems.

I personally like the junction-like appearance, because it takes up
relatively little space (see attached image). An arrow pointing towards
it would probably resolve the ambiguity.

For ERC, the nets are connected, so we'd have to implement support for
internally connected pins (which would be useful either way, so that's
not a huge disadvantage). The main problem I see here is that we'd have
to touch precisely the most complex bits of ERC here -- the pin-vs-pin
handling.

Netlist generation would be easier, but so far I've needed only ten
additional lines and a bit of shuffling around other code.

On the pcbnew side, I think completely special-casing net ties would
make sense, too, because ties can be incident with pads (SMD or THT) or
vias, or placed on their own. Modelling them as pads would require
special rules for pad-pad and pad-via interaction, so I'd rather see
them modifying the behaviour of items they are attached to instead of
creating copper on their own (basically, the modified object becomes
part of multiple nets).

This should also make zone generation a bit easier. My current use case
is a current sensing shunt, which should connect two zones, and have a
single trace leave each pad separately towards the instrumentation
amplifier used for measurement. I think using the net tie to modify the
existing pad is the easiest implementation here, as it doesn't introduce
conflict resolution requirements if the pads are different sizes.

> This is also the way used in other ECAD tools.

Yes, but that doesn't work universally.

The approach in Alti*m is that they use a footprint to introduce copper
that is not checked in DRC. However, their approach still requires that
the pads in the footprint are wide enough apart to not cause a DRC
conflict when the traces are connected, and placing pads on top of each
other is also a DRC violation unless special rules are in effect.

Their white paper simply doesn't address the use cases "current sensing
shunt" and "decoupling capacitor", which both are better served with a
point-like item that creates DRC exemptions in the components it touches
than a clever way to trick DRC into thinking that two points aren't
connected.

One thing they cannot represent for example are three nets meeting in a
blind via, but this can be useful e.g. for length-matched clock lines.

I'm not sure how to proceed here since I'm not entirely familiar with
the codebase yet, so my assessment of the effort required may be way
off. I'd in any case like to cover at least the use cases

 - connecting AGND and DGND in a single place
 - decoupling capacitors (ratsnest connecting power pins and capacitors)
 - current shunts
 - lenght matched clocks

and ideally allow net ties to be placed so that they do not take up
extra board space.

   Simon

Attachment: net_tie_sch.png
Description: PNG image

Attachment: signature.asc
Description: OpenPGP digital signature


References