oaheader.gif
overview.gif classes.gif progguide.gif exceptions.gif progguide.gif infomodel.gif index.gif help.gif

OpenAccess 22.41.004 Release


Contents

Version 22.41.004 Release
Build Configurations

The following table shows the build configurations and prebuilt libraries shipped with OpenAccess.

Platform Compiler
Solaris (x86_64) Operating System 10 with support for STLPort4 C++ standard template libraries Solaris Compiler: Sun Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Sun Studio 12 C++ 5.9*
Linux (x86 and x86_64) Operating System: Redhat Enterprise 4.0
Compatible with: RHEL50, SLES 10, SLES11
Linux Compiler: gcc 4.4.3
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio 2005
IBM Operating System: AIX 5.3 IBM Compiler: XL C++ 7.0

Notes
* For sun4v systems for Solaris 10, the following variable must be set: setenv OA_COMPILER stl4
32 bit OA libraries are compiled without the PIC option on Solaris and Linux.

Compatibility with Earlier Releases

The current data model revision is 4. The following table shows the contents of each data model revision.

Data Model Revision (oacDataModelRevNumber)
4 45/65 nanometer constraints, layer-pair exclusivity, purpose-aware constraints, and predefined via parameters
3 Incremental technology databases
2 Constraints and oaFigGroups
1 Huge Database feature
0 OpenAccess 2.2, but no new features are used.

Refer to the Features by Data Model document for a full list of the features included in each data model revision of OpenAccess.

The oacAPIMinorRevNumber  is 201.

About the 22.41 Stream

The 22.41 stream is a separate stream from 22.04. Although both streams support data model 4, 22.41 is built and tested on a different set of build configurations. These streams are data compatible with each other. Databases written by 22.41 kits can be read by 22.04 kits, and databases written by 22.04 kits can be read by 22.41 kits. However, applications built with 22.41 kits should be run with 22.41 kits and applications built with 22.04 kits should be run with 22.04 kits. It is possible to run an application compiled with 22.04 kits against newer 22.41 kits, however this is not recommended.

Changes and New Features

LEF/DEF parser version

To build the LEF/DEF translators, the lefdef5.7_32_p002 (or later) toolkit is required.

Thread Safety

OpenAccess now supports thread safety on a beta basis. Thread safety is supported for two basic use models: multiple reader threads operating on one or more databases and multiple writer threads operating on a single thread per database basis. The OpenAccess API and implementation only supports thread safety in the form of resource locking and data preconditioning. OpenAccess will not create threads or use them internally.

Applications can turn on thread safety and locking within the session if they have met certain prerequisites and by calling oaSession::setThreadUseModel() with one of the following thread use model enums.

oaThreadUseModel Enum Prerequisites? Locking? Description
oacSingleThreadUseModel None No The application intends to interact with OpenAccess using a single thread. This is the default value.
oacMultipleReadersThreadUseModel Yes Yes The application intends to use multiple read-only threads to access one or more OpenAccess databases concurrently.
oacMultipleWritersThreadUseModel Yes Yes The application intends to use multiple read-write threads to access a single OpenAccess database per thread.

Applications can switch from multi-threaded to single threaded use models (and back) in the same session. However, OpenAccess will not revert any data preconditioning for supporting a multi-threaded use model when switching back to single threaded.

At this point in time, the oacMultipleWritersThreadUseModel does not support traversing data. This will be addressed in an upcoming incremental release. Until then, thread safety should be considered beta and is not intended for production use.

Handling Recursion

This capability enhances OpenAccess to handle recursive designs. In addition, OpenAccess now disallows the introduction of recursion through any of its APIs. Additionally, the applications can also query regarding the existence of recursion in a design hierarchy. The data is loaded in such a way that allows the user or application to fix the data. Recursion here refers to a design containing an instance of itself.

Note: Recursion handling is limited to self-instantiation scenarios. Complex recursion types (like A->B->A) are not currently supported.

The following sections provide a detailed description on enhancements included in this release:

Header Binding

When an attempt is made to bind a header to its master in memory, OpenAccess checks if the master already references the header's design (or module). If it does, the header is left unbound to ensure non occurrence of a recursive loop in the hierarchy. Subsequently, the header is added to the unbound header list and it will remain unbound until adjustments are made to the data to remove the recursive loop.When this situation is detected, OpenAccess issues an on-bind recursion observer notification.

The detection notification will include data that will provide an observer enough information to report a meaningful message to the user.

Recursion Checking for Existing APIs

The following OpenAccess public APIs have been identified for recursion checking to prevent the user from introducing recursion:

Recursion Checking APIs

The following new functions have been added in this release:

New Recursion Observer

A new observer has been defined to provide notification to applications if recursion is detected. The detection notifications can be of two types. The first type of notification is issued during the explicit oaDesign::hasRecursion check. When recursion is detected, the design where a reference to it already exists in its hierarchy and hierarchy stack is part of the notification. The second type of notification is issued when an instHeader or viaHeader is being bound and one of the design's in the hierarchy portion which instantiates the instHeader's or viaHeaders's owning design already references the design. The list of new functions is as follows:

oaRecursionObserver(oaUInt4 priorityIn, oaBoolean enabledIn = true);
virtual ~oaRecursionObserver();
virtual void onDetect(const oaDesign *design, const oaDesignArray &bottomUpList);
virtual void onBind(const oaRefHeader *header, const oaDesign *master, const oaDesignArray &bottomUpList);
static void notifyDetectObservers(const oaDesign *design, const oaDesignArray &bottomUpList);
static void notifyBindObservers(const oaRefHeader *header, const oaDesign *master, const oaDesignArray &bottomUpList);

oaChangeSetObserver Observer Class

A new observer class oaChangeSetObserver is defined for oaChangeSet to provide notifications(as explained below). Applications can choose to derive their own observer from this class and implement the observer methods.

class oaChangeSetObserver 
{
public: void onPostCreate(oaChangeSetBase *cs);
void onPreDestroy(oaChangeSetBase *cs);
void onEmpty(oaChangeSetBase *cs);
void onFirstChange(oaChangeSetBase *cs);
void onFullExport(oaChangeSetBase *cs);
void onIncrementalExport(oaChangeSetBase *cs);
};

The detailed description of methods defined by oaChangeSetObserver class is as follows:

Restricting APIs in Block Overrides flow

Block Overrides are only allowed on nets with the following sigTypes: "power", "ground", "tieoff", "tieHi", or "tieLo"or on nets that are equivalent to a net with one of these sigTypes. Additional checking has been added to several APIs that restrict the editing of connectivity in the block domain that will break the sigType invariant for Block Overrides. The detailed description of these APIs and related exceptions is as follows:

API Name Exception Description
oaInstTerm::addToNet oacInvalidSigTypeForBlockOverrideNet This exception is thrown if the instTerm overrides the connectivity of another instTerm and the specified net does not have an appropriate sigType (either directly or through any of its equivalent nets).
oaNet::destroy

oacCannotDestroyNetOnHiddenTerm 
or oacCannotDestroyNetOnHiddenInstTerm

These exceptions are thrown if any terms or instTerms were hidden on the net.
oaNet::isEmpty                             - This function returns false if there are no terms or instTerms on the net or if the only terms and instTerms on the net were hidden.
oaNet::setSigType oacInvalidSigTypeForBlockOverrideNet This exception is thrown if the net is associated with an overriding instTerm or term and it does not have an equivalent net that has one of the required sigTypes.

oaNet::merge
and
oaNet::transfer

oacCannotEditNetOnHiddenTerm 
or
oacCannotEditNetOnHiddenInstTerm
This exception is thrown if any terms or instTerms were hidden on the specified source net.
oaBitNet::breakEquivalence oacInvalidSigTypeForBlockOverrideNet

This exception prevents an application from inadvertently using breakEquivalence to remove the "power" or "ground" characteristic sigType from a net with hidden or overriding terms or instTerms that inherit that characteristic sigType from an equivalent net.

OpenAccess throws this exception in one of the following conditions:

  • The net has one or more overriding terms or instTerms and it does not have one of the following sigType:  "power", "ground", "tieoff", "tieHi", or "tieLo".
  • One of the nets in the equivalent set of nets has an overriding term or instTerm and it does not have one of the following sigType: "power", "ground", "tieoff", "tieHi", or "tieLo.
  • The sigType of the net is "power"/"ground"/"tieoff"/"tieHi" or "tieLo" but no other net in the equivalent net set has one of these sigTypes.
oaTerm::moveToNet oacInvalidSigTypeForBlockOverrideNet This exception is thrown if the term is an overriding term and the destination net does not have a "power", "ground", "tieoff", "tieHi", or "tieLo" sigType and it is not equivalent to a net with one of these sigTypes.

oaOccTraverser Changes

A new public class oaOccProducer has been defined. This class separates the traversal of the hierarchy from the production of the contents of a specific occurrence. 

The oaOccTraverser class has also been changed. It now derives from the oaOccProducer class. This helps maintain compile compatibility by preserving the process functions in the public interface of the oaOccTraverser class. Applications should still derive from oaOccTraverser to define the behavior of objects as they are processed or to traverse through the hierarchy.

Both the APIs and the behavior of the oaOccTraverser class have been changed to make the class usable to a wider range of applications. The significant behavior changes are:

The OpenAccess Hierarchy Domains section in the Programmer's Guide contains the definitions and examples of pre- and post- order traversals. See the Programmer's Guide for more information on how to use oaOccTraverser.

oaStrm API Changes (for Derived Translators)

View a summary of the oaStrm changes for derived translators.

CMS API Changes (Change Management)

View a summary of the CMS changes.

oaLefDef API Changes (for Derived Translators)

View a summary of the oaLefDef changes for derived translators.

oaSpef API Changes (for Derived Translators)

View a summary of the oaSpef changes for derived translators.

API Change Reports

View a summary of the API changes for this release.


Fixed Problems
Si2 ITS Issue
  The oa2def translator provides a confusing message to report missing instance master
  Change the fixed layer number for creating the layer specified in -textLayer option in lef2oa
1205 The DEF translator loses supply and ground sensitivity in round trip
  The XYTree shared library should link to oaTech
  The oaTech::getFeatures() API crashes while constructing a collection of constraintParamDefs in the presence of ITDB graph
  Provide a way to exclude cells from via recognition
  If an abstract view does not exist, verilogAnnotate creates a new abstract view instead of issuing a warning
  The verilogAnnotate translator should not default to abstract if the -refViews option is used
  Strm2oa error message 80046 contains a typo
1211 The getGroupsOwnedBy().includes() does not show attrDisplay as a part of the group
  Lef2oa stores the VIARULE direction incorrectly
  Strm2oa is not handling GDS with more than 20000 cells correctly
  Segmentation fault during undo of uniquify
  Oa2def is not preserving the hierarchy delimiter defined in the original DEF file translated to OA
  Via detection creates multiple on-disk cellviews which can impact performance
  The lef2oa translator should issue a warning if the techDB exists and the LEF has no UNITS statement
1230 The unbound via bbox changes after destroy and undo
1109 The oaOccTraverser::processInstHeader is not called during traversal
  The hierDepth should be considered only when the cell option is specified
  Blockages mismatch due to difference in default value across DM3 and DM4
  Empty lppHeaders should be skipped in oaStrmOut::writeOaLPPHeader()
  oaRefHeaderTbl::getMaster returns a super header from a subHeader
  A superHeader could be destroyed even when it is being referenced by a viaDefArrayValue
  The modInstTerm should appear to be disconnected and getNet should return NULL, if the reflected instTerm is connected to a physical-only net
  Overriding instTerm should be physical-only.
  Incorrect LEF mapping comment for minEndOfLineSpacing
  Terminal iteration in an oaTerm collection goes into an infinite loop
  The oa2def translator should export physical-only instances with +SOURCE DIST
  The spef2oa translator should use gzread to read the SPEF file
  The lef2oa translator should assume OVERLAP as the name of the overlap layer
  via orientation for nets is lost after round trip of def2oa+oa2def
  Add support for redo() to update the headers in a uniquify operation
  Merge oaOccObjectMemTbl::remove and removeUniquify functions
  spef2oa should handle the direction of a term with termType oacJumperTermType
  def2oa should exit after detecting a cellview type mismatch exception
  The oa2verilog translator should not emit any port declarations for terminals whose isInterface state is set to false
  The oaProp::copyTo() fails to set correct domain for target property
  The oa2lef is ignoring the orientation for FOREIGN objects
  oaPropTbl::moveTo()should not generate a loop-ownership
  Fix broken link issue related to multibit_insts.bmp in logical connectivity PG article
  Non persistent appDef's back pointer is lost after saving the design
  Updated stdViaDef searching mechanism to include cut size swap and layer matches
  oa2lef should consider the isSide() attribute of the oaAntennaRatioValue for a given oaAntenna constraint before the value of oacAntennaAreaFactorConstraintParamType is output
  Creating overlapping vector instances with a V__ prefix should throw an exception
  Add oaDesign::hasRecursion and oaDesign::hasReference public APIs to enable recursion checking during header binding
  Output the correct origin for FOREIGN objects and issue a warning when the FOREIGN name matches the MACRO name
  If cell count exceeds maxCells limit in the current library, provide an information message before creating a new library
  Compare the file timestamp on disk against oaDatabase::fileTimestamp before upgrading a design to append mode
  Bind TextOverrides to duplicate test objects
1240 Update lastSavedTime and creationTime for a new design created using Save As option
  Error/info messages related to the design translation for a cellView should be printed at the start of actual translation
  oaDesignData::openHier() should run traversal loop twice to bind missing subHeaders. If the header is already bound, skip it in the second loop
  Do not check the sigType of the multibit net while creating a multibit override
  Switch statements in oaRouteTbl::checkContiguity should include default case
  Changing the connectivity of a vector instance with a large number of bits may cause the system to run out of memory
  strm2oa should check top block after new design creation
  Clean-up temp cells after strmIn translation more efficiently
  Do not create empty auto-named constraintGroup when determining routing layer
  The strm2oa translator crashes with "Unable to lock database file" error
  If a layer number is set to a steiner which is not associated with a layer, the steiner should be removed from the grid of layerless steiners
  The oa2lef translator crashes while writing VIARULE DIRECTION
  The strm2oa translator should not change the DBUperUU of an existing tech
  Performance improvement of oaBundleNetTbl::getBit
  The lef2oa translator crashes due to an invalid viaDirection parameter
  Data in oaTech graph is not findable when setRefs() is called during the course of oaTech graph open, in some cases
1207 spef2oa should terminate the file name with NULL character while dropping the .gz extension
  If a terminal uses both MUSTJOIN and USE POWER/GROUND attributes, lef2oa should ignore MUSTJOIN property with a warning
  Performance improvement for oaInst::getPin()
  Term sensitivity is not reverted by undo
  The lef2oa translator should report a warning if a read-only tech is modified for SITE statement
  Invalid net is being passed to onEndCreate notification for oaModNet scoped observer
  Preserve cache file if owning host is unreachable
  The oa2strm translator should not crash when exporting a recursive design
  Crash in oaDesign::open() if via superMaster parameters have been modified
  Add public PcellFile object pointer and offset to PcellFile observer notifications
  Add cutClassProfile parameter to cut class spacing
  oaShape::transform does not consider negative angles to check 90 degree angle
  Copying or moving an oaPathSeg may change the begin and end extension
  lef2oa should issue a warning if direction is not defined for routing layers
1274 Unbind instTerm when the term is renamed
1277 Add the library search path at the beginning of the existing search path to ensure that the entries for existing OA libraries are not overriden
  Performance issue in oa2strm for designs with many pcells
1267 verilog2oa hangs in the makeCanonEquivalences function
  clusterBoundary copy fails to make a copy if it is the member of an oaFigGroup
1280 oaString::substr should validate offset
  Do not update design's tech bindings unless the modified tech is the design's tech or the design's tech is not being opened and the modified tech is in the design's techgraph
  Crash in oaTextDisplay::copy() to a different block if the textDisplay is a group member
  strmout hangs in specific scenarios with nested pcells
  oaGetVersion output does not contain oaUtil library information on the AIX platform

Incomplete Status

Note: The Change Management System is no longer designated as Beta, and is considered to be of production quality. However, the Importer plug-in interface referenced in the documentation is not yet implemented.

Some parts of this release are still in development and are considered to be of Beta quality. They are subject to changes in their use and interface. This includes:

The Turbo DM System is not considered to be of production quality and is not supported.

Return to top of page