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
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.
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 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.
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 (“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.
Copyright © 2003-2010 Cadence Design Systems, Inc.
All rights reserved.