Buses with multiple named aliases

I know that for buses you can create a bus alias like UART and create members like TX and RX. If you place a label like {UART} on a bus wire, you can unfold that bus and get:

TX
RX

You can also place a label with a named prefix like DEBUG{UART}, and when you unfold that you get:

DEBUG.TX
DEBUG.RX

So if I also create a bus called CONTROL with members ON and OFF, I know I can create a bus label with both aliases like {UART CONTROL} and when I unfold that I get:

But I want to use multiple named buses in a label like {DEBUG{UART} POWER{CONTROL}} so that when I unfold the bus I would get this:

DEBUG.TX
DEBUG.RX
POWER.ON
POWER.OFF

Instead KiCAD throws an error that says “Signal names contains { and }but is not a valid bus name.”

Does anyone know if what I’m trying to do is possible? I don’t see a valid reason why it shouldn’t be. The help link on the “Label Properties” dialog shows this sample bus definition where they have nested curly braces for markup, why can’t I also use nested curly braces for naming aliases?

image

I know that it says markup takes precedence over bus definitions, but I’m not doing markup, just naming another alias.

1 Like

A bus is intended to keep related things together, and for that you can give it a (single!) logical name.

If you want to make groups of different kinds of signals, then either use separate buses, or just use labels (for some of the signals).

1 Like

To say that a bus can only have a single name is a narrow view of the use of a bus. The whole “name.member” approach when you unfold a named alias mimics a structure as used in programming. Programming languages allow structures to contain other structures and no one thinks that’s too hard to understand.

I’m trying to prevent unfolding a bus and having something confusing like this where you can’t tell which TX and RX belong to which alias:

And instead have something inherently obvious and useful like this:

I would argue that the second one is far more clear than the first. No one is going to look at the second example and scratch their head trying to understand the difference between “Cmd.TX” and “Dbg.Tx”, whereas trying to tell the difference between “TX” and “TX” is pretty hard.

In both cases the bus elements (UART_CMD and UART_DBG) are grouped together because they both represent UARTs, where one is for commands and the other for debugging. The common (single!) logical name that binds them together in both cases is UART, which is why they go well together on the single bus. Yes, I can add a separate bus, but why clutter the drawing with a second bus when the two elements can logically exist on the same bus?

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.