User Tools

Site Tools


geda:hierarchy

This is an old revision of the document!


Hierarchical schematics

Depending on what you want to achieve, there are several options how to use hierarchy. If you are unsure, ask yourself if you want to instantiate a schematic multiple times, or want to represent a subsheet as a symbol in another sheet. If yes, go with full mangling. If not, you probably don't need hierarchy at all and can just use multiple schematic files.

Multiple schematic files

If you just want to split your schematic to multiple pages, you don't need to use hierarchy at all. Just list the individual schematic files when invoking gnetlist:

$ gnetlist -g geda page-one.sch page-two.sch

Hierarchy as a convenience method

Alternatively, you can create a top schematic which contains symbols for each subsheet and tell gnetlist to go look for the corresponding schematic files. You do so by adding a source= attribute to the symbol and adding the directory which contains the subsheets to the source library. Usually this will be the same directory as the schematic containing the subsheet symbol, so add the following line to gnetlistrc (either your global one in ~/.gEDA/, or a project-specific one in the same directory):

(source-library ".")

You also need to tell gnetlist to disable component and net name mangling or you will end up with component names like U?/R1, and your nets will not connect. To do so, add the following lines to gnetlistrc:

(hierarchy-netattrib-mangle "disabled")
(hierarchy-netname-mangle "disabled")
(hierarchy-uref-mangle "disabled")

Now when invoking gnetlist, just specify the main schematic file:

$ gnetlist -g geda main.sch
gnetlist will complain if the subsheet symbols don't contain a refdes= attribute, but with mangling disabled, it won't use it in any way.

Input/output pins

Without a hierarchy, the only way to route nets from one schematic page to another one is by specifying the same net name. With hierarchy, there is another, visually cleaner way: you can add pins to the subsheet symbol and route the inter-subsheet nets on the main schematic. For each pin, you need to add a footprint-less I/O symbol to the subsheet whose refdes= matches the pinlabel= of the corresponding pin.

If you get an error about a “Missing I/O symbol”, make sure you set a refdes= for the subsheet symbols.
Make sure not to add more than one I/O symbol for each pin as this will silently produce an incorrect netlist.

Hierarchy as a grouping/instantiating mechanism

If you want to instantiate a subsheet more than once, you need a way to tell the components of one instantiation from that of another one (given that your subsheet contains any components). This is where uref mangling comes in. You enable it by specifying

(hierarchy-uref-mangle "enabled")

in gnetlistrc. Now, gnetlist constructs the name of an instantiated component by appending it to the subsheet symbol's refdes= attribute, separated by a slash. You can configure this in gnetlistrc. For example, to list the component refdes= first and use a colon as a separator, use

(hierarchy-uref-order "prepend")
(hierarchy-uref-separator ":")

Please note that nets with equal names will still connect. You will have to separate net namespaces to avoid that.

Separating net=/netname= namespaces

geda/hierarchy.1427568700.txt.gz · Last modified: 2015/03/28 14:51 by rlutz