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. |
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.
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.
To build the LEF/DEF translators, the lefdef5.7_32_p002 (or later) toolkit is required.
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.
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:
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.
The following OpenAccess public APIs have been identified for recursion checking to prevent the user from introducing recursion:
The following new functions have been added in this release:
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);
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:
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 |
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
|
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:
|
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. |
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.
View a summary of the oaStrm changes for derived translators.
View a summary of the CMS changes.
View a summary of the oaLefDef changes for derived translators.
View a summary of the oaSpef changes for derived translators.
View a summary of the API changes for this release.
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 |
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.
Copyright © 2003-2010 Cadence
Design Systems, Inc.
All rights reserved.