Skip to content

Graph View

joern274 edited this page Mar 4, 2026 · 71 revisions

The Graph View displays the netlist's components as a graph and offers several ways to interact with them. It allows to create modules as well as to fold and unfold them. Groupings can be viewed and edited. The navigation feature offers an easy way to follow a path through the graph on an element by element basis. Additionally the Cone View can reveal elements step by step that are connected to a starting point of interest to explore the graph and slowly reveal the structure of the netlist and its components.

Graph View

Overview

The Graph View shows the visual representation of the netlist as a graph. It illustrates all gates, modules and nets connecting them as individual graphical entities. Modules and gates (also referred to as nodes) are visualized as rectangular boxes.

Graph View Overview

Gate Information

Gates display their name, their type, their input pins and their output pins.

Gate Information

The name can be changed by using the action Change gate name in the context menu that opens when right clicking a gate in the Graph View.

Gate Context Menu

Apart from graph view specific actions like highlighting successors the context menu for gates is very similar to the context menu for gates in Modules Widget. If plugins offer actions especially for gates these actions will be listed as well.

Gate Context Menu

Module Information

Modules display their name, their type, their input ports and their output ports. For better distinction, a module color is automatically assigned to the graphical entity representing the module.

Module Information

The name and type can be changed by using the action Change module name / Change module type in the context menu that opens when right clicking a module in the Graph View. The color can be changed in the Modules Widget via the action Change module color.

Module Context Menu

Apart from graph view specific actions like highlighting successors the context menu for modules is very similar to the context menu for modules in Modules Widget. If plugins offer actions especially for modules these actions will be listed as well.

Module Context Menu

Add Nodes

A right click on the background of the Graph View opens a context menu to add gates or modules to the current graph view. The context menu might also comprise plugin contributions for the entire netlist.

Graph View Context Menu

Move Nodes

Selected modules and gates can be moved to non occupied grid points with the view by drag'n drop. As soon as the drag starts the color of a transparent rectangular shadow will indicate whether the selection can be moved to the aimed position (green) or not (red). It is also possible to move a single node to an occupied grid point thus swapping the position of the two nodes when pressing the move/swap modifier key during drag'n drop. This key is Alt on default but can be changed to Ctrl or Shift in the 'Graph View' settings.

Move Nodes

Comment Speech Bubbles

Comment annotations made to the node (see also) will be indicated by semi transparent speech bubbles showing the date of the last comment. Double click on the speech bubble opens an overlay where the comments can be added, modified or deleted. Clicking on graph view closes the overlay.

Render Policy

Many actions like adding or removing nodes from a view or moving nodes to a different grid point require new rendering calling the layout routine. Although rendering is done by multi-threaded process using all available cores it may take significant time for a huge netlist. Having that in mind the layout routine will not be called by default for minor changes like changing a modules name or type. That behavior can be changed in settings → 'Graph View' by setting the checkmark to 'Invoke Layout on Every Change'.

Graph View Controls

This section describes some basic controls which are used to interact with the tabbed Graph View such as modifying the camera or open and close tabs containing views.

Tabs

Different graph views showing different aspects of the netlist are organized as tabbed view. The view name displayed in the tab follows the following naming convention

  • When a view shows explicitly a single module (e.g. it got created by double click on that module in module widget) the name of the view corresponds to module name and module ID in parenthesis. These views will reflect module modification, e.g. if a gate gets added to the module it will show up in the view as well.
  • When a view formerly showing a single module explicitly gets modified by adding or removing a gate which is not part of the module the view name will change to module name followed by the word 'modified*'.
  • When a view gets created by isolating a selection of gates or multiple items the view name will be 'Isolated View' followed by a number to make the view name unique. The name of the view displayed in the tab can be assigned by the user in the Views Widget, however, please make sure that view names should be unique. It is also possible to rearrange the order of tabs by drag'n drop. Upon right click on a tab the context menu offers a variety of options to close unneeded views.

Open, switch and close views

Opening new Views

New views can be created in several ways. To open a completely new view that shows the top module click the action New View in the toolbar of the Views Widget.

Double clicking a module opens the unfolded module in a new view. Right clicking elements and selecting the action Isolate in new View opens a new Cone View.

Each new view is added to the Views Widget and a new tab is created in the Graph View.

Switching Views

Choose the desired tab in the tab bar on the top of the Graph View to switch to another view. Alternatively click the action Open View in the Views Widget toolbar or context menu.

Closing Views

Close a view by closing the tab on the top of the Graph View. The view is not lost but kept in the Views Widget. From there it can be reopened by right clicking it in the table and choosing the action Open View in the context menu or the in the toolbar.

Camera Pan

According to the default settings the camera in the Graph View can be moved by moving the mouse while simultaneously holding the Shift key and left click in the view. In the graph view page of the settings the 'Pan Scene Modifier' can be altered to Alt or Ctrl. On the same settings page there is also the option to enable pan by middle mouse button. By default the middle mouse butten is used for rubber band selection.

Zoom Level

The zoom level of the Graph View can be adjusted by scrolling the mouse wheel. Alternatively pressing the shortcut Ctrl + + can be used to zoom in and the shortcut Ctrl + - to zoom out. The shortcuts for activating the zoom can be modified on the settings page 'Keybindings' → 'Graph'.

Select Elements

A selection can be created using the mouse by left-clicking individual elements or dragging a rectangle around the desired components. It may also be expanded by pressing CTRL while selecting further netlist components.

Groupings

Gates, nets and modules can be assigned to groupings in the Graph View or via the action Assign to grouping in the Selection Details Widget toolbar. To assign a grouping to the selected elements in the Graph View, open the context menu by right clicking one of the selected elements and choose the action Assign to grouping. A dialog will appear which allows to choose a grouping and create a new grouping. Creating a new grouping immediately assigns the selection to the new grouping. Additionally, the context menu allows for deletion of the current assignment. The color and name of a grouping can be changed in the Groupings Widget.

The elements assigned to a grouping are highlighted in the respective grouping color in the Graph View.

Graph View Groupings

Assign groupings to predecessors or successors

To assign groupings to predecessors/successors in the Graph View (similiar to adding predecessors/successors to the Cone View), open the context menu by right-clicking a gate or module. Selecting Predecessors/Successors opens a new context menu with the highlighting actions described below.

Successor/Predecessor context menu

The highlighting actions are explained with the following example.

Successor/Predecessor context menu

Highlight predecessors or successors

In the context menu, either select Highlight successors or Highlight predecessors and choose a depth between 1 and 5, where depth 1 means direct successors/predecessors. A new grouping is created and the predecessors/successors of the selected depth are assigned to the grouping.

In this example, CLK_BUF_inst_inst is the source and depth 2 was chosen.

Example

Highlight predecessors or successors by distance

In the context menu, either select Highlight successors by distance or Highlight predecessors by distance and choose a depth between 1 and 5, where depth 1 means direct successors/predecessors. A new grouping for each distance is created and the predecessors/successors of the selected depth are assigned to the corresponding grouping. Each grouping represents the distance between the selected element and its predecessors/successors.

In this example, CLK_BUF_inst_inst is the source and depth 2 was chosen.

Highlight predecessors or successors by distance

Highlight path to predecessors or succesors

In the context menu, either select Highlight path to successor or Highlight path to predecessors. A dialog listing all predecessors/successors of the selected element will appear. Selecting a gate creates a new grouping and all gates and nets required to reach this predecessor/successor are assigned to this grouping.

In this example, CLK_BUF_inst_inst is the source and FSM_sequential_STATE_REG_reg_0_inst was selected in the dialog.

Highlight predecessors or successors by distance

Moving Elements to Modules

To move elements to a module, select a single or multiple elements in the Graph View and right click on one of them. Choose the action Move to module in the context menu that opens.

A dialog will appear where you can choose a module, create a new module or pick a module from the Graph View.

Move to module dialog

The Graph View will be updated and all selected elements will be condensed into a single graphical entity representing the module.

Move to module completed

The action Move to module in the Selection Details Widget toolbar also offers a quick way to add the current selection to a new or existing module.

Unfolding Modules

To make all elements of a module visible in the current view, select a module in the Graph View and right click on it. Then choose the action Unfold module in the context menu.

Unfold module context menu

The Graph View will be updated and all elements assigned to the selected module will be shown in the graph. The color of the elements assigned to a module is the same as the color of the parent module.

Unfold module completed

Folding Modules

To condense all elements assigned to a module back to a single graphical entity, right click one element which is assigned to the module. Choose the action Fold parent module in the context menu that opens.

Fold module context menu

The Graph View will be updated and all elements assigned to the parent module of the selected element will be condensed back into a single graphical entity.

Fold module completed

Navigating the Graph

By using the arrow keys on the keyboard it is possible to navigate through the graph element by element. To allow navigating first select a single gate or module in the graph. The pins/ports of that gate/module are now highlighted in the selection color cyan to indicate that the navigation feature is enabled and navigation towards the pins/ports is available.

Highlighted Element

Then use or to choose the direction of the navigation. is used to navigate to the input pins/ports of the element and is used to navigate to the output pins/ports of the element. The first pin/port of the gate/module is now also highlighted. It's always possible to switch from input to output and vice versa by using the arrow keys in the opposite direction.

Highlighted Pin

From there it is possible to cycle through the individual pins/ports with and . When the desired pin/port is selected confirm the direction with or to follow the net connected to that pin/port.

Cycle Pins

If the net connected to the starting pin/port of the navigation has only one source/destination the navigation will trigger and the element which has been navigated to is selected in the Graph View. The source/destination pin where the followed net has its source/destination is highlighted.

Newlz Highlighted Element

If the net connected to the starting pin/port of the navigation has multiple sources/destinations a popup will be opened where the desired location has to be chosen. The popup consists out of two tabs. The 'Navigate to ...' tab lists all target gates which are already shown in the current graph view, the 'Add to view ...' tab lists external target gates which will be added to the view if chosen. After choosing the destination with either Enter or double click, the navigation will trigger and the element which has been navigated to is selected in the Graph View. The source/destination pin where the followed net has its source/destination is highlighted.

Selection Table

Cone View

The Cone View allows the graph to be explored starting from a point of interest. The idea is that the Cone View only shows a small subset of gates, nets and modules at the start of exploring. By navigating to an element using the arrow keys the element will also be added to the view. Additionally its possible to add successors and predecessors to the view. Adding elements step by step that are connected to the starting point of the exploration slowly reveals the structure of the netlist and its components.

Opening a new Cone View

To open a new cone view first select a single or multiple elements of interest in the Graph View. Right click an element of the current selection and choose the action Isolate in new view in the context menu that opens.

Cone View Context Menu

A new tab showing only the selected elements will be added to the Graph View. The view is also added to the available views in the Views Widget. This newly created view is the starting point for further exploration. It only shows the elements selected before.

Isolated Gate Cone View

Exploring the graph

There are two ways to further explore the graph at this point. Firstly the navigation using the arrow keys can be used. Secondly the context menu can be used to add predecessors and successors (or paths to them) to the view.

Navigation using arrow keys

Navigation in the graph has been described above. For cone-views the 'Add to view ...' function is of special interest to add successor or predecessor gates to the view.

Add to view table

Add predecessors and successors

To add predecessors or successors of a single or multiple elements to the view first right click on a single element of the current selection and then select Successor/Predecessor. In the new context menu, either select Add successors to view or Add predecessors to view and choose a depth between 1 and 5, where depth 1 means direct successors/predecessors.

Context menu successors

Depending on the action predecessors or successors of the selected depth are added to the view.

Added sucessors

Add path to predecessors and successors

Additionally, a path to a particular predecessor/successor can be added to the view. Selecting Add path to successor to view or Add path to predecessor to view opens a dialog where all predecessors/successors are listed.

Add path to successor/predecessor dialog

Selecting a predecessor/successor will add the path to the selected predecessor/successor to the view, including all gates and nets which are required to reach the selected predecessor/successor.

Added path to successor/predecessor

Debugging

Since the Graph View is the most complex widget in HAL GUI there are special debugging options available in settings → eXpert Settings → Debug. It is useful to know about this options when reporting a problem.

  • UserAction Debug opens a new text widget which lists these type of user actions which can be revoked using the UNDO command.
  • GUI Debug Grid adds grid lines to the graph view with tiny values indicating x and y position for nodes.
  • Dump Junction Data dumps for each net junction incoming and outgoing net lanes so that bugs in junction routing can be traced with external tools.
  • Netlist event log dumps all core events. Core events can be triggered by GUI actions but also by Pythons scripts or function- or plugin execution.

Clone this wiki locally