nettrace web page logo

Tracing Modes - Overview of Tracing Operations and Options

Because of the large size of the layouts that Nettrace is used to trace out, a number of methods are used to divide and conquer. The user also has control over the behavior of the tracer.

Think about a tracer as an operation on a layout file input and a stackup definition. A single tracer can be used to perform sequential point or region (hot-spot) traces resulting in one or more nets.

a tracer operates on a layer/stackup

If a user wants to perform multiple traces in parallel, then additional tracer instances must be licensed.

The input data that serves as the source for tracing (after the appropriate layers have been synthesized) is computed only once for a given view-cell and stackup combination. The data can then be re-used over and over for subsequent traces. The input data is destroyed when the 'tracer' object is destroyed.

Point vs. Region

The user can specify either a single seed point (coordinate/layer) or a region (window/layer). The region is often used when a "hot spot" has been identified by a scanner and the user wants to see what nets are passing through the hot spot region.


Each net is traced using multiple threads. The number of threads working simultaneously depends on the number of cores and a user-driven parameter. The number of threads used is not limited by the license manager.

The input data space is divided into fixed sized tiles for reducing the complexity of computation and achieving parallelism. The number of tiles can either be specified by the user or auto-computed based on the complexity of the home view. This auto-tiling computation is also multi-threaded and invisible to the client.

the area to trace is divided into 'tiles'. Threads are assigned to each tile.

Returning Polygons

The polygons that are members of the net are returned back to the client program using a callback system just like getting vector data from the QisMLib exploders.

Tracing Controls

Max Via Dimensions: The client can optionally specify a maximum size to determine which rectangles are to be treated as vias

Layers to Trace Through: The client can optionally specify a start and stop stackup order to limit the tracing to a subset of the specified stackup layers

Max vertices per net: The client can optionally specify a number of vertices beyond which a net will be truncated (to avoid lengthy tracing for nets such as power nets) The client can optionally chose to receive truncated nets or not.

Region Report: Upon completion of a region trace, the client can get a list of regions that cross a specified net or a list of nets that cross a specified region.

Sample Client/Library Flow

Here is a high level sample of how a client would work with the nettrace library (and the QisMLib library needed to load a layout file)

Action Comment
QisMLib_initialize_once(..) -> QisMLib Initialize the QisMLib
QisMLib -> Load_file(..) -> QisMFile Load a GDSII/OASIS/DbLoad file
QisMLib -> Get_extension_api(..) -> QisMNtrc Get access to the QisMNtrc extension
QisMNtrc -> Open_trace(QisMFile, ..) -> QisMNtrcTracer Create a tracer object, check out 1 license
QisMNtrcTracer -> Point_trace(.., QisMNtrcNotify (callback))
  -> QisMNtrcNotify -> Begin_net(..)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> End_net(..)
Trace net from a seed point
get polygons back using the callback function
continue until all polygons for that net are received
For a Region Seed
QisMNtrcTracer -> Region_trace(.., QisMNtrcNotify (callback))
  -> QisMNtrcNotify -> Begin_net(..) (NET 1)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> End_net(..)
  -> QisMNtrcNotify -> Begin_net(..) (NET 2)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> Net_boundary(..)
  -> QisMNtrcNotify -> End_net(..)
  -> QisMNtrcNotify -> End_net(..) (NET N)
Trace nets crossing one or more regions
QisMNtrc -> Close_trace(..) Destroy a tracer object, check in 1 license