Route Data Model


The OpenAccess route data model has been enhanced to improve performance, improve the usability of the route API, and efficiently support diagonal routing.

See also:
Understanding Routes
in the Programmers Guide
Physical Routing Segments (Orthogonal or Diagonal) in the Programmers Guide


Overview

Routes are a symbolic abstraction for the geometry of a wire. Routes directly indicate end-to-end centerline connectivity and define wire geometry such that it is understood by routing applications.

The collection of routes on a net portray its partitioning into point-to-point segments. Each route indicates the objects to which it connects (pins, terminals, Steiner's). Internal branching of a net is represented with a Steiner.

Each route points to the rules that it is intended to follow.

Route Elements as Managed Classes

In OpenAccess 2.2, the following route elements are managed objects that can be manipulated individually:

Think of a route as a container that holds these new managed objects.

This approach uses more memory than the previous route data model, but provides better performance.

For more information about pathSegs, see Physical Routing Segments (Orthogonal or Diagonal) in the Programmers Guide. Refer to the API documentation for details about vias and guides.

Creating Routing

Creating routes with the new managed objects is as straightforward as custom design. The general flow is as follows:

Routes can have an associated oaConstraintGroup, which specifies the rules that the router follows when the Route is constructed. The oaConstraintGroup may be on the route itself, or it may be on the oaNet,
oaBlock or oaDesign to which the Route belongs.

Begin and End Points

Routes may specify the two objects that they connect. These BeginConn and EndConn objects must be one of:

 

Example

oaSegStyle  segst1(20,	oacExtendEndStyle, oacVariableEndStyle, 0,30);
oaSegStyle  segst2(20,	oacVariableEndStyle, oacExtendEndStyle, 30,0);
oaPoint     strtPt(100, 100);
oaPoint     viaPt(300, 200);
oaPoint     endPt(300, 300);

oaPathSeg   *seg1 = oaPathSeg::create(blk, lyrM1, purpDrw,
					                   strtPt, viaPt, segst1);
oaStdVia    *via = oaStdVia::create(blk, viaDef, viaPt);
oaPathSeg   *seg2 = oaPathSeg::create(blk, lyrM2, purpDrw,
					                   viaPt, endPt, segst2);

oaRouteObjArray objs(3);
objs.setNumObjs(3);
objs[0] = seg1;
objs[1] = via;
via->setDirection(oacLayer1ToLayer2ViaDirection);
objs[2] = seg2;

oaRoute   route = oaRoute::create(blk,net);
route.setObjects(objs);

Geometric Routes are Eliminated

Geometric routes (“Special” routes in DEF terminology) have been eliminated in OpenAccess 2.2 because the route object did not add value here. In OpenAccess 2.2, you can add shapes and vias directly to the net.

Return to top of page

Return to What's New topics