← Back to team overview

kicad-developers team mailing list archive

Re: [RFC] Eeschema bus upgrades and new connectivity algorithm

 

Hmm okay, we seem to differ in opinions once again. But you are right, nothing stops me from naming my aliases like that anyway.

I have checked schematics for students, and I know that I  would be very confused if the aliases they have used did not immediatly pop up for me somehow. Be it syntax, colors or even text-style, maybe making aliases appear in *bold *text, indicating they are more than meets the eye, or cursive text, or a grey background color?

- Kristoffer


On 2017-12-14 13:17, Maciej Suminski wrote:
If I recall correctly, you are allowed to name an alias using <name>
format, so there is nothing preventing you from doing so. I would rather
not impose such constraint on aliases, but I am interested in other
opinions.

Regards,
Orson

On 12/14/2017 01:09 PM, kristoffer Ödmark wrote:
Maybe we could adapt from c++ here? having the notation <ALIAS> instead
of {ALIAS}, the same way c++ uses templates.

one could do MEMORY{<RAM> D[15..0]}. And get MEMORY.OE MEMORY.WE and
MEMORY D15 etc. Just to be more clear that it is an alias and not a
net-name.

- Kristoffer


On 2017-12-14 12:43, Clemens Koller wrote:
Hello, Jon!

Thank you for your work! I just watched your video and want to give
you some feedback:

I would prefer not to use the term "Bus Vector". A bus is simply a
list (or a collection) of arbitrarily named nets. A bus group would be
- in my understanding - a group of (different) busses.

I like your syntax to represent the list (or collection) {} as well as
an array of nets [].
You first had a bus containing arbitrary nets: MEMORY{A{7..0] D[15..0]
OE WE} and you refer to single nets as i.e. MEMORY.A3 or MEMORY.OE -
fine.

But when you add aliases I run into troubles to keep things
separate/clear:
{RAM} appears to me as an unnamed bus containing the net RAM. WTF is
that?

MEMORY{RAM} appears as a bus named MEMORY containing the single net RAM.
I would expect to access that net via MEMORY.RAM - Oops.

I am definitely irritated by a net MEMORY.OE pulled out of an bus
named MEMORY{RAM}. 8-(
It's impossible to distinguish bus aliases from nets of a bus.

Idea: It might be nice to virtually allow folding/unfolding of the net
collection contained in a bus, i.e. by showing MEMORY{*} or MEMORY{..}
or MEMORY{+}, whereas the '*' or '..' or '+' is shown in a different
colour. If that's still to long, I would not mind renaming the bus to
MEM{..} or even M{..}.
A simple mouseover M{..} could pop-up to show all nets and arrays the
bus contains.

Side note: For big designs, table-based design entry (as well as
design entry by importing tons of generated connections) seems to get
more and more important. It might be wise to consider how busses (and
collections of <something>) are represented there as well.

Just my five cents,

Clemens

On 2017-12-14 05:15, Jon Evans wrote:
Hi all,

As some of you know, I've been working on some new features for
Eeschema that expand the capabilities of buses.
These features are not yet complete, but I wanted to share my
progress to get early feedback.

Since there are a number of things, I have made a ~4 minute demo
video, in which I walk through them and discuss:

https://youtu.be/z6x0xiKgDIc

In case you don't want to watch the video, here are the new features:

    * The existing style of bus is now referred to as a Bus Vector
(for example: "A[7..0]")
    * New concept: Bus Groups, for adding arbitrary nets to a bus
        o Defined in a list, separated by spaces, enclosed in curly
braces. For example: "{DP DM}"
        o Can contain bus vectors as well as plain nets, for example
"{A[7..0] D[7..0] OE WE}"
        o Can have an optional name in front, like "MEMORY{A[7..0]
D[7..0]}"
        o If you add a name, the resulting nets will have the name
prefixed on the front, like "MEMORY.A7"
    * New concept: Bus Aliases
        o You can use aliases to define shortcuts for bus groups.
        o For example, you could create an alias called "USB" that
refers to the nets "DP" and "DM"
        o Then, you can define a bus group as "{USB}" which will
contain both of those nets.
        o You can also add a label, like "USB1{USB}" which will result
in nets "USB1.DP" and "USB1.DM <http://USB1.DM>"
        o Bus Aliases are editable through a new dialog, and saved
with the schematic file.
    * New tool: Bus Unfolding
        o Right click on a bus, and you can easily break out any of
its members into a bus entry, label, and wire.
        o You place the label (and set the bus entry orientation) with
the first click, and then can continue wiring.

In order to support this work, I am also working on a new
connectivity algorithm for Eeschema.
This algorithm stores the resulting connectivity information with the
graphical objects on the schematic, meaning that it's quite easy to
look up what net any particular object is part of.  The new algorithm
is also significantly (i.e. an order of magnitude) faster at
generating connectivity than the current netlisting algorithm in my
testing so far.  It will support partial updates of the connectivity
when editing the schematic, so the net information will always be in
sync when adding/removing/editing items in the schematic.

The combination of a faster algorithm and caching of the connectivity
results in dramatic speedups when working with large designs.
For example, Chris' motherboard project (which is a great benchmark,
by the way!) takes several seconds to highlight nets in the current
master branch, and with my changes, you can highlight any net
instantaneously.

Although it is not yet far enough along to demonstrate this, I plan
to use this new connectivity algorithm to generate netlists for
export, and replace the existing algorithm entirely.

You can check out the code in my branch here, but be warned that it
is not yet complete, so I am not yet proposing that anyone do
exhaustive testing of it and report bugs (because I already know
about many of the bugs you will find :-)

https://github.com/craftyjon/kicad/tree/bus_upgrades

Thanks,
Jon


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp
_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp


References