There are two types of nets in KiCad, global ones and local ones.
Local ones always include what is called a “sheet path” which is formed from the location in the hierarchy (if you use hierarchical sheets).
Let’s say you create a local label called SIGNAL
and place it on a wire.
So for example, on the top-level sheet, the net created by that wire will be called /SIGNAL
, because /
is the sheet path of the top-level sheet. If you instead had that label on a subsheet called SUBSHEET
, the net created would be called /SUBSHEET/SIGNAL
. These net names are visible if you inspect the netlist generated by Eeschema for import into PcbNew.
Now let’s say instead you attach a global label to that same wire instead of a local label. Global labels don’t have sheet paths. So, the net generated would be simply SIGNAL
without the leading path. No matter what sheet you are on, that net will always be SIGNAL
, and that means that when you export a netlist, all those labels will be joined together.
There is a priority of how nets will be named depending on what kind of labels are attached to them, and what pins are attached (for example, a wire that is attached to a component, but doesn’t have any explicit label, will have a name auto-generated from the component’s name and the name of the pin it’s attached to).
Global labels have the highest priority. That means, if a global label is attached to a wire, it “wins” over every other possible name that wire could take on. This means that attaching both a global and a local label to a wire is redundant, because the global label will always win.
Now, when you start talking about buses, the same rules all apply. If both a global label BUS[7..0]
and a local label LOCALBUS[7..0]
are attached to the same bus wire, the global label will win, and the bus members will be called BUS0
, BUS1
etc on the PCB instead of LOCALBUS0
, LOCALBUS1
, etc.
This means that if you already are going to make your bus global by connecting it to a global label, you don’t also need a local label (on any sheet). You just need to use the same global label name everywhere you want to use that bus.
(I haven’t gotten in to hierarchical labels and sheet pins here, because that would be a longer explanation, but the very short version is that they are treated like local labels but with a higher priority. They still have lower priority than global labels, though)