DerTrueForce wrote:
Please! I got fed up with KiCAD's apparent stupidity, and ended up sending the individual signals out the hierarchical pins.
Below are the steps that I personally take. They may not be the fastest way to do it but it works for me.
On picture "A", I have the steps A to F.
A = Normal wire. I think you have to have a small wire connected to the pins. I've tried it without them (connecting the bus wire directly) but it didn't seem to work. So just create a small wire for each pin.
B = Green bus wire. This angled wire goes from the small wire to the eventual blue bus.
C = Main (blue) bus. These don't have to be connected everywhere. Picture C below shows how I did a few buses. I connect them when I can but I don't worry about it too much.
D = Net name (local label). These are net labels for the individual sheet. They are local only and do not carry over to child sheets (not normally, that is). Not that this label is "D0" for data line 0. Now, the trick is to name the labels in a certain way...such as:
E = Same net. Notice that I have placed the local label ON THE BLUE BUS. I have "named" the bus. BUT, notice the pattern. I have put a range. So the name for the BLUE BUS must follow the D[0..7] for data bus, A[0..15] for address bus, BLAH[0..31] for some 32 bit bus, etc. Kicad will know that the D0 is "inside" the D[0..7] label.
F = Hierarchical pin. Also, notice it has the SAME net name (the range) of the blue bus. Also notice that it MUST be INSIDE the hierarchical sheet (named "VIA.sch" in this example). That sheet is picture B. This step tunnels in the D[0..7] bus into the child sheet. As best as I can tell, you have to tunnel each bus you want in that way. For individual pins (such as ~RESET) then you must put them on a separate blue bus line. If anyone knows a better way then please let me know.
Now, move on to the child sheet (B) called "VIA.sch".
Notice that I created the same local labels (same D0 to D7) and created a blue bus connected to it. Also notice that I have named that bus the same (D[0..7]).
Next, notice the "hierarchical label" connected to the blue bus. This is your entry point from the parent sheet. It must have the same bus name D[0..7] as above. Of course, repeat for other buses. Even though I'm only using A0..A3, I still have to name the entire bus A[0..15]. Well, I don't HAVE to. I could have named the parent bus A[0..3] and then I could use that name too. But I am consistent and name the address bus the entire range, the data bus the entire range, etc. The trick is that the bus name must be a range representation of the lines going into it. So you could have a bus named "D[0..2]" that would only include 4 data lines. But like I said, I like to just name the entire bus so that I can use any line.
I hope this example helps. Let me know if I can help any more.