Manage wiring complexity with Signal Harnesses

Altium Designer 6 introduces a new way of establishing connectivity and reducing schematic complexity – called Signal Harnesses. Signal harnesses extend on bus and wire connectivity by allowing you to assemble logical groupings of any signals, greatly simplifying the wiring traffic, enhancing readability, and potentially streamlining the structure of your schematic design.

Using signal harnesses you can create and manipulate higher levels of abstraction between sub-circuits, effectively allowing for more complex designs to be represented with simpler drawings.

Figure 1 . Harnesses carry multiple signals and can include both buses and wires, which are grouped and then referenced as a single entity. This multi-signal connection is called a Signal Harness.

Using Signal Harnesses

To use a harness as a container for nets and / or buses, you simply wire each net and bus into a Harness Entry in a Harness Connector. Each net or bus is identified in the harness by the name of the Harness Entry that you wire it to – it is that name (not the order of the Entries) that is used by Altium Designer to establish connectivity throughout the design. Note that the Harness Entry name is not used to name the net, unless you name the Signal Harness itself.

The signals are then carried across the sheet using a signal harness line, connecting to another harness connector on the same sheet, or to a sheet entry or port so it can connect to another schematic.

Reusing a Signal Harness

You can think of a Signal Harness as being like a physical cable. NewHarness, shown in Figure 1, would be the 3 wires (COL, CRS, and TXEN), and the twisted bundle of 4 wires (RXD[3..0]). And just like a cable, the harness does not care what signals you ultimately run through it. This means you can use the same signal harness multiple times in your design. Figure 2 shows the Harness JTAG being used twice.

Figure 2. Harnesses can be nested together with other nets, buses and harness, into a parent harness. The Harness Definition file shows the definition of JTAG, and also the parent Harness Connector, HARDSOFT_JTAG.

Nested Harnesses

Harnesses can also be nested, that is, a harness can become part of another harness. Figure 2 shows nested harnesses, where the 2 JTAG signal harnesses become part of the parent signal harness, HARDSOFT_JTAG.
Harnesses are nested by placing and wiring in the same way as wires and buses. Note that the actual Signal Harness line is optional.

How the Nets are named

If the Signal Harness is not named, that is you have not placed a Netlabel on it, then the names assigned to the individual nets and bus elements are used to identify the nets. Since Altium Designer supports changing net names as you traverse the design hierarchy, the final net name is determined by the naming preferences enabled in the Netlist Options section of the Project Options dialog.

Figure 3. Signal Harnesses can greatly simplify the readability of a design. This image shows the top sheet from the same design, the upper version using Nets and Buses, the lower one using Signal Harnesses. The extra Nets and buses on the right hand side of the upper sheet are needed to specify user-defined PCB Net Classes, these can be created automatically from named Signal Harnesses.

If a Signal Harness is named, Altium Designer adopts a different approach to managing the names of the nets that flow throw it. In this case, Altium Designer will name each net in the format HarnessName.HarnessEntryName, and will no longer rely on the names of the nets and buses connected to it. Enable the Higher Level Names Takes Priority option for this naming scheme to be applied consistently across all named Harnesses. If this approach is used, choose Harness names and Harness Entry names that work together to create suitable net names.

Creating a PCB Class for the nets in a Harness

An advantage of naming your Signal Harnesses is that you can get Altium Designer to automatically create PCB net classes when the design is transferred to the PCB editor, by enabling the option in the Class Generation tab of the Project Options dialog.

Inside a Signal Harness

The set of nets / buses that a Signal Harness can carry is specified by a Harness Definition. Whenever you place or edit a Harness Connector, Altium Designer automatically creates / edits a matching Harness Definition, in a
Harness Definition file (*.Harness).

The Harness Definition looks like:
NewHarness=COL,CRS,RXD[3..0],TXEN
Here, the Harness Type NewHarness, includes the nets, COL, CRS, and TXEN. It also includes the bus RXD[3..0]. Note that the order of the nets and buses in the Harness Definition is not important (they are automatically sorted alphabetically) – it is the Harness Entry names that are important.

If NewHarness was nested within a parent harness, it would look something like:
ParentHarness={FirstEntryName:NewHarness},{SecondEntryName:AnotherHarness},SomeNet
Note how the nested harness is encased within curly braces and associated with its Harness Entry. Any wires or buses going into the parent harness are referenced in the standard way.

A Harness connects from a sub-sheet to the parent sheet symbol using the standard Altium Designer Port-to-matching-Sheet Entry combination. The Harness does not rely on the naming of this pair, instead it uses the Harness Type property of the Port / Sheet Entry pair to establish cross sheet harness connectivity. The Port is automatically assigned the HarnessType when it is attached to a Harness line or Harness Connector. The Harness Type of the Sheet Entry can be user-defined if the design is hierarchical, keep an eye on these if you are manually building a hierarchal design that uses harnesses.

A Signal Harness without the Harness Connector

You can also define and use Signal Harnesses without placing Harness Connectors. In this case, you must create and manage the Harness Definitions yourself. You should also lock these Harness Definitions (by adding the Locked; keyword to the Harness Definition), so that Altium Designer does not attempt to modify or delete them as it automatically manages Harness Definitions created by the presence of Harness Connectors.

Figure 4. Signal Harnesses can be created without Harness Connectors. Note that the Harness Definition must be either typed in manually, or auto-created by placing and defining a Harness Connector, and then deleting the Harness Connector.

Techniques for building a Signal Harness

If you are building up a design, the Place Predefined Harness Connector command gives easy access to all the harnesses currently available in Altium Designer. If you are modifying an existing design to replace wires and buses with Signal Harnesses, the easiest way to work is to use Altium Designer’s Smart Paste feature. Using this, you can select sets of existing nets or ports, copy or cut them, and Smart Paste in a complete Harness.

Figure 5. Use the Smart Paste feature to quickly build Signal Harnesses.

Once the old sheet entries and wires / buses have been deleted from the parent sheet, new Sheet Entries can be added in the parent sheet symbol using the Synchronize Sheet Entries and Ports command (right click on the Sheet Symbol and select the command from the Sheet Symbol Actions sub-menu). Something to keep in mind, if you are manually adding and configuring Sheet Entries for your Harnesses, Altium Designer will always attempt to set the HarnessType attribute if it can detect a Signal Harness, so it is more efficient to place the Sheet Entry last so it touches an existing Signal Harness. If you place the Sheet Entry first and then the Signal Harness, you must set the HarnessType attribute. If you use the Synchronize Sheet Entries and Ports command, this is set automatically.