Documentation Home Page HYPERSIM Home Page
Pour la documentation en FRANÇAIS, utilisez l'outil de traduction de votre navigateur Chrome, Edge ou Safari. Voir un exemple.

Subcircuits and Hierarchy



See also:

Subcircuit Ports



Subcircuits and Hierarchy

What is Hierarchy?

  • Hierarchy refers to the ability to have a device symbol in a schematic actually represent an arbitrary circuit block. The pins on the device symbol represent connections to specific input output points on the internal circuit. For clarity, a device symbol that represents an internal circuit will be called a hierarchical block.
  • Subcircuits (also called subnetworks) are the building blocks of hierarchy.
  • Hierarchical design provides a powerful way of representing complex designs in compact and readable form. A top-level diagram of your system can show only major functional blocks. These blocks can then be opened to show more and more design details.
  • Hierarchical design in effect adds a third dimension to a schematic diagram. It also raises some complex issues that should be understood before embarking on a major design.

Please review this chapter carefully before making extensive use of the hierarchical features of HYPERSIM and manipulating subcircuits.
A simple example is given by this circuit.

The subcircuit is located in a parent circuit. It has a parent device (its symbol with optional pins). The subcircuit contents are actually the contents of the parent device, but to simplify the terminology, the subcircuit parent device is called subcircuit and its contents are also called subcircuit.

HYPERSIM offers several methods for creating subcircuits. Subcircuits can be created from any location in a circuit. It is also possible to make a subcircuit from the entire circuit.

  • The subcircuit above is created from the switch device connected to ground. The Options>Subcircuit> Create Subcircuit Block (Ctrl+Shift+Q) menu is used to create a subcircuit from parts of a circuit. If port connectors (the interface between the subcircuit contents and the holding circuit) are not placed before using Ctrl+Shift+Q, then HYPERSIM suggests automatic port positions, such as Add port connectors to all signals with visible names or Add port connectors to all signals with loose ends.
  • A subcircuit may have zero, one or more pins. Any pin types can be used.
  • The top circuit can contain several subcircuits and each subcircuit can also contain subcircuits with unlimited number of levels.
  • The default subcircuit symbol is a square box. The Symbol Editor can be used to modify the subcircuit symbol.
  • After creating the subcircuit it can be opened in a separate circuit drawing by double-clicking on its symbol. The available keyboard shortcuts are Ctrl+Shift+I (in) for getting into the subcircuit and Ctrl+Shift+U (up) for going up.
  • The first time a subcircuit is entered it is locked. It is needed to unlock the subcircuit for making changes. There are two methods for unlocking: through the Circuit Info menu (Ctrl+I) or by moving a device and accepting to unlock from the subsequent panel popup.

After the subcircuit is created, it may be required to modify its port interface by adding or deleting pins.

Subcircuit Uniqueness and Encapsulation



Please read this section before using subcircuits.
The contents of a subcircuit are hidden (encapsulated) from the holding circuit or subcircuit. The holding circuit is also called the parent circuit. The only connection between the parent and its subcircuit is through the interfacing pins. This means that two signals may have the same name in the parent circuit and in the subcircuit, but they are not connected. The global naming system used in HYPERSIM is based on concatenating a subcircuit path name to all its internal names. If the device named Brk1 is located in a subcircuit named DEV1 then its global name becomes DEV1/Brk1. If there are more levels, then the path name changes to account for all levels. In DEV1/DEV2/XX1/power_line, the power_line signal is located in the subcircuit XX1 which is located in the subcircuit DEV2 and which is located in the subcircuit DEV1.




The following options are available:

  • A subcircuit may have one or more pins. Standard pins and bundle pins may be used.
  • A subcircuit may have no pins. In which case it is an electrically stand-alone circuit.
  • A subcircuit can be also made of non-electrical objects.
  • A subcircuit may hold (be parent to) one more subcircuits.
  • A subcircuit may be multipage (see General Editing to Adding, Deleting and Titling Circuit Pages).
  • Subcircuits can be created from any point in a design and from any part of a circuit. The subcircuit interface pins are fully controllable. It is also allowed to create subcircuits from entire designs.

When a subcircuit is created and duplicated, HYPERSIM continues keeping only one copy of its internal circuit. This means that any changes inside one subcircuit are automatically reflected into the other subcircuit instances (copy). HYPERSIM can sees only one copy of the circuit, but two separate calls. This is similar to programming using a given function from different locations in the program. The two subcircuits of below are identical. They have the same Part attribute and same Type name. This is a powerful feature for large designs. If a large number of subcircuit devices of the same type are used in a design, then by changing only one device allows changing all other devices automatically.

The Type name of a device can be found by selecting the device and using the right-click Properties command.
It is very important to understand the implications of the Make Unique Type command and the notion of subcircuit uniqueness before making any changes to subcircuits. The user should never modify a built-in HYPERSIM subcircuit based device before applying the Make Unique Type command to the device. A built-in device may be used by other devices and thus modify their contents if not made unique before changing.

Make Unique Type

If it desired to detach one subcircuit definition from the other, then the detached subcircuit must be made unique. This is completed through the Options> Part Type> Make Unique Type menu.


In the figure below, the subcircuit DEV2 is first created by duplicating DEV1 and then made unique. To ensure circuit data integrity and to manage subcircuits, it is very important to enable visual feedback for distinguishing dissimilar subcircuits. A suggested approach is to show the Part name. An even better approach is to change the subcircuit symbol using the Symbol Editor.
HYPERSIM also keeps a separate attribute PartTemp for verifying uniqueness when the user makes mistakes by using existing part names or makes attribute changes without making a unique type.

At this stage DEV2 is detached from DEV1 and FAULT_switch: it has its own copy of the original subcircuit. This is similar to making a copy of a function and renaming it to allow new contents, calling methods and usage.

  • If a subcircuit is available in a library and if it is dragged into the design and modified, then it becomes automatically unique: detached from the library copy. The user should change the symbol and make the new Part name visible to avoid confusion. Any new copy dragged in from the original library remains detached from the one modified in the design.
  • Locking the contents of a subcircuit after its creation is used for reminding the user about the potential repercussions of changes made in the subcircuit. See Locking and Unlocking Subcircuits for more information on this option.
  • It is allowed to add and delete subnetwork pins after subnetwork creation. When a signal line type is changed in a subnetwork it will not propagate to its parent circuit. Such changes must be performed manually.
  • In the current version of HYPERSIM, subcircuit control input and output pins are not automatically given an arrow tip. This is only achievable by modifying the subcircuit symbol using the Symbol Editor.
  • If after exiting a subcircuit, the user receives an error message, it means that there is pin interface corruption in the subcircuit and the resulting Netlist will also have problems. Error and warning messages should not be ignored before continuing.

PartTemp attribute

As explained earlier, in addition to the Part attribute which is used to distinguish subcircuits, HYPERSIM uses one more attribute: PartTemp. This attribute is used to verify uniqueness when the user makes changes that may affect the uniqueness of a subcircuit. An example of change that automatically creates a new copy of a subnetwork is shown below.

The original device DEV1 is copied and then its pin name is changed. It automatically changes the internal port and makes DEV2 different from DEV1. HYPERSIM modifies the ParTemp to account for this condition. Notice that the PartTemp attribute is corrected only after the first subsequent Netlist generation. The pin name can be changed by selecting the subcircuit, opening the right-click menu Subcircuit Info and moving into the Pins tab.

The listed pin names can be clicked on and modified.

Subcircuits within subcircuits

A subcircuit may contain other subcircuits and the contained subcircuits may contain subcircuits, which results into a tree of subcircuits.
The best way to understand multilevel designs and Unique properties of a subcircuit is to view a subcircuit as a program function. A function is a program building block. A given function has only one version and can be called from other functions. If you want to change a function, then its name must be changed (made unique) in order to change its contents. A subcircuit level can be viewed as the body of the function. The best way to illustrate this concept is to create a simple example. Two subcircuits FUN1 and FUN2 are contained in a subcircuit TOPSUB.

Initially there is only one copy of TOPSUB in the memory. There is also only one copy of FUN1 and one copy of FUN2. Making any changes in the TOPSUB level is automatically reflected into all copies of TOPSUB. The same is true for FUN1 and FUN2. If we make a copy of TOPSUB to create DEV4 it is like calling the same function tree from another location in the main program (the top circuit).

Making any changes in the DEV4 level is automatically reflected into DEV3 level. If it is desired to modify FUN2 in DEV3 without modifying FUN2 in DEV4, DEV3 must be first converted to become unique using the Make Unique Type procedure. Its level will then become separated in memory from DEV4. Then DEV2 can be also set to a new type using again Make Unique Type. This last action will detach DEV2 and allow modifying its level contents.

Here is a visual representation of the steps. First DEV3 and DEV4 are sharing the same body:

This means that if you want to modify a multilevel subcircuit to make it completely detached from others in all its levels and used subcircuits, you must modify all hierarchical levels.

It is also feasible to propagate uniqueness from top down for a subcircuit device containing other subcircuits by checking the option Apply to subcircuit contents on the Make Unique Type command panel.

Subcircuit Properties

When a subcircuit is created and right-clicked, the Subcircuit Info menu becomes available:

  • The New Type Name input field allows changing the type name. This changes the Part attribute of the subcircuit.
  • The second radio button (Make the selected…) is similar to the Make Unique Type command available from Options > Part Type.
  • If you select this option and keep the same type name and if other subcircuits of the same type are available in the design, then HYPERSIM will use the PartTemp attribute to distinguish this device.
  • The Mask tab allows masking the subcircuit and selecting a mask name.

Subcircuit creation methods

HYPERSIM offers a large number of methods for creating and maintaining subcircuits. The starting point is the Subcircuit Wizard opened from Options> Subcircuit> Create Subcircuit Block:

  • The Quick Subcircuit option is activated only when a device or several interconnected devices are selected in the design that will become the parent of the subcircuit.
  • Subcircuits can be created top down or bottom up.
  • Working top down means creating the highest level of the design first and then working downward to more detailed levels.
  • In practice, this means that you create and place the symbol for a hierarchy block first, before you necessarily even know what the internals of the block will look like.
  • Once you have completely created the higher-level circuit including the symbols for all the hierarchy blocks it uses, you then proceed to define the internal circuits of the blocks.
  • In the bottom up approach any part of an open design or entire designs can be made into the subcircuit of a hierarchical block symbol. The block is automatically created by the program, but can be modified using the Symbol Editor.

Saving Part Type to Library

After creating a subcircuit you can save it into a library for later usage or for sharing with other users. To place a subcircuit into a library, simply select the subcircuit symbol and select the menu Options > Part Type > Save to Lib:

Since the subcircuit is a part with an internal circuit, you must select Save internal circuit definition. If this option is not checked the subcircuit contents will not be saved with the symbol!

Attaching Subcircuit

The Attach Subcircuit command (from Options > Subcircuit > Subcircuit Operations) is not yet supported in HYPERSIM.

Detaching Subcircuit

The Detach Subcircuit command (from Options > Subcircuit) makes the currently displayed subcircuit into a separate design and redefines the parent device as having no internal circuit.
This operation permanently removes the subcircuit from the selected device and all other devices of the same type in the selected design. If you do not wish to update other devices in the design, use the Make Unique Type command to isolate the selected device first.



The Detach operation cannot be Undone!



In particular, Detaching performs the following operations on the subcircuit displayed in the front-most window:

  • The circuit is unlinked from its parent device, making it into a separate design.
  • The title of the subcircuit is set to a default name.
  • The internal circuits of all other devices of the same type in the design are removed.

Discarding a Subcircuit

The Discard Subcircuit command (from Options > Subcircuit) discards the subcircuit associated with a parent device.

To perform this action:

  • Locate and select the parent device in its circuit.
  • Select the Discard Subcircuit command in the Subcircuit menu.

All data associated with the subcircuit is destroyed by this command.



Note that this cannot be undone!



The Discard Subcircuit command redefines the selected device (and all others of the same type) as having no internal circuit.

Locking and Unlocking Subcircuits

A subcircuit can be locked to prevent accidental opening. This is intended for cases where the subcircuit is derived from a library or is used only to implement a simulation model which should not be edited as part of the parent design.
To lock and unlock a subcircuit from the schematic:

  • Locate the subcircuit’s parent device symbol in the schematic and select it.
  • Select the Properties command in the subcircuit right-click menu.
  • Check or uncheck the Lock opening subcircuit box, as desired.
  • Click OK

Printing Hierarchical Designs


A hierarchical design has an extra dimension which must be taken into account in determining the order of page printing.

Determining Print Page Order


When a design is printed, the master circuit of the design is printed first in its entirety. Then, each hierarchical block is printed, followed by all hierarchical blocks it contains. For example, given the following structure of nested hierarchical blocks:

The print order would be: A, L, W, X, M, Y, Z. The order of printing of hierarchical blocks inside a single circuit is determined only by internal storage order and cannot be controlled by the user. W and X could be reversed above.

Design Preferences: Printing

To set the scope of printing in a hierarchical design, choose the Design Preferences command in the Options > Design toolbar and select the Printing tab.

Three options are available:

Print current circuit level onlyPrint command prints only pages belonging to the circuit level in the current window.
Print all unrestricted circuits in current designDesign's master circuit and all unlocked internal circuits are printed. The locked setting is controlled by a check box in the Properties command for the parent device.
Print all circuits in current designPrint the design's master circuit and all internal circuits, regardless of locked status.

Printing Sequential Page Numbers in a Hierarchical Design

When a hierarchical design is printed, the $PRINTPAGENUMBER text variable can be used to apply sequential page numbers to the printed sheets.
This text variable only applies during a Print operation. When it is drawn on the screen, it is interpreted the same way as the $PAGENUMBER variable, i.e. it gives the page number within the circuit.
See more information on text variables in Using Text Variables.

OPAL-RT TECHNOLOGIES, Inc. | 1751, rue Richardson, bureau 1060 | Montréal, Québec Canada H3K 1G6 | opal-rt.com | +1 514-935-2323
Follow OPAL-RT: LinkedIn | Facebook | YouTube | X/Twitter