Annotation not fully deploying in hierarchical sheets

recently I have been laying out a new schematic for a circuit that requires the use of hierarchical sheets. Part of my motivation in fact for this project was to further explore the full use of hierarchical sheets in a schematic, and this particular project lends itself very nicely to this type of structure.

I have a structure 3 sheets deep. It is an 8 bit binary adder, except it is created using discrete transistors with no IC’s in sight. The top sheet is the overall 8 bit adder, with 8 (duplicate/identical) sheets for the full binary adder for each bit. When I click on one of the binary adder sheets it takes me down to a logic page showing the full binary adder for that specific bit, but expressed in a NOR logic gate form. All the NOR gates are in fact another nested (duplicate/identical) sheet for the NOR gate in question, and when you click on the NOR gate it opens up the next sheet down that shows the single transistor circuit making up the NOR gate.

My issue is that while I can cleanly annotate the entire schematic (which spawns a total of 81 schematic sheets from the 3 hierarchical sheets), I don’t seem to be able to change and globally deploy a change to a component prefix. What I am trying to do is change Q1, Q2, Q3… to T1, T2, T3… in the lowest sheet (the transistor). If I drill down and change manually and then re-annotate, the annotation number is the only part of the designator that gets changed. I have even tried deleting the transistor and installing a new transistor, immediately change it’s prefex from Q to T, but Kicad reverts back to Q’s everywhere. I’ll also point out that the behavior is as expected when I delete the transistor (as in any and all NOR gates have the transistor deleted) when I edit the lowest sheet. So when I integrate a new transistor and change the Q to T it doesn’t seem consistent that Kicad suddenly only makes that change for this particular instance of NOR gate.

Top Sheet (8 Bit Binary Adder)

Middle Sheet (Full Binary Adder constructed from NOR gates)

Bottom Sheet (NOR gate circuit)

How can I get the hierarchical sheets to globally change all the transistors? I’m happy to upload the project if anybody sees value in this.

First, your use of rectangles around every element in your schematic makes it extremely difficult to read. Yes, I know it’s in fashion on certain web sites, but…
The designators “Q” or “T” belong to the symbol. You’ll have to create new symbols with attribute “T” and replace them on the schematic.
What’s your problem with “Q”?

It’s not uncommon to delineate parts of a schematic with dashed lines or boxes/rectangles. No doubt it is harder to read/understand for a small image as presented here, but if the schematic is viewed full screen or printed out on an A3 page, they definitely contribute to legibility.

Historically I have simply always used “T” for transistors (going back to the late 80’s. Also ‘T’ is more legible than ‘Q’ on the silkscreen (depending of course on what font you use). ‘Q’ can often turn out to look more like a badly screened ‘O’.

I would have thought the behavior would be consistent across all instances of the hierarchical sheet. IE if I delete a resistor out of the NOR gate, this instantly becomes valid for all instances of the NOR gate. However when I change the designator from ‘Q’ to ‘T’ this only impacts the instance where it was changed, not the sheet itself.

I also very much dislike boxes around schematic sections. It adds nothing useful, and it is harder during maintenance. A bit of whitespace around sections is often clearer and easier on the eye. There are no weird lines that have to be processed by your brain.

But in this case the boxes appear to be the hierarchical sheets themselves, and can’t be removed. It would be really nice if an hierarchical sheet can be attached to a schematic symbol. This would also work very nice for “modules” / function blocks. Unfortunately this is not (yet) implemented in KiCad.

And concerning:

Don’t invent your own standards. Transistors have been Q for at least 60 years. Get used to it. Having to change things like this for all libraries you use is a huge time sink with very little benefit.

1 Like

Qs are better than Ts, 10 points to 1, but you need a U to take advantage. Oh wait this is KiCad, not Scrabble, but still valid. :rofl:


boxes or lines definitely add value at times if used appropriately. In this case it clearly demarcates or differentiates between the one 8 bit value being summed and the other. I agree though that using whitespace and segregating subcircuits works too.

In terms of standards, well I have been designing electronics since long before some of these standards were settled on. Using R for resistor, C for Capacitor, it would stand to reason that T is a logical choice for a transistor. How or why Q was settled on for one of the most common components in electronics is anybody’s guess. But with that said, it won’t be me changing an inferior standard, so Q it is.

Thanks for the responses guys.

In the bad old days Vs (4 points) usually needed Ts (transformers) and the new-fangled transistors were assigned TR. Now that they are old-fangled, Q is shorter. Just pronounce it quansistor, Elmer Fudd fashion, and you’ll be all set. We won’t go into BJQs or FEQs. :crazy_face:


Hehe, shhh, I’m hunting quansistors

1 Like

Guys you going off topic from the OP questions.

He didn’t ask why should he use T instead of Q or if you like rectangles around gates.
His question was: how to change Q to T?

Come on. T was common in some part of the world as an annotation for transistors for ages and some engineers still use that.
Some standards even suggest to use letter K for that (and I’ve seen many schematics with K for transistors indeed).

And when you use T for transistors - transformers are usually Tr or Tx, so it’s not confusing.

1 Like

The answer was given.

Not really, although it was an indication as to why the annotation wasn’t changing the designator for all transistors, but I understand that now. However the root problem lies in my opinion, with how sheets are managed. I would say that any change I make to any editable attribute in a sheet should be rolled out to all respective instances of said sheet. So if I change Q to T, then this should be reflected in all instances.

If I can use a programming analogy, when I make a change to a class, the class is a template for any and all instances instantiated of said class. So the change will be reflected in all instances of the class, and it would surely be considered a compiler or language bug if it was only reflected in some instances, but not all. In this case, the sheet is the “class” or template that lays the groundwork for all instances of the sheet. So if I make a change in the sheet, it should definitely be reflected in all instances created of the sheet. Or at least that’s my opinion on hierarchical sheets.


This however isn’t right when you want to change say the unit number of the instance in the sheet. Some things should change in all instances, some should not.

To reuse your class-instance analogy, the things that can change are parameters to the instances.

The way to get what you want is to take a Q symbol and edit it to a personal T symbol, then use Change Symbol to change all instances of Q to T. This changes all the quansistors to transistors in one swell foop.

Then in future, use your T symbol when you need a new transistor. Or copy an existing one.