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

OpenAccess 22.04.007 Source Code and Documentation Release

Contents


Note: Release notes for previous versions of OpenAccess are available in the Archived OpenAccess Release Notes document.

Compatibility with Earlier Releases

This is the first release of data model revision 4.

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.

New functions were added to this release, so the oacAPIMinorRevNumber was incremented to 35.

Refer to Compatibility for OpenAccess Applications and Data for more information about oacDataModelRevNumber and oacAPIMinorRevNumber changes.

Changes and New Features

The release includes the following:

Versioning Changes for OpenAccess

The versioning mechanism for OpenAccess has been enhanced to include information about the data model revision. The new version numbering uses this format:

xx.yy.zzz 

Where:

The current OpenAccess release is named OpenAccess 22.04.007.

Detecting the Data Model Revision and Features for Databases

OpenAccess now provides functions for determining which features are present in a database that is in memory. An application can call one of the getFeatures functions, which return an array of oaFeature object pointers. The application can then iterate through the array to get the ID for each feature present. Each feature ID corresponds to an oaFeatureIDEnum value. The getFeatures functions also return the minimum data model revision of the database based on the features it includes.

OpenAccess also provides an oaFeature:getDataModelRev function to get the data model revision number for a particular feature.

New Value Types

The following new value types are defined:

New and Updated Constraints

This release includes the following new constraints that support routing for 45 and 65 nanometer processes.

Constraint Overview
oacPreferredRoutingDirection

Specifies one of the orthogonal or one of the diagonal routing directions as preferred.

oacMinEdgeAdjacentLength Specifies the minimum length of edges on a polygon when the length of an adjacent short edge is less than a specified length.
oacMinRectArea Specifies the minimum area for rectangular shapes on a layer.
oacMinParallelViaClearance Specifies the clearance between cut shapes on one layer with respect to cut shapes on an adjacent layer that have parallel edges with an overlap greater than 0.
oacDefaultHorizontalRouteGridPitch Simple constraint that specifies the default horizontal route grid pitch for all layers.
oacDefaultVerticalRouteGridPitch Simple constraint that specifies the default vertical route grid pitch for all layers.
oacDefault135RouteGridPitch Simple constraint that specifies the default left diagonal route grid pitch for all layers.
oacDefault45RouteGridPitch Simple constraint that specifies the default right diagonal route grid pitch for all layers.
oacDefaultHorizontalRouteGridOffset Simple constraint that specifies the default horizontal route grid offset for all layers.
oacDefaultVerticalRouteGridOffset Simple constraint that specifies the default vertical route grid offset for all layers.
oacDefault135RouteGridOffset Simple constraint that specifies the default 135 degree route grid offset for all layers.
oacDefault45RouteGridOffset Simple constraint that specifies the default 45 degree route grid offset for all layers.
oacGateOrientation Layer constraint that specifies horizontal, vertical or any orientation required for building gates.
oacMinOrthogonalViaSpacing Layer constraint that defines a table that specifies the required orthogonal spacing between overlapping via cut pairs and other vias.
oacMinNotchSpacing Defines the minimum notch spacing for a minimum notch length.
oacMinEndOfNotchSpacing Specifies the minimum spacing between the notch and shapes overlapping within the extent of the notch.
oacDummyPolyExtension Specifies the required extension of dummy poly shapes beyond the adjacent shapes on the active layer.
oacAllowedSpacingRange Specifies a range of allowed spacings between shapes on a layer.
oacAllowedClearanceRange Layer pair constraint that specifies the range of clearances, in database units, that are allowed between shapes on different layers.
oacShapeAngle Specifies the default geometry orientations that are allowed by the technology.
oacTaperHalo Simple constraint that specifies the offset in database units around pin figures within which tapering must be performed according to the spacing and width constraints specified in the taper constraint group.
oacMinViaSpacing Layer constraint that specifies the via cut spacing for cuts on the same net or for cuts on the same metal.
oacMinViaClearance Layer pair constraint that specifies the via cut clearance between cuts on different layers.
oacUseNonOrthogonalRoutingRules Simple constraint that designates whether a block or area of a design is routed using 45 degree and 135 degree routing pitches and offsets.
oacLayerShapeAngle Layer constraint that specifies the allowed geometry orientations on a designated layer.

In addition, the following constraints have been updated to support routing for 45 and 65 nanometer processes.

Constraint New Constraint Parameters
oacMinSpacing oacSpacingDirectionConstraintParamType
oacConnectivityTypeConstraintParamType
oacPGNetConstraintParamType
oacMinDualExtension

oacCutDistanceConstraintParamType
oacLengthConstraintParamType
oacNoSharedEdgeConstraintParamType

oacMinNumCut oacDistanceWithinConstraintParamType
oacMinProtrusionNumCut oacDistanceWithinConstraintParamType

New Examples for Constraints

Two new code examples demonstrate how to work with constraints, derived layers, constraint groups, and groups. These examples are located in <install_dir>/examples/oa/.

The Constraints1 example demonstrates how to:

The Constraints2 example demonstrates how to:

The Constraints2 example also includes a constraint traverser/checker that demonstrates the constraint scoping and precedence rules.

Purpose Aware Constraints

Some foundries and applications apply different constraints to the shapes on a layer depending on the shape purpose. For example, shapes with the fill purpose might require a different minimum spacing than the minimum spacing required between shapes with the drawing purpose on the same layer.

In OpenAccess, all layers associated with constraints can now be further scoped to a purpose. Applications can limit the scope of a layer-based constraint to shapes with a specific purpose by creating a constraint with both layers and purposes. The oaLayerConstraint, oaLayerArrayConstraint, and oaLayerPairConstraint classes include create() functions to specify both layers and corresponding purposes. The create() functions take one or more layerNum arguments and one or more purposeNum arguments. The layer constraint classes also provide getPurpose() functions that return the purpose number or an array of purpose numbers for a constraint, and they provide find() functions that return constraints that match the specified layerNum and purposeNum arguments.

New oaPurposeArray and oaPurposeValue classes support this functionality. The oaPurposeArray class is used to create a purpose aware oaLayerArrayConstraint. The oaPurposeValue is used to create a derived layer using oaSelectShapesWithPurpose.

For more information, refer to Scoping to Purpose in Creating and Modeling Process Rules and Constraints in the Programmers Guide.

New Built-In Purpose Types and Values

New built-in purpose types capture the semantics of any and no purposes, which support foundry rules that depend not only on the layer but also on the purpose of shapes. In addition, the oaFillOPC built-in purpose type specifies whether or not a fill shape requires OPC.

Built-In Purpose Type Built-in Purpose Value
oaAny oavPurposeNumberAny
oaNo oavPurposeNumberNo
oaFillOPC (oacFillopcPurposeType) oavPurposeNumberFillOPC

The Any and No purpose numbers have restricted uses. Shapes cannot be created with the Any or No purpose numbers. The No purpose can only be used when creating or finding constraints. The Any purpose can only be used when finding constraints.

Purpose numbers in the range of 0xffff0000 to 0xffffffff (inclusive) are reserved for built-in purposes. OpenAccess throws an oacPurposeNumberIsReserved exception if an application attempts to do either of the following:

If an older database is loaded by an application that uses the shared libraries from 22.04.002 or later, any missing built-in purposes are added. If a database created before 22.04.002 includes a user-defined purpose that uses a reserved purpose number, and that database is read by newer OpenAccess shared libraries, the user-defined purposes in the reserved range are removed from the database.

Constraint Parameters

New Constraint Parameter Types

The following new constraint parameter types are defined.

Type

Value

oacCumulativeRunLengthParamType

oacIntValueType

oacCenterToCenterConstraintParamType

oacBooleanValueType

oacAreaConstraintParamType

oacIntValueType

oacStackConstraintParamType

oacBooleanValueType

oacNoSingleCutViaConstraintParamType

oacBooleanValueType

oacConnectivityType

oacIntValueType

oacPGNetConstraintParamType

oacBooleanValueType

New Constraint Parameter Value Enums

The following enums are added for use with constraint parameters:

Modified Constraint Parameter Value Enum Values

The oaWidthLengthTableTypeEnum parameter value enum is extended to include oacTwoWidthParallelRunLengthTableType.

Constraint Group Definitions (oaConstraintGroupDefs)

OpenAccess provides constraint group definitions (oaConstraintGroupDefs) that specify the definitions of constraint groups (oaConstraintGroups). The constraint group definition contains a name, a type, a list of databases in which the constraint group can be created, a list of objects (by type) to which the constraint applies, a relationship type, and an indicator of whether or not there can be only one constraint group that uses this definition in any given database. 

The oaDesign and oaTech databases each have getConstraintGroups() functions that take a pointer to an oaConstraintGroupDef and return a collection of oaConstraintGroups associated with the given oaConstraintGroupDef.  Alternatively, these constraint groups can be found by name using the oaConstraintGroup::find() function.

OpenAccess provides the following built-in constraint group definitions, which are specified using an oaConstraintGroupType enumeration. The built-in oaConstraintGroupDefs have oa prefixes to avoid name collisions with application-defined types.

Built-In Constraint Group Overview
oaImplicit Specifies the semantics for the built-in constraint group associated with individual objects.
oaDefault Specifies the semantics for the built-in constraint group associated with a container object. Constraints in these constraint groups apply to the contained objects but not to the container object.
oaFoundry Specifies the semantics for the built-in foundry constraint group associated with an oaTech database. A technology database can have only one foundry constraint group.
oaTaper Specifies the semantics for the built-in taper constraint group.
oaInputTaper Specifies the semantics for the built-in input taper constraint group.
oaOutputTaper Specifies the semantics for the built-in output taper constraint group.
oaShielding Specifies the semantics for the built-in constraint group associated with a shielded oaBitNet.
oaTransReflexive Specifies the semantics for constraint groups where the constraints apply between all objects within a container and all relevant objects outside of that container. The constraints do not apply between objects within the container.
oaReflexive Specifies the semantics for constraint groups where the constraints apply between the relevant objects within a container, but do not apply to objects outside of the container.
oaInterChild The interchild constraint group semantics are a variant of the reflexive constraint group semantics. Constraints in an interchild constraint group apply between the relevant objects in a sub-group and all objects in other sub-groups. If interchild constraints are applied to an oaGroup that has no sub-groups, the semantics for applying the constraints are identical to the semantics for reflexive constraint groups.
oaUserDefined Collects all user named constraint groups that are associated with a database but not associated with a particular object.

The oaConstraintGroupDef::isBuiltIn function identifies whether or not a particular definition is one of the OpenAccess built-in definitions.

For more information about using oaConstraintGroupDefs and the built-in constraint group definitions, refer to Using Constraint Group Definitions in the Programmers Guide.

Operators for Constraint Groups

Constraint groups can be created with the following operators.

Operator Definition
Precedence Specifies that the first hard constraint found in the group must be met. If a soft constraint is found, it is enforced if possible. Otherwise, the next constraint in the group is considered. (Provides the same semantics as existing constraint groups in data model revision 3.)
And Represents constraint groups where it is necessary to satisfy all of the constraints within the group.
Or Indicates that only one constraint in the group must be met. Other constraint groups cannot be included in the or type of constraint group.

Refer to oaConstraintGroupOperator for more information.

Defining Routing Blockages, Blockage Spacing, and Fill Shapes

New constructs and attributes provide more flexibility for defining routing blockages, blockage spacing, and fill shapes.

New Blockage and Halo Objects

The following new blockage and halo classes are available.

Class Name Overview
oaLayerRangeBlockage Blockage over a set of layers.
oaLayerRangeHalo Blockage with an associated prBoundary that applies to a set of layers.

New soft Attribute on oaAreaBlockage and oaAreaHalo Objects

Specifying Input Taper Rules Within a Halo

OpenAccess lets applications specify:

This is done with two new oaConstraintGroupTypes, oacInputTaperConstraintGroupType and oacOutputConstraintGroupType. The oacTaperHalo constraint lets applications specify a halo around the figures of a pin in which tapering should be performed (according to the spacing and width constraints specified in a taper constraint group).

Refer to Using Taper Constraint Group Definitions in the Creating and Modeling Process Rules and Constraints document in the Programmers Guide for more information.

Technology Database Enhancements

New Process Family information for Technology Databases

Foundries often use sets of technology databases where each set corresponds to a process base and its variants. It is important to distinguish one set of databases for one process from sets for other processes. OpenAccess includes an API to designate the processFamily attribute for a database.

New APIs on oaTech let applications set, query, and unset the processFamily attribute for a technology database.

getProcessFamily(oaString &processFamily) const 
hasProcessFamily() const 
setProcessFamily(const oaString &processFamily) 
unsetProcessFamily() 

The getProcessFamily and hasProcessFamily functions operate across a graph of referenced technology databases by default. The setProcessFamily and unsetProcessFamily functions operate on the local technology database.

An oacConflictingProcessFamilyInTech exception is thrown if you attempt to set the processFamily attribute on a technology database that is part of a graph of technology databases in which one of the other tech databases already has this attribute set to a different value. In addition, the following observer notification is triggered when a mismatched processFamily attribute value is detected in a graph of techs.

virtual void oaObserver<oaTech>::onProcessFamilyConflict(const oaTechArray &conflictedTechs)  

Excluding Incompatible Layers

Layers can be excluded by name from a graph of technology databases. This capability provides safeguards to ensure that a graph of technology databases does not have inadvertent references to incompatible layers.

The following APIs support the layer exclusion capability.

Function Description
oaPhysicalLayer::setExcludedLayers Specifies the list of layers excluded from the graph of technology databases
oaPhysicalLayer::getExcludedLayers Returns the excluded layer list for the layer
oaPhysicalLayer::hasExcludedLayers Checks whether a layer has an excluded layers list
oaPhysicalLayer::unsetExcludedLayers Discards the excluded layers list for the layer
oaObserver<oaTech>::onExcludedLayerConflict Receives a notification when excluded layer conflicts occur
oaPhysicalLayer::getExcludedLayerNames() Gets the exclusion list for a physical layer

For more information, refer to Excluding Incompatible Layers in the Programmers Guide.

oaLayer::setNumber and oaPurpose::setNumber Changes

When an application uses oaLayer::setNumber to modify a layer's number, OpenAccess now unbinds the layer from old layer and LPP headers in all the designs that bind to the layer's oaTech and binds the layer to existing layer and LPP headers with the new number in those designs. The function also destroys any derived layers, sized layers, oaViaDefs or oaViaSpecs in the same oaTech that is dependent on this layer. The dependent objects are destroyed because they are bound to the layer by number. When the layer number changes, the binding is no longer valid. (Previously, layers and vias that were derived from the modified layer were preserved.)

When an application uses oaPurpose::setNumber to modify the purpose number of an oaPurpose, OpenAccess now unbinds the purpose from the old LPP header in the designs that are bound to the layer's oaTech and binds the purpose to existing LPP headers with the new number in those designs.

Group Definitions (oaGroupDefs)

OpenAccess provides an oaGroupDef object that specifies the definition of an oaGroup.

An application can use the oaFlatGroupDef class to specify that a group includes only a specified set of objects, excluding other groups. The oaHierGroupDef class lets an application specify that a group can contain a mixture of objects and groups, or only groups. The oaHierGroupDef object can be unrestricted, meaning that groups of any type can be included. A restricted oaHierGroupDef object can contain only groups of a specific type (as specified by an oaGroupDef).

The oaDesign, oaTech, oaDM, and oaLib databases have getGroups functions that return collections of groups that are associated with a given oaGroupDef.

OpenAccess supports several built-in group definitions, which are defined in the following table. The built-in group definition enums are on the oaGroupPurposeType Class Reference page in the API documentation. The built-in oaGroupDefs have oa prefixes to avoid name collisions with application-defined types.

oaGroupPurposeTypeEnum Description Objects
Unrestricted The oacUnrestrictedGroupPurposeType is associated with the oaHierGroupDef definition and specifies that all types of objects and all types of other groups can be members of the group. Usually, if a group definition allows other groups as members, the member groups must have the same group definition as the containing group. The Unrestricted type does not have this restriction, and it can contain any group regardless of its definition. This definition is identical to the definition that is implied in databases based on data models that preceded data model 4. Any object or oaGroup
Differential Net Pair The oacDiffNetPairGroupPurposeType is associated with the oaFlatGroupDef definition and specifies that the group may only contain oaBitNet objects as members and implies that the group consists of a net pair. oaBitNet
Matched Nets The oacMatchedNetGroupPurposeType is associated with the oaFlatGroupDef definition and specifies that the group may only contain oaBitNet objects as members. oaBitNet
Nets The oacNetGroupPurposeType is associated with the oaFlatGroupDef definition and specifies that the group may only contain oaNet objects. oaNet
Nets and Groups The oacNestedNetGroupPurposeType is associated with the oaHierGroupDef definition and specifies that the group may only contain oaNet objects and other groups that are also associated with the oacNestedNetGroupPurposeType definition. oaNet, oaGroup
Symmetric Nets The oacSymmetricNetGroupPurposeType is associated with the oaFlatGroupDef definition and specifies that the group may only contain oaBitNet objects. oaBitNet

The oaGroupDef::isBuiltIn functions let applications determine if a particular definition is one of the OpenAccess built-in definitions.

For more information about oaGroupDefs, refer to Using Group Definitions in the Programmers Guide.

Via Variants (oaViaVariants)

Applications can now store predefined parameterizations of oaStdVias and oaCustomVias as via variants (oaViaVariants). An oaViaVariant object represents a named pairing of an oaViaDef reference and a fully specified set of via parameters.

For more information, refer to Representing Vias in OpenAccess in the Programmers Guide.

oaCustomVia and oaStdVia Binding Issues Resolved

In previous releases, it was possible, though incorrect, to bind an oaStdVia to an oaCustomViaDef. The following actions caused the incorrect binding:

The oaStdVia would be incorrectly bound to the oaCustomViaDef because the binding was done by oaViaDef name. The same could occur for the case of an oaCustomVia and an oaStdViaDef.

In the current release, the incorrect binding described above will no longer occur in this situation, and no exception will be thrown. The incorrect binding is also prevented for oaViaTopologyArrayValues and oaViaDefArrayValues that would potentially include cases of this problem.

Because the binding no longer occurs, there can be a situation in which an oaStdVia is not bound and the oaStdViaHeader still exists. In this situation, if an attempt is made to create an oaCustomVia with an oaCustomViaDef with the same name as the existing oaStdViaHeader, an oacCustomViaDefSameNameasStdViaDef exception is thrown. Similarly, an oacStdViaDefSameNameasCustomViaDef exception is thrown if, in similar circumstances, an attempt is made to create an oaStdVia with an oaStdViaDef with the same name as an existing oaCustomViaHeader. The oaViaTopologyArrayValue and oaViaDefArrayValue create functions also throw these exceptions when appropriate.

New pinType Attribute on oaPin

A new pinType attribute on oaPin specifies the connection type for a pin:

Miscellaneous Changes

New isBuiltIn Functions

The following functions let applications determine if a particular definition is one of the OpenAccess built-in definitions.

Added oaViaParam::isEqual() API

This function compares the parameters of two oaViaParam objects. It does not compare the flags.

Note: The oaViaParameter operator== function does compare the flags and returns false if the values in one of the viaParam objects were set explicitly and the other values were left at the default even if the actual values are the same. The new isEqual function compares only the actual values and ignores the explicitness of the values.

Behavior Change for oaObserver<oaConstraint>

Observer notifications are now sent for calls to oaConstraint::setValue even if the constraint is already set to the given oaValue. This allows applications to receive oacSetValueConstraintModType pre and post modify observer notifications. In the expected use model, applications that set constraint values will call oaConstraint::setValue after every call to oaValue::set in order to trigger the appropriate observer notifications. Applications that receive observer notifications must be aware that the oaValue pointer might not actually change when an oacSetValueConstraintModType observer notification is received.

Note: Observer notifications for this kind of modification will be sent during undo and redo operations as well.

Region Query Changes

The following changes to region query are available in this release:

Cached Pcell subMasters

A new IPcellFile utility class allows applications to write and read Pcell subMaster data to and from a cache file. An application that implements a Pcell evaluator (using the IPcell interface) can use the IPcellFile functionality to write and read the contents of Pcell subMasters to and from a cache file of their choosing.

Note: An application that has an IPcell interface is not required to support cached Pcell subMasters.

For more information about cached Pcell subMasters, refer to Storing and Retrieving subMasters in How to Write a Pcell Evaluator Plug-in in the Programmers Guide.

oaDMPlugInError Class Changes

In previous versions, the FileSys DM system threw exceptions of IDMException class, which were initialized with message IDs defined in the DM package; whereas the Turbo DM system defined its own set of message IDs and message strings. In order to share message IDs, the enums for the plug-in IDs were declared in the DM package, which is inconsistent with the way other OpenAccess packages are handled.

The FileSys and Turbo DM plug-ins now only throw exceptions derived from IException. The oaDMError derived class is used to wrap any exceptions received from the DM plug-ins. This class represents an oacInterfaceException error ID, which reports a plug-in error and includes information about the originating plug-In exception.

Specifcially, in previous releases, errors originated by the DM plug-ins were converted into either oaDMPlugInExceptions or oaDMErrors. In the FileSys DM plug-in, the message ID and the error message string were those originated from the plug-in code. In the current release, all exceptions that originate from DM plug-ins are caught by DM, wrapped, and rethrown as special oaDMPlugInErrors with the message ID oacInterfaceException. The error message and the message ID from the originating DM plug-in error is embedded as part of the new DMPlugInError message.

For example, instead of throwing this exception:

oaDMError with message ID oacUnableToCreateTempFile — "3096 Unable to create temporary file."

The DM plug-in now throws a message such as this:

oaDMPlugInException with message ID oacInterfaceException — "3042: Received exception from plug-in when accessing library: #3096:
"Unable to create temporary file ",
Build and Link Process Changes

Debuggable Libraries

The OpenAccess debuggable libraries no longer contain the letter "D" as part of the library name, making it easier for developers to switch between optimized and debuggable libraries.

For example, the oaDesignD.lib debuggable library has been renamed to oaDesign.lib.

For compatibility purposes, links from the old library names to the new library names are provided in OpenAccess installations. However, these links will eventually be removed.

Compiling OpenAccess

If you compile the OpenAccess source code, you must manually delete the debug libraries with the old names from any UNIX installation, or the compilation will fail. The following will accomplish this:

gmake clean
gmake install

On the Windows platform, you must update your project file to include the new debuggable library names and re-link your program to access the new debuggable library names. In addition, it is recommended that your delete the debuggable libraries with the old names from your hierarchy.

Updates to Visual Studio 2005 Files

Visual Studio 2005 enables buffer security checking by default. The extra code added by these checks does not allow application code compiled in debug mode to be linked against optimized code where these checks have been added (this could be done with .NET 2003 optimized code). OpenAccess has updated the Visual Studio project files to disable buffer security checking in the optDLL, optStatic, and dbgStatic configurations.

To accomplish this, two new preprocessor define statements are added to the configurations mentioned above:

_SECURE_SCL=0 
_SECURE_ATL=0

These changes were made to the core OpenAccess packages, the plug-ins, oaLang, oaLefDef, oaSpef, oaStrm, and oaVerilog.

OpenAccess Translators

Enhanced Via Support in Stream Translator

The oa2strm translator now produces a more compact AREF-based representation of vias with large cut arrays. The strm2oa translator will also recognize such a cell as a standard via.

Refer to How Vias Map in the Stream to OpenAccess Mapping document for more information.

Optionally Building LEF/DEF Translators

If you want to build the LEF/DEF translators (which is optional), the lefdef5.7-s001 (or later) toolkit is now required.

oaLefDef API Addition (for Derived Translators)

API Change Reports

View a summary  of the OpenAccess 22.04.007 release changes with respect to the 2.2.6-p062 source code and documentation release.

Fixed Problems
ITS Issue
ITS974 Reconnection of a modInstTerm incorrectly modifies the net attached to an unrelated term.
  Moving a figGroup corrupts the member wire data.
  Opening a design throws an exception with the message: "Attempt to open a design that is being purged".
ITS1021 An unexpected exception occurs while creating an instTerm on an instance that previously had instTerms connected by position.
  A segmentation fault occurs after performing several undos following symmetry routing.
  oa2lef crashes when the -noTech option is used.
  oa2strm ignores the -charLimit option to conform to 32 character structure names.
  Deleting a shape deletes the marker attached plus another.
  Destroying a bundleNet with a busBit member that is also in a bus does not reset the bit isInBundle flag.
  An earlier fix in strm2oa introduced conflicts in an ITDB implementation.
  Creating a group, moving the group, and then performing ungroup causes a crash.
ITS1037 Creating an oaFigGroup using an oaSimpleName causes a segmentation fault.
  Moving a pin after routes are deleted causes a crash.
  An oaRoute data consistency issue causes an exception when opening a DM3 database using OpenAccess DM4.
  Calling oaDesign::hasConstraintGroup or oaTech::hasConstraintGroup on a corrupt database that has no constraint groups, but has the oaDesign::hasConstraints flag set, causes a crash.
  Calling oaRoute::isContiguous on a database with unbound ViaDefs causes a crash.
  oaFigGroupMem::getType() returns oacUnknownType.
  Adding a via to a route during an undo operation causes a crash.
  Opening a DM3 database in OpenAccess DM4, when the database includes custom constraints that match the DM4 built-in constraints, deletes the custom constraints.
  Copying an instance results in a crash.
  OpenAccess does not throw an exception when an application compiled with version 22.04.001 or later is run with an older shared library.
  stream2oa and oa2strm incorrectly translate the width of 45 degree path segments.
  Saving a design with a pathname greater than 500 characters causes a crash.
  When copying a via from one design to another, the bBox of the copy does not match the bBox of the original.
  A sequence of bus->setBaseName calls results in an oaInternalError being thrown.
  oa2strm generates an excessive number of STRNAMES for custom vias.
  defout incorrectly translates the variants of custom via pcells.
  Array bounds read during a region query cleanup process.
  Destroying an instance with an unbound textOverride causes a crash.
  In OpenAccess version p049 or later, opening a design database with all of the following characteristics results in a crash:
  • The database does not contain any oaAppObjectDefs.
  • The database does contain oaAppDef data.
  • The database was saved by a shared library between OpenAccess version p028 and p048 inclusive.
  Initializing region query on a design that has only module instances causes a crash in region query.
  Binding to a master previously defined as a super master causes a crash in region query.
ITS771 The order of deletion of an object's contents causes problems with observers.
ITS964 A crash occurs when an oaOccNet from the module view is connected to a global net at the higher level.
ITS973 An undo/redo operation discards empty checkpoints.
ITS1056 An undo operation reverses the order of ordered group members.
ITS1016 The oaPath::getBBox() function returns an incorrect result
  Destroying an oaBundleNet with a busBit member that is also in a bus can lead to corruption of the design data.
  The strm2oa translator creates dbuPerUU conflicts when the -techRefs option is specified.
  If an oaFigGroup contains an oaRoute as well as the shapes in that oaRoute, moving that oaFigGroup moves the shapes incorrectly.
  The following exception is thrown when opening a saved design: "Attempt to open a design that is being purged."
 

A crash occurs during an undo operation because oaObserver<oaMarker>::onPostModify returns an invalid marker.

  The oa2lef translator crashes when the -noTech option is supplied.
  The oa2strm -charLimit option is not working correctly.
  When an oaPathSeg that has one marker is deleted, two markers are deleted instead of one.
  The oa2strm translator fails to find a referenced cell that is present.
  Calling oaModInst::find() with a hierarchical name can cause a segmentation fault.
 

If you get and then delete an existing oaInstTerm, then attempt to create a new oaInstTerm, an exception regarding an invalid object is thrown.

  The second call to oaLibDefList::openLibs() on the same libraries results in a crash.
 

The oa2strm translator issues warnings for the path length being less than half the path width in cases where this rule does not apply.

  When issued on a multi-bit terminal, the oaModInstTerm::create() function fails on designs that instantiate 1024 design masters.
  The oaValue::set function should trigger a useful observer notification.
  The oaPhysicalLayer::getLayerAbove() and getLayerBelow functions should support the use of incremental technology databases.
  None of the attributes on an oaBlockage are copied when the oaBlockage is copied.
  The oaDerivedLayer::create and find functions should recognize that two oaDerivedLayerParamArrays that contain the same entries in different order are equivalent.
  The def2oa translator should issue an error message for a single layer via in the DEF file.
  If you issue oaDesign::destroy on a design in a read-only directory, the resulting exception is misleading.
ITS1022 The oa2strm -blockageType option should refer directly to the Stream data type instead of the OpenAccess purpose.
  The lef2oa translator needs a better algorithm for merging shapes.
  The OpenAccess Stream translators should issue warning messages for PATHS whose length is less than twice their width.
  The strmIn package (used by derived Stream translators) should contain virtual functions for library creation.
ITS994 The strm2oa translator creates invalid BBoxes for zero-width paths.
  The oa2lef translator fails to properly sort MACRO definitions with EEQ properties.
  The oa2def translator should prefer SOFT over PARTIAL values.
  In certain editing sequences, a crash might result after undoing operations that involve modifying the set of objects associated with a route.
  The scalarize operation fails to add top-level bit terms to the block domain.
  The oa2strm translator provides an unclear warning message related to the -rectAsBoundary option.
ITS941 The strm2oa translator does not provide appropriate warning messages for certain DBUPerUU issues.
  The lef2oa translator crashes if the LEF file constrains ENCLOSURE rules to TYPE MASTERSLICE (POLY) layers.
  Provide a virtual function for error messages in oaStrm (to support derived translators).
  The oaModule::detach() function should respect the isInterface attribute of the term.
  Provide functions that can detect the data model revision and the features present in a database.
  The physical-only power and ground terminal should not appear in the module hierarchy after calling the embed() function.
  The oaValue::isEqual function returns false when comparing equivalent 1D or 2D table values stored in different databases.
  The oaDMData::getTimeStamp function causes a core dump.
  For objects that span multiple databases, such as oaViaVariants or oaGroups, the isDesign(), isTech, isDM(), isWafer(), and isSession() functions do not return the correct value.
  When an object is modified, oaMarkers are erroneously deleted.
  The oaBundleNet and oaBundleTerm create() functions do not reset the implicit state.
  A SEGV occurs in oaLibDefList::save when issued for a read-only directory.
  For a design that has more oaVias than oaViaHeaders, copying an oaStdVia whose index is higher than the number of oaViaHeaders can result in a crash.
  The oaDesignData::releaseFileLock function check should check whether or not the file/object exists before proceeding (if the file/object does not exist, the function should do nothing but return successfully).
  If you destroy an oaFigGroup that contains oaFigs (some of which are also members of a group), then get the parent block's bBox, a crash occurs.
ITS917 Need a better error message regarding required write-access to the library folder when using the Turbo DM system.
  If you create an oaPRBoundary in a design with an oaCoreSpec that includes an oaSiteDefName of a site that is not bound, the name of the oaSiteDef is overwritten by a call to oaPRBoundaryTbl::getCoreBoxSpec().
  Attempting to add more than about 32,000 cells to a library (using the FileSys DM System) results in an error.
  Opening a database that contains oaViaHeaders but no vias results in crash.
  The strm2oa translator should throw an error when the cellMap and refLibList arguments are present, and the mappedLibName is the same as the targetLib in the inputs.
ITS655 Remove the obsolete oacLibNameDoesNotMatchPath exception.
  The OpenAccess LEF translators should preserve an ANTENNAGATEAREA value of zero.
  Applying oaFig::destroy() to a via has poor performance.
  The lef2oa translator crashes when updating a technology database that has unbound referenced technology databases.
  If you delete a member from an ordered oaGroup, the perform an undo operation, the original order is not restored.
  When a via that is not bound to an oaViaDef is copied between designs from the same library, a crash results.
ITS977 The internal oaStartDaemon function should use _exit.
ITS975 In the CDBA namespace, oaName(ns, ">") results in a crash.
ITS981 After creating an oaPath of style round with a width of zero or one, getting the boundary returns incorrect results.
  Unexpected block net exists after module domain edits.
  In certain circumstances, an oaStdVia might become bound to an oaCustomViaDef.
  The lef2oa translator should store the VIARULE in the oaViaSpec.
  A crash can occur after multiple undo operations when oaMarkers are set to oacDeleteOnModify.
  The oaNet::isOriginal() function returns an incorrect answer in certain circumstances.
  The def2oa translator should issue an error message if no layer is given in the NONDEFAULTRULE.
  The oaOccInstTerm::getAssignedNet function crashes when there is no oaTermConnectDef.
ITS828 oaTcl Bindings: The oa::help function should show the return value for functions that return collections.
  oaTcl Bindings: The oaLangStatic Visual Studio solution fails for optStatic in oaTclHelp.
  The oa2lef translator does not output busbitchar and dividerchar correctly if LEFDEF_BUSBIT_CHARS and LEFDEF_DIVIDER_CHARS are defined in a library other than the current one (the library from which the translation is being done) in the technology graph.
  There are issues with the strm2oa translator when a cellMap and refLibList are present.
  A SEGV occurs in oaOccInstTerm::getAssignedNet.
  If you run lef2oa on a LEF file with separate above and below enclosures, then run oa2lef to output the design, both enclosures on the first cut layer are defined as "ABOVE".
  Steiner connection route is incorrectly deleted.
  The oaVectorInstBit::find function fails to find single vector instance bits.
  A failed oaLib::create() call creates an unnecessary directory.
  Adding a custom constraint to an oaModNet causes an unexpected exception.
  The argument names for functions in the oaAssignmentDef class should be more descriptive.
  The TechDataType enum cannot be constructed from an oaString for the oacTechDataType enum value.
  When an oaDot is transformed using an orientation that flips the x and y coordinates, the dot's width and height are not properly updated.
  The oaOccTraverser crashes when it encounters an oaDesignInst with no module.
  Destroying one marker destroys all the markers of the block.
  OpenAccess should reduce dynamic allocation in a multi-threading environment.
  Incorrect behavior for oaMarkers when set to oacDeleteOnModify.
ITS887 After removing an existing buffer, then adding a new buffer, an unexpected exception occurs during oaInstTerm::addToNet.
ITS892 There is a problem with bundleNet bitNets after a uniquify operation.
  An observer notification should be issued when a constraint group member (oaConstraintGroupMem) is reordered.
  oaModule::detach crashes while deleting a block net (after importing the data from Verilog and DEF).
ITS962 An autonamed terminal is not correctly returned by oaInstTerm::getTermName.
ITS949 The oaShape modify observer should come before the preDestroy observer.
  The lef2oa -layerMap option should issue an error for a bad file name.
ITS886 OpenAccess should store DEF BLOCKAGE DESIGNRULEWIDTH.
  A crash occurs in the preDestroy observer for an instance terminal.
  Creating shapes in a master causes an infinite loop if there are oaFigGroups in a parent that contains an instance of the master (related to region query).
ITS803 The lef2oa translator does not import MINIMUMCUT LENGTH/WITHIN.
  Improve the verilog2oa error message if a reference library is not found.
  The oa2spef translator expands the occurrence domain unnecessarily.
  The oa2spef translator should not perform name mapping if an instance, terminal, or net name is shorter than the index.
ITS957 Accessing an oaAppValue oaParam without setting its type causes a crash.
  A crash results from iterating through empty groups.
  When a net is destroyed, the attached oaAppDef is deleted before the oaNet::preDestroy observer is called.
  Enhance lef2oa and def2oa messages about ignoring syntax not supported by the current dataModel revision number.
  The lef2oa translator should issue a more informative warning message when a lib.defs file does not exist.
  Need ability to automatically delete an oaMarker when one of its attached objects is deleted or when one of its objects is modified.
  The oa2lef translator should translate IO pads to CLASS PORT pad properties in the output LEF file.
  A SEGV occurs when performing oaDesign::save for a very large database (4 Gbytes) with many shapes.
  When a lib.defs file has syntax errors, calls to oaLibDef::create or oaLibDefList::save can corrupt the lib.defs file.
  The OpenAccess P044 code that upgrades the global net data can cause illegal memory writes.
  The oa2def translator fails when translating incorrect SCANCHAIN information.
  OpenAccess Tcl bindings: UserBox::init sets the upper right corner of the box to 0,0 rather than negative infinity, which results in incorrect bBoxes for pointArrays with negative coordinates
  The oaSegment::intersects function fails to return true for intersecting segments in which the heads and tails are reversed -- for example: oaSegment(pt1, pt2) and oaSegment(pt2, pt1) are not reported as intersecting.
ITS885 If you call oaBlock::initForRegionQuery(), create a rectangle with a non-zero bBox, close and restart the session, and get the bBox (without calling initForRegionQuery), the bBox is now zero.
ITS851 OpenAccess Tcl bindings: A crash occurs during UserPointArray::compress.
  OpenAccess Tcl bindings: An oaBox object is not recognized when passed as a parameter in Tcl.
  OpenAccess Tcl bindings: Lists specified with {...} are not handled correctly.
  OpenAccess Tcl bindings: Need to support a pointArray as a list of lists.
  OpenAccess Tcl bindings: An oaIntRange type should be recognized as an oaRangeBase type.
  OpenAccess Tcl bindings: A crash occurs during oa::BoxArray append.
  The oa2def translator should output the Noshield route status for an unshielded net segment.
  The strm2oa translator should let you import more than two views of a cell.
ITS907 The isModified flag for databases should be maintained correctly regardless of the number of undo or redo operations committed after a save operation.
 

The second call to oaLibDefList::openLibs() on the same libraries results in a crash.

  Issuing oaInst::setMaster on an instance master with no parameters results in a crash.
  If purging a design, OpenAccess should not attempt to bind instances, but should return the currently bound header or none if not bound.
  Binding a Pcell to its master results in a crash if the parameters on the Pcell do not match those on the super master design.
 

The oa2strm translator fails to translate oaVectorInstBits and oaVectorInsts to srefs in the output Stream file.

  A crash occurs when using the CDBA namespace (oaCdbaNS) if an input bundle name is not terminated with a less than ( >) character.
  Destroying an oaFigGroup and updating the Bbox results in a crash.
 

The lef2oa translator does not import RANGE-RANGE statements into the foundry constraint group.

ITS1013 Format string and argument mismatch result in an oacFileTruncateFailed error.
ITS972 The def2oa translator crashes when an oaCustomViaDef references a library that is not present.
ITS956 A crash occurs in oaViaHeader::getBBox.
ITS923 oaDesign::revert() crashes if the design was implicitly opened.
ITS906 An oaCellView destroy operation segfaults in unpredictable situations.
Incomplete Status

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 be supported.

Return to top of page