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

OpenAccess 22.04.044 Release


Contents

Version 22.04.044 Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 has been incremented to 42.

Changes and New Features

oaLefDef API Changes (for Derived Translators)

View a summary of the oaLefDef changes for derived translators.

API Change Reports

View a summary of the OpenAccess 22.04.044 changes with respect to the 22.04.042 release.

Fixed Problems
Si2 ITS Issue
  The oa2def translator is exporting an incorrect STYLE statement.
  The oaModule::embed() API creates incorrect connectivity if the source design contains auto-named oaTerms from net threading.
  The strm2oa translator is unable to perform via detection using a read-only technology database.
1026 The oaModule::embed() API does not return if there is a module name collision
  The oa2strm translators should not export unreferenced vias.
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 supported.

Version 22.04.042 Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 remains 40.

Changes and New Features

Updated Makefile Targets

The makefile targets for compiling on UNIX Platforms (Solaris, IBM, and Linux) have been updated.

Previously, these targets were used when building the entire distribution (OA core packages and translators):

In addition, these targets were used when building only the OA core packages:

The makefile target names have been changed to be more consistent.

Starting with this release, these targets are used when building the entire distribution (OA core packages and translators):

In addition, these targets are used when building only the OA core packages:

The old install_oa, clean_oa and uninstall_oa targets are still supported for backward compatibility. They are equivalent to the install, clean, and uninstall targets.

oaStrm API Changes (for Derived Translators)

View a summary of the oaStrm changes for derived translators.

API Change Reports

There are no API changes in this release.

Fixed Problems
Si2 ITS Issue
  The strm2oa translator should create a customViaDef if a stdViaDef would create incorrect shapes due to round-off errors.
  Connecting two global nets through an instTerm results in an inconsistent net span.
  Getting a collection of cellViews should ignore incorrect master.tag files.
  The strm2oa translator places scaled designs in the wrong library.
  The oaSteiner::addToNet() API causes a crash.
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 supported.

Version 22.04.039 Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 remains 40.

API Change Reports

There are no API changes in this release.

Fixed Problems
Si2 ITS Issue
  The lef2oa translator should issue an error for invalid MACRO boundary.
  The oa2strm translator does not export oaEvalText text objects.
  The strm2oa translator should issue a warning for a negative magnification value.
  Truncate the paged parasitic database when all parasitic networks are deleted.
  The strm2oa translator should create an oaStdViaDef for vias with rectangular via cuts.
  The oaDesign::save() API should validate the data written.
  A crash occurs when embedding a module that contains a pcell instance
  A crash occurs when detaching a design containing global nets
  After opening large number of partially read designs an exception in oaDesign::open causes a crash
  oaDesign::open() should validate the structure of the on-disk database file
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 supported.

Version 22.04.037 Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 remains 40.

Changes and New Features

oaLefDef API Changes (for Derived Translators)

Optionally Building LEF/DEF Translators

If you want to build the LEF/DEF translators (which is optional), The lefdefInt05.70-s031 kits contain the latest bug fixes for UNIX platforms. For Windows, the latest kit is lefdefInt05.70-s031.

Prerequisites for Compiling LEF/DEF Translators on Windows

In order to compile the LEF/DEF translators, you must now set the OA_DEP_LIBS environment variable to point to the directory containing your LEF/DEF parser kits (lefdefInt). The default version of the LEF/DEF parser kits is specified in <install_dir>/build/MSVS/dep.vsprops. Modify this file if you need to override the default version.

Note: The OA_DEP_LIBS environment variable overrides any LEFDEF_HOME environment variables.

API Change Reports

There are no API changes in this release.

Fixed Problems
Si2 ITS Issue
  An internal file is left behind if a design is closed after saveAs has been called.
  An unexpected slow down occurs in string and name operations.
  The oa2def translator crashes if there is an empty non-default rule in the design.
  Calling design open using a superMaster name and parameters returns an unexpected subMaster.
  An instance of a pcell superMaster with no parameters causes the toplevel design to be marked modified.
ITS1097 The TCL oaBox::getWidth API returns a truncated result.
ITS1106 Scalarizing a multi-bit instTerm on a vecorInst and editing the connectivity causes a crash.
  Performing an undo operation after defining a superMaster causes a crash.
  Importing LEF with complex overlap layer geometry causes lef2oa to hang.
  oaBlock::initForRegionQuery causes an out of memory exception on the AIX platform
  Using an invalid oaLibDefList, oaLibDef, oaLibDefListRef or oaView pointer causes a crash, rather than an exception.
  The stream2oa translator wrongly creates a standard via for a non-via master
  The documented string value of oacAlignmentTypeConstraintParamType is incorrect.
  Querying a group's definition while a design is being loaded results in an assertion error
  The span of a net is split incorrectly after reconnecting an instTerm.
  Importing LEF with a PREFERENCLOSURE statement without an ENCLOSURE statement results in a crash.
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 supported.

Version 22.04.034 Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 has been incremented to 40.

Changes and New Features

OpenAccess Change Management System (CMS)

Note: This functionality is in beta status. The APIs are not guaranteed to be drop-in or compile-time compatible.

EDA flows often send data between different applications using batch interactions with on-disk files. However, as design and manufacturing issues become more complex and interdependent, a tighter and more incremental integration is needed between many analysis and optimization engines.

OpenAccess now provides a foundation for communicating design data that enables fine-grained collaboration between multiple processes operating on the same design. OpenAccess defines a plug-in based infrastructure that lets software developers create plug-ins for incremental data exchange between cooperating applications. Schema definitions are provided for all the managed objects in OpenAccess to support the data exchange. The complete infrastructure is called the OpenAccess change management system (CMS).

OpenAccess does not provide any production CMS plug-ins, and it does not specify a format for the data to be exchanged. The infrastructure described here requires an application to have access to CMS plug-ins provided by a 3rd party. For information about creating such plug-ins, refer to How to Write Change Management System (CMS) Plug-Ins.

Incremental Data Exchange

The OpenAccess CMS infrastructure provides a standard way for an application to select and configure the plug-ins used to exchange data between applications. The application is not required to have built-in knowledge of any individual plug-in. The application need only know how to follow the protocol specified by the OpenAccess API to provide the plug-in names and other configuration details that are known to the user.

The following example shows two applications using the OpenAccess CMS infrastructure to exchange information about incremental changes to a given design.

An end user of Application 1 starts the process by issuing a command to begin recording changes to the designs. At this point, the tracking plug-in can prompt the user to specify what sort of data should be tracked and what format should be used for recording the changes. The tracking plug-in creates a change set, which is a container for individual changes. The tracking plug-in adds each individual change, known as a change record, to the set and continues with this until the user issues a command to end change tracking.

When it is time to export the data for use by another application, the end user issues a command to initialize the appropriate export plug-in and export the changes. The export plug-in produces a file in a predetermined format that contains the information about the changes.

In application 2, the end user initializes the import plug-in and issues a command to import the changes. The import plug-in verifies that the changes are safe to apply, then applies them to the in-memory representation of the design.

Application 2 can also modify the design and export the changes back to Application 1.

For more information about CMS and the associated APIs, OpenAccess schema definitions, writing CMS plug-ins, and observers related to CMS, refer to the following documents.

Remastering Design Instances

OpenAccess now lets applications remaster all the instances of a design with one function call:

static void oaInstHeader::setMaster(oaInstHeader          *header   
                                    const oaDesign        *master,   
                                    const oaParamArray    *parameters = NULL);

Where:

After a remaster operation, the original oaInstHeader is destroyed and the oaInstHeader for the target oaDesign is used to group the instances. When the source or target master is a Pcell, OpenAccess must perform some conversions between parameters and properties as part of the remaster operation. For more information, refer to Remastering Instances in the Support for Pcells document in the Programmers Guide.

Note that the oaInst::setParams and oaInst::setMaster functions have been modified to use the parameter and property conversions described in the above document. The oaInst::setParams function will throw an exception if the provided parameters do not match those of the superMaster.

OpenAccess Documentation Now Includes Flash Animations

The OpenAccess documentation now includes Flash animations. The Remastering Instances section of the Support for Pcells document in the Programmers Guide includes two flash animations that explain the results of remastering design instances to Pcell superMasters.

New oaAppProp::setAppType Function

A new oaAppProp::setAppType function sets the application type for a property. The application type is interpreted by the application, not OpenAccess.

New Observers for Undo and Redo Operations

Two new classes provide observer notifications for undo and redo operations:

New Observer Notifications of Existing ModTypes

There are several new notifications of existing modTypes to provide previously missing behavior:

The oaGuideModTypeEnum now includes:

The oaShapeModTypeEnum now includes:

The oaViaModTypeEnum now includes:

New Values Added to oaLayerModTypeEnum

The following values have been added to oaLayerModTypeEnum:

One way in which these values might be used in the future is for issuing observer notifications when setting parameters on a derived layer.

Note: The oaDerivedLayerModTypeEnum is now deprecated.

New oaTechConflictType Enum Wrapper Class

The oaTechConflictType class is an enum wrapper class for oaTechConflictTypeEnum values.

New Translator Features

New Option for Specifying a Named LEFDefaultRouteSpec

Previously, the lef2oa translator issued an error when attempting to create a technology database with a LEFDefaultRouteSpec constraint group that referenced another technology database with its own LEFDefaultRouteSpec constraint group. The current version of lef2oa has been enhanced to better support incremental technology databases.

The lef2oa translator now checks whether or not a LEFDefaultRouteSpec constraint group already exists in the graph of techs. If it does exist, lef2oa generates a constraint group of the constraintGroupDef type LEFDefaultRouteSpec with a name in the format of LEFDefaultRouteSpec_<libName> and provides a message to the user. 

In addition, the translator provides a new option for specifying the name of the LEFDefaultRouteSpec that will be generated. The new option is as follows:

 [-defaultRuleName name] 

Note: If a constraint group named LEFDefaultRouteSpec already exists in a technology database being modified, the translation fails unless the -overwrite option is used. Also, the oa2lef translator looks for the LEFDefaultRouteSpec in the current technology database by constraintGroupDef type first. If not found, the translator looks for a LEFDefaultRouteSpec by name.

Refer to LEF to OpenAccess Translator (lef2oa) for more information.

Information for Derived Translators

oaVerilog API Changes (for Derived Translators)

The CallbacksIn class member functions fitNet() and widthWarning() are revised to provide more details about the source of a warning or error. The Error class is extended to store the context of errors and warnings so applications can use the context for improved error handling.

Refer to Summary of API Changes for more information.

oaLefDef API Changes (for Derived Translators)

Optionally Building LEF/DEF Translators

If you want to build the LEF/DEF translators (which is optional), The lefdefInt05.70-s031 kits contain the latest bug fixes for UNIX platforms. For Windows, the latest kit is lefdefInt05.70-s031.

Prerequisites for Compiling LEF/DEF Translators on Windows

In order to compile the LEF/DEF translators, you must now set the OA_DEP_LIBS environment variable to point to the directory containing your LEF/DEF parser kits (lefdefInt). The default version of the LEF/DEF parser kits is specified in <install_dir>/build/MSVS/dep.vsprops. Modify this file if you need to override the default version.

Note: The OA_DEP_LIBS environment variable overrides any LEFDEF_HOME environment variables.

API Change Reports

View a summary of the OpenAccess 22.04.034 changes with respect to the 22.04.028 release.

Fixed Problems
Si2 ITS Issue
  Add OA LEF translator support for NWELL/PWELL masterslice layers

ITS1135, ITS1107

Reconnecting an unbound oaModInstTerm results in incorrect net spans
  The detectVias option converts a single cut via to a 2x2 cut via.
  Cannot create a constraint group using the LEFDefaultRouteSpec constraintGroupDef
  The oa2def translator outputs an incorrect rectangle from a polygon blockage.
  If an application opens a design, file permissions are changed, and then oaDesign::revert is called, an exception is thrown and the application crashes.
  The strm2oa translator should issue an error if an on-disk customViaDef master defined in the techDB is not available
  The lef2oa translator fails to create a cell if the techDB is read only
  The stream2oa translator fails while importing data using the layer map option
  A design database cannot be reopened in append mode after it is saved.
  OpenAccess incorrectly issues an oacCannotRepairCorruptedAppData exception when opening a design.
  Destroying a marker associated with a via during a route destroy operation causes an application crash if the route destroy is followed by an undo operation and then followed again by a route destroy.
  Opening a design in read mode, changing the on-disk data, and then calling reopen() in append mode now causes an exception.
  oaLayerArrayConstraint::create() uses the wrong layer numbers when creating the oaLayerArrayConstraint header.
  oaOccInstTerm::getAssignedNet() incorrectly adds oaConnectDefs to the net specification in the module domain instead of adding these in the occurrence domain.
  Apply NFS file locking fix to all LINUX platforms.
  Crash in FileLocking::getLoginName.
  Need to provide a preModify observer for the creation of a new oaFigGroupMem.
  OpenAccess should allow oaAppDefs to be set on oaSubNetwork object types.
  After creating an oaModModuleScalarInst in the top module, which is the only module in the design, performing an undo/redo results in a crash.
  Destroying an oaGroupDef leaves an invalid reference in oaHierGroupDef if the oaGroupDef is valid in the oaHierGroup.
  An observer notification enum value is missing for the oaDerivedLayerModTypeEnum.
  A user-defined oaHierGroupDef becomes oaFlatGroupDef when saved to disk.
  The collection of oaOccInstTerms in an oaOccurrence does not contain the block-domain override of a hidden instTerm.
  The lef2oa translator generates ERROR (OALEFDEF-50109) when the input LEF file has the DEFAULT keyword.
ITS1058 A net declared as both an output port and a supply0 net loses the "supply0" assignment during a verilog2oa/oa2verilog round trip.
  Improve the oa2strm error message that results when oaDesign::open fails because the Pcell evaluator cannot be found.
  Improve the verilog2oa error messages that result when module instance names are not unique at module scope.
  Improve the verilogAnnotate error message that results if the position of an explicit terminal cannot be set.
  Improve the reference translator error messages to be more explicit and to include more information about what failed, why it failed, and possible means for resolution.
  Scaling a shape can make its points coincident.
  Calling oaModule::detach or oaModule::embed causes a crash if an instTerm in the module does not have a net connected.
  verilog2oa crashes if the -refLib option specifies a library that does not exist.
ITS1059 Block nets are not merged after a call to oaModTerm::moveToNet.
  oa2strm -ver 3 incorrectly handles any-angle paths with variable extensions.
  oaInstTerm::create() should throw an exception when the design needs to be uniquified.
ITS1068 Net equivalence is lost after a module is embedded.
ITS1088 The oaNet::isValidName function causes a valid oaBusNet name to become invalid.
ITS1095 If a Verilog module is instantiated before it is defined and it has bussed ports, a round trip using the OpenAccess Verilog translators removes the connectivity for single-bit bus pins.
  The verilog2oa translator does not correctly handle a global net in a bundle.
  The comments in the oaOccTraverser.h header file are out of date.
  The design setTopModule() function causes an internal error in oaHashTbl<>::add().
  Need to edit the oacCannotCreateBlockOnlyInModuleDesign message.
  The oaBlock::destroy function does not delete oaFigGroups.
ITS1121 The oaParasiticNetwork::destroy() function crashes if the specified design does not contain any parasitics.
 

The oaOccNet::getSpan function does not return all the span members for global nets.

  oaModule::embed throws a false oacImplicitModuleNetExists exception.
  After calling oaDesign::revert, a crash occurs due to a problematic entry in the unboundHeaderList.
ITS1166 Template declaration problem with base/oaHashSet.inl
  Improve oa2strm warning message regarding using -ver instead of -rectAsBoundary.
  Some sequences of oaModNet::destroy operations involving global nets can cause inconsistencies in the global net span, which can result in unpredictable behavior.
ITS1019 oaDesign::getOpenDesigns returns designs that are destroyed, and calling oaDesign::close or oaDesign::purge on the invalid designs causes a crash.
  In Verilog, if ports of an instance are connected to a signal by position rather than by reference, the instTerms are not bound.
  Destroying a module does not reset the oaDesign::hasSymmetricConnectivity flag to true when the design has only one top module and the block domain is visible in the module domain.
  Loading a design that has an oaConstraintDef with the same name but conflicting value types, as compared to the oaConstraintDef in the current session, can cause observer notifications to be issued with invalid objects as arguments.
  Destroying a global oaModNet in the top module when there are other nets in the global span can cause a segmentation fault.
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 supported.

Version 22.04.028 Release

This is a full release that includes binary files as well as source code and documentation. This release is the first to contain binaries for the IBM AIX 5.3 platform (IBM 5.1 binaries are no longer included).

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
***With the move to the AIX 5.3 compiler, the location of the optimized AIX libraries is changed from <install_dir>/oa/lib/aix_51_32/opt to <install_dir>/oa/lib/aix_53_32/opt. As a result, the runtime environment variable LIBPATH must be updated to reflect this change because this variable is also used to locate the plug-in registry files at runtime.

If you build the LEF/DEF translators, refer to Prerequisites for Compiling LEF/DEF Translators on Windows.

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 has been incremented to 39.

Note that applications compiled on AIX that used OpenAccess versions prior to 22.04.021 must recompile their applications if they use 22.04.021 or later. This requirement is due to the switch to the AIX 5.3 compiler. Applications must also change their library search path to pick up the 5.3 shared libraries.

Refer to the Autosave and Critical-Save section for a potential compatibility issue related to new oaDMFiles in the oaCellView container.

Changes and New Features

oaPurpose Reserved Types

The OpenAccess built-in purposes have a corresponding range of purpose numbers, which are from 0xffff0000 to 0xffffffff, inclusive. Applications cannot create custom purposes that use purpose numbers in this reserved range. If an older database is loaded by an application that uses shared libraries based on data model 4 or later, any missing built-in purposes are added.

In previous releases, if an older database included a user-defined purpose that used a reserved purpose number, and that database was read by newer OpenAccess shared libraries, all user-defined purposes in the reserved range were removed from the database. In the current release, only the specific user-defined purpose with the conflict is removed.

New oaBundleNet and oaBusNetDef Members

oaBundleNet::getOccMembers, oaBusNetDef::getOccBusNetBits, and oaBusNetDef::getOccBusNets functions enable applications to get a collection of nets in a lower level of hierarchy using a path name in the block domain. In addition, existing functions are enhanced to support:

New oaNet::create and oaNet::find Function Behaviors

Previously, the create functions threw an exception if an hierarchical name was supplied. Now, create functions succeed if given an hierarchical name. The behavior of find functions is also changed. Previously, if find was called with an hierarchical name, NULL was returned even though the name matched an oaOccNet that was in the span of a net reflected in the block domain. Now when an hierarchical name is supplied, if there is an oaOccNet with the given name, find returns a pointer to corresponding oaNet in the block domain. The name that is returned may not be the same as the name that is supplied. For example, if oaScalarNet::find(const oaBlock block, const oaScalarName name) is supplied an hierarchical name that identifies an oaOccScalarNet in the occurrence domain, the specified name is considered an alias, and the corresponding oaNet of the oaOccNet is returned.

New oa2strm Translator Option

The oa2strm translator now provides a -textHeight option to specify the text height for labels.

oaStrm API Changes (for Derived Translators)

Due to API changes in the oaStrm package, derived Stream translators must adapt their code and recompile. The oaStrm API changes are summarized as follows:

View a summary of the oaStrm changes for derived translators.

Optionally Building LEF/DEF Translators

If you want to build the LEF/DEF translators (which is optional), The lefdefInt05.70-s025 kits contain the latest bug fixes for UNIX platforms. For Windows, the latest kit is lefdefInt05.70-s019.

Prerequisites for Compiling LEF/DEF Translators on Windows

In order to compile the LEF/DEF translators, you must now set the OA_DEP_LIBS environment variable to point to the directory containing your LEF/DEF parser kits (lefdefInt). The default version of the LEF/DEF parser kits is specified in <install_dir>/build/MSVS/dep.vsprops. Modify this file if you need to override the default version.

Note: The OA_DEP_LIBS environment variable overrides any LEFDEF_HOME environment variables.

API Change Reports

View a summary of the OpenAccess 22.04.028 changes with respect to the 22.04.021 release.

Fixed Problems
Si2 ITS Issue
  The oaInstTerm::removeFromNet() function should disconnect implicit members even when the owner is not connected.
  Byte swapping issues in oaVarMemTbl<oaManagedType> on the Solaris and AIX platforms.
  When getting a pCell subMaster, observers are invoked before the relationship between the subMaster and its superMaster is established, so that calls to access the superMaster from the subMaster from within the observers results in crash.
  If you remaster an instance, then perform an undo/redo operation, a crash occurs.
  Incorrect oaConstraintGroup::create documentation.
  In the FileSys DM System, a crash occurs when attempting to save a design after the cellview directory has been deleted and recreated for a different cellview.
  The strm2oa translator does not handle the layers in the layerMap.
  The strm2oa translator creates an incorrect bounding box if the input has magnified or rotated instances.
  The oa2strm translator should provide an option to specify the textHeight for labels.
  Net::destroy() crashes when a block net whose owner is not visible in the block domain is downgraded.
  A net in a global net collection is not found during a partial read.
  When setName() is called on a global net, or on a global span of nets, the span is not recalculated and a set of unrelated nets can be constructed on the span without using terms or instTerms.
  The oaOccNet::getGlobalNets() function does not include the member in the top occurrence.
  The oaNet::destroy() function destroys implicit nets in the span of the net.
  The oa2def translator should output NONDEFAULTRULEs for oaConstraintGroups containing only a subset of the required constraints, and it should inherit other constraints from the LEFDefaultRouteSpec.
  OpenAccess Tcl Bindings: The output varies based on platform and bit for oaTimeProps and oaTimeRangeProps.
  The oa2lef translator should filter out vias that use fewer than three layers.
  The strm2oa translator should automatically detect vias.
  Avoid creating on-disk directories for oaStdViaDefs detected by the strm2oa translator.
  If the DBUUserUnit for the hierDesign viewType is not set in a read-only technology database and the user specifies a different value in the LEF file, the lef2oa translator issues a warning that the technology database is not writable.
  During the creation of an AREF, if the cell is recognized as a custom or standard via, the strm2oa translator crashes.
  Setting a value on an oaConstraint and then issuing an undo command results in a crash.
  The spef2oa translator crashes if an entry is missing from the NAME_MAP section.
  A crash occurs in oaLayerConstraint::find() when using incremental technology databases.
  oaDesign::save(oacAutoSaveType) and oaDesign::recover should not increment the design timeStamp.
  In the FileSys DM system, a race condition can occur that results in the creation of two unique locks for the same file.
  Should provide access functions for the tmpCell and tmpView for derived Stream translators, and delete the "strm2oa_tmp" directory after a Stream translation is complete.
  strm2oa reports an error if the tech is read-only and a layer purpose pair defined in the layer map file has no corresponding LPP data in the Stream file.
  An internal error occurs if an oaRefHeader is modified and two oaRef objects bound to this header belong to different oaFigGroups that share the same oaFigGroup ancestor.
  An abnormal application termination can create a stranded lock file, which can cause a lock file recovery failure causing oaFSLockD to exit.
  If a bundle net is created using oaNet::create() with the global parameter set, an oaOccNet::isGlobal() call returns false.
  The oaBlockage API documentation is incomplete regarding the density value.
  If a cellview is opened in 'r' mode and closed, then reopened in 'a' mode, edited, and then undo steps applied to restore the design to its state when it was reopened, the cellview is lost when closed.
  Block preferred equivalent nets are not managed correctly when they are deleted.
ITS1031 The documentation (and implementation) for the oaVCVersionIter member function are incorrect (the returned value must be checked against NULL to detect termination of the iteration).
ITS1032 The oaDMFile::getVersion function crashes.
ITS1028 oaLib::getControlledObjects fails with an internal error (VC plug-in issues).
  Unexpected behavior occurs when destroying an oaFigGroup that was a copy of an oaFigGroup with an oaConstraintGroup.
  The oaLib::close function crashes if called after the FileSys library files were deleted from disk.
ITS1030 The oaDMContainer::getVCStatus function returns a NULL iterator, which causes oaDMObjectStatusRefIter::getNext to crash.
ITS1029 The oaLib::getWorkingVersions function crashes.
  oaPurpose upgrade is too aggressive with respect to purpose numbers that fall within the reserved range
  Deleting the start or stop object of an oaScanChain leaves it in an inconsistent state.
  OpenAccess should throw an exception when attempting to open a design database that is in an inconsistent state.
  Using the strm2oa -detectVias flag should not require write access to the technology database if the vias already exist.
  Spelling error in oacBlockageSpacingWidthExclusive message.
  Need a virtual strmIn::isTechModified function for derived Stream translators.
  The oaDesign::calcVMSize function crashes if the top block of the design does not exist.
  The oa2def translator crashes when encountering unbound oaConstraintGroup headers (instead of issuing an error message).
  When an oaStdViaHeader is unbound in the design, oa2lef should throw an exception instead of crashing.
  Exception while hiding an oaInstTerm connected to an equivalent net of a power/ground sigType.
  When copying a via with an unbound oaStdViaHeader or oaCustomViaHeader that is a superMaster, OpenAccess should ensure that the correct parameters are used.
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 supported.

 

Version 22.04.021 Source Code and Documentation Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
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
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
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 has been incremented to 38.

Refer to the Autosave and Critical-Save section for a potential compatibility issue related to new oaDMFiles in the oaCellView container.

Changes and New Features

Supported Platforms and Compilers for OpenAccess Pre-Compiled Libraries

Third-Party Packages

The paths to the external packages Bison, Flex++, Tcl, and zlib used in the compilation process have changed. The new paths are constructed as follows:

  $(OPTDIR)/<package>/v<package_version>[_64]    

Corresponding package version macros have been defined as <package>_VERSION.

For example:

  FLEX_VERSION := 2.5.4a                    
  FLEX_HOME := $(OPTDIR)/flex/v$(FLEX_VERSION)/

The default Tcl version has been updated to version 8.4.6. The TCL_HOME path now defaults to $(OPTDIR)/tcltk/v8.4.6.

Block Domain Overrides

Because OpenAccess automatically maintains the correspondence between the EMH domains, decisions made during the logical specification can restrict the physical implementation, and changing the physical implementation can change the logical specification unless there are mechanisms to break the correspondence.

A global net created in the module domain is, by default, also added to the block domain. Connections that are made to this net are visible in both the block and the module domains. When the net is physically implemented, it might be necessary to implement it as separate but related nets that are logically equivalent but physically disjoint. If the application disconnects the net from an oaInstTerm in the block domain to substitute one of the physical-only nets, the corresponding oaModInstTerm is also disconnected in the module domain, changing the logical representation of the design. In some methodologies, changing the logical design is acceptable, but other design methodologies treat the module and block domains as separable.

To allow implementations of power and ground in the block domain to differ from the logical specification, OpenAccess now provides a means for removing objects in the block domain without reflecting the changes to the module domain. This process of removing an object from the block domain without reflecting the change to the module domain is called hiding.

Designs sometimes require altering the power, ground, and tie connectivity specification that is reflected from the module domain by hiding the corresponding objects in the block domain and effectively removing the objects and connectivity in that domain. Physical-only objects are then created for the power, ground, and tie networks, which do not reflect a corresponding object in the module domain. Physical-only objects can replace the hidden objects and define the physical implementation for connecting the power, ground, and tie networks. The physical-only objects that replace hidden objects are called overriding objects. To create physical-only objects, set the oaBlockDomainVisibilityEnum parameter to oacExcludeFromModuleDomain at creation time.

For more information, refer to Block Domain Overrides and Creating Physical-Only Objects in the Programmers Guide.

New Block Overrides Example

A new block overrides example shows how to perform physical implementation of tie-off nets in the block domain. The program opens a design and replaces all oaTerms and oaInstTerms on tie-high nets with block domain overrides on net vdd. If the net vdd already exists, it is used, otherwise a physical-only version is created. The example is a command line program that takes three arguments for library, cell, and view.

For more information, refer to API Programming Examples in the Programmers Guide.

Change to Supported Connectivity

A connection from a physical-only oaTerm or oaInstTerm to a net across a module boundary is no longer allowed and exceptions are thrown:

Autosave and Critical-Save Now Supported

OpenAccess now provides functionality to support the automatic and critical saving of databases for applications using the FileSys DM System. Applications can support the auto-saving of designs at regular intervals and can provide critical saving of designs when the application crashes (for example, if they trap a kill signal). The application can also recover these autosaved and critical-saved databases.

The following function saves an oaDesign and creates the side files needed for recovering the state of the design.

oaDesign::save(oaSaveRecoverType type)

There are similar functions for oaTech and oaDMData objects. The new oaSaveRecoverType enumerated type provides the oacAutoSaveRecoverType and oacCriticalSaveRecoverType enum values for specifying the type of save that is occurring.

The oaDesign and oaTech classes, as well as oaDMData and its derived classes also have functions to destroy and recover objects based on the oaSaveRecoverType enum value. The oaDMFile class has a function to destroy objects based on the oaSaveRecoverType enum value. In addition, these classes provide functions for gathering information about objects with regards to their oaSaveRecoverType value.

It is the responsibility of the application to decide when to issue autosave or critical-save commands, as well as when to recover the state of a design.

Refer to the documentation for these functions for details.

Compatibility Notes: This functionality adds new types of files within the FileSys cellview directory. In the current release, OpenAccess can filter out these files as well-known (as is the case with temporary files). However, these new files will show up as additional oaDMFiles in the oaCellView container when running with older OpenAccess shared libraries. This is potentially a compatibility concern.

OA_PLUGIN_PATH Environment Variable

Plug-in developers can use a new OA_PLUGIN_PATH environment variable to specify the location of their plug-ins. This environment variable specifies an ordered list of locations that OpenAccess should search for plug-in files. OpenAccess uses the first matching file found. By default, the data/plugins directory is searched last.

Refer to How to Write a Plug-In for more information.

New oaStringArray Class

A new oaStringArray class implements an array of strings.

Boundary Class Functions Accept an oaStringArray of Edge Names

In previous releases, boundary class functions accepted a string array pointer for the edgeNames argument. In the current release, edgeNames can be provided as oaStringArrays. This change is applicable to any oaBoundary or derived class function that accepts an edgeNames argument.

Note that the older versions of these functions that accept a pointer to a string array are considered deprecated.

New oaByteArray Class

The new oaByteArray class implements an array of bytes.

oaAppProp Functions Accept an oaByteArray for Property Values

The oaAppProp::create, getValue, and setValue functions now accept an oaByteArray argument for the property values. Note that older version of these functions that accept a pointer to an oaByte array are considered deprecated.

oaAntennaData Set Functions

The oaAntennaData class now provides set prefixed functions for specifying attributes. For example, setGate() and setDiff(). Note that in previous releases, non const functions such as gate() and diff() were used to specify attributes. These older functions are now considered deprecated.

Const Versions of Functions

Several functions are deprecated in favor of const versions. The affected functions are as follows:

oaTechHeader::getRefLibName() Function Added

Applications can get the simple string name of a tech database in one call using the getRefLibName() function.

New Value Added to oaReservedViewTypeEnum

A new oaReservedViewType enum, named oacSystemVerilogText, is added. An oaViewType of oacSystemVerilogText has the equivalent string representation of systemVerilogText.

Translator Changes

oa2spef Translator Change

The -noInternalCoords option is added to the oa2spef translator to suppress coordinates for internal nodes.

LEF/DEF Mapping Changes

lef2oa Maps Multiple LEF ENCLOSURE Statements to Separate Constraints

The lef2oa translator maps multiple ENCLOSURE statements to separate constraints that are ordered in a precedence constraint group. Each ENCLOSURE statement without WIDTH maps to a separate constraint. However, if two or more statements for the same layer have the same parameters, they map to a single constraint. All constraints with width are stored using an oacDualIntTblValue based on width (in previous releases, constraints were stored using an oacDualIntValue and a width parameter). Constraints without width use an oacDualIntValue.

In the following example a, b and e are set in three separate constraints with an oacDualIntValue. c,d and f are set in the same constraint with an oacDualIntTblValue.

  ENCLOSURE 0.05 0.05 ; # a  
  ENCLOSURE 0.02 0.07 ; # b  
  ENCLOSURE 0.10 0.10 WIDTH 1.0 ; # c 
  ENCLOSURE 0.20 0.20 WIDTH 2.0 ; # d  
  ENCLOSURE 0.05 0.0 LENGTH 0.7 ; # e  
  ENCLOSURE 0.50 0.50 WIDTH 2.0 EXCEPTEXTRACUT 0.3 ; # f  

The precedence is as follows:

Forward LAYER References in Cut Layer SPACING Rules

All forward LAYER references in cut layer SPACING rules are now supported (in OpenAccess data model revision 4).

Changes for Derived Translators

Optionally Building LEF/DEF Translators

If you need to build the LEF/DEF translators (which is optional), the lefdefInt05.70-s020 (or later) kits are now required in order to get the most current warning messages.

oaLefDef API Changes (for Derived Translators)

oaStrm API Changes (for Derived Translators)

API Change Reports

View a summary of the OpenAccess 22.04.021 changes with respect to the 22.04.017 release.

Fixed Problems
Si2 ITS Issue
ITS1047 If an application writes an OpenAccess database that has parasitic objects with oaAppdefs, in some cases an assertion occurs when the application reads the database in a new session.
  The getCellViews, getViews and getByViewName funtions return invalid cellView objects.
  When a number of parasitic networks have been created or read, and not yet unloaded, capacity is lost.
  Destroying a top block leaves a net that was owned by the top block, and trying to create the net again using oaScalar::create() causes a netExists exception.
  If the save operation is interrupted or fails while writing a new database, OpenAccess creates a truncated, non-zero size primary file.
  Improve the oaViaParam API documentation to explain how x,y enclosure values are interpreted.
  Running strm2oa with the -detectVias option should not require write access to the technology library if vias exist.
  Binding an instance to a modified superMaster results in unused parameters on the instance.
  oaInst::getName functions can crash if more than 1GB of names are used in a single design
  Performing an undo operation, after creating a group, causes a crash.
  Multi-cut vias do not snap to the manufacturing grid.
  OpenAccess core dumps if oaModule::destroy() is called and the top block is not empty.
  An internal OpenAccess error can occur if an oaBusNetBit is destroyed and recreated after the corresponding oaBusNet is destroyed.
  OpenAccess crashes when calling oaFigGroup::setName() if the group name is not a scalar name.
  The LEF translators always create the oaMinNumCut constraint group, and add it to the tech, whether the constraint is defined or not.
ITS859 A file list returned by oaDMFile::find and oaCellView::getDMFiles can differ.
  An unexpected exception occurs in oaTech::open() if a library is written on a Linux machine and read on a different platform.
  A roundtrip def2oa and oa2def translation of SPECIALNETS FILLWIREOPC information creates duplicate shapes in both the SPECIALNETS and FILL sections of DEF.
  oa2def core dumps if a via is unbound.
  Wire paths created with segments that are less than half the wire width results in malformed path boundaries.
  OpenAccess crashes if a lib, cell, or CellView directory contains two files, one with the physical name and one with the related logical name
  Transferring a net with an oaBundleTerm to an oaBusNet results in a crash.
  OpenAccess crashes instead of throwing an exception if an oaArc bounding box is a straight line.
  oa2strm does not enforce the 32 character limit for library names when the -charLimit option is used.
  Some nets created after undo can have a null canoncial net, which results in a crash.
  lef2oa incorrectly reports an error that the constraint validRoutingVias does not match the referenced technology database.
  Creating an override terminal and attaching an oaPin, followed by destroying the override terminal and then performing an undo, results in a pin attached to an invalid terminal in the block domain.
  Provide kits to support IBM AIX 5.3.
  oaNet::isEmpty() returns true for a global net with oaInstTerms.
  When you move an oaFigGroup with region query enabled, a crash can result.
  Connecting a physical-only oaTerm or oaInstTerm to a net in a different hierarchy should throw an exception.
ITS1077 When a design contains a global net and several levels of hierarchy both inside and outside the span of the net, equivalencies are not properly reflected to the block domain.
ITS1092 Using a text bBox plug-in to invalidate all the bBoxes in a block results in a crash if there are no shapes in that block.
  If a parameter name is changed on a superMaster, the oaInstHeaders are not rebound.
  Need the ability to change the connection of an oaTerm to a different net later in the design process.
ITS1050 The oaBlock::getNets() function should throw exceptions for invalid filter flags.
  oaCategoryEnum is missing a string entry, which results in a crash in oaCategory::getName().
  In the oaEnumProp::create function arguments, replace the C-style array with an oaArray.
  When creating a physical-only bundleNet, an incorrect exception message is thrown.
  The oaInstTerm::hide() function should throw an exception if the oaInstTerm is unconnected.
  A physical-only oaInstTerm should not be threaded into a module instance.
  The oaNet::isEmpty() function should return false for a global net that is only connected to instances within embedded modules.
  If you have a technology library without the master via view, the oa2lef translator quits without providing an appropriate message.
ITS924 If you define a non-regular, overlapping gcell pattern, the indices should be contiguous in the final cmap.
  When you provide a list of -refViews to the verilogAnnotate executable, each refView should get updated and ERROR/WARNING messages should be provided for each.
  When you attempt to destroy an oaConstraintDef, you get the exception, "ConstraintDef has reference," even though the design that referenced the oaConstraintDef is closed.
ITS1045 The oa2def translator creates redundant shapes for FILLWIRE shapes connected to a net with no oaTerms or oaInstTerms.
  Correct various QAC++ errors in OpenAccess code.
ITS1067 A lef2oa/oa2lef round trip does not preserve the HARDSPACING keyword on a non-default rule.
  Remove the unnecessary check for non-negative value of the scan chain set type.
  An excessive amount of time is required to open a design that contains numerous parasitics and requires defragmentation.
  The bounding box is not recalculated for LPPHeaders that contain unbound oaTextDisplay objects after the oaTextDisplay objects are bound.
  Calling oaPRBoundary::getCoreBoxSpec() causes a core dump if the oaPRBoundary does not have an oaCoreBoxSpec.
  Add an option to oa2spef to suppress dumping coordinates of internal nodes.
  An additional function is needed to return the simple string name of a tech database.
  oaInstTerm::hide() throws inconsistent exceptions.
ITS988 Running multiple def2oa translations in parallel, to the same library, results in an error stating a temporary file cannot be created.
ITS996 Instead of an internal node name, oa2spef should always use the term (oaInstTerm) name if a name exists.
  Exception messages do not match the implementation.
  When opening a design, an incorrect sequence in binding a tech database generates numerous warnings.
  Numerous compiler warnings are generated on Solaris about unused parameters of a function when the +w2 compiler option is included.
  If a directory contains an invalid .oalib file, a cryptic message results.
  Iterating over oaModInstTerms on an oaModule fails when there is a mix of instances with and without oaInstTerms.
  The bbox of an oaFigGroup is updated incorrectly when adding an empty route to the oaFigGroup.
  The LEF and DEF translators should provide a more informative error message when encountering a trailing slash character after the -libName or -techLibName option arguments.
  Verilog translator error message specifies an incorrect option name (instead of -tieLo, it should be -tieLow).
  The oaTech::open function should accept only valid mode characters.
  Destroying shapes on nets can have poor performance.
  Provide a better error message if the library directory no longer exists.
  Plug-in search path mechanism needed for OpenAccess plug-ins.
  The LEF translators should allow forward LAYER references in the cut layer SPACING rules.
  Exception messages related to loading plug-ins should provide more detail.
  Nested lists with white space are not supported in the OpenAccess Tcl bindings.
ITS1000 If all capacitances in the design are zero, the oa2spef translator writes an empty CAP section, which makes the SPEF file unreadable for the spef2oa translator.
  If the LEFDefaultRouteSpec does not contain a pitch rule, the oa2lef translator should check in the foundry rules.
ITS1025 Need detailed error messages when the PCellLink::find and EvalText::find functions cannot access the plug-ins.
  Data with conflicting constraint groups can result in a crash.
  If an application binds a Pcell to its master in a preModify observer notification for oacSetInstHeaderInstModType modType, opening a design with a Pcell instance causes OpenAccess to crash.
  The lef2oa translator should produce a warning when it renames vias.
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 supported.

Version 22.04.017 Source Code and Documentation Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
Windows Compiler: Visual Studio 2005
IBM Operating System: AIX 5.1 IBM Compiler: VisualAge C++ Professional, Version 6 (or later)

Notes
* For sun4v systems for Solaris 10, the following variable must be set: setenv OA_COMPILER stl4
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
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 remains 37.

Changes and New Features

New oa2strm Functions (for Derived Translators)

The oa2strm translateInsts() and translateVias() functions now include arguments to specify the design. These revised functions support passing the design name in the log file message if warnings and errors occur. For derived translators, source code must be updated and recompiled to include this support.

API Change Reports

There are no API changes in this release.


Fixed Problems
ITS Issue
  oa2lef fails to generate SPACINGTABLE rules.
  A core dump occurs in oaOccInstTerm::getAssignedNet.
  If an oaModNet that is reflected to the block domain is upgraded from an implicit to an explicit state, the oaSigType of the oaModNet should be propagated to the block domain reflection.
  oa2strm writes vias and instances for pCell supermasters even though the pCell supermaster itself is not written to the output file.
  Deleting an oaFigGroup, followed by an undo operation, causes OpenAccess to crash.
  Repeatedly closing a superMaster can cause OpenAccess to crash.
  oaFigGroup::copy() fails to include an oaFig if the object is in a route that shares the same oaFigGroup.
  If the -version option is specified with the value 6, oa2strm incorrectly encodes the version number in the Stream file.
  oaDesign::hasProp() reports false even though there are properties on the design.
  OpenAccess does not create arcs although they appear to be created in the application.
  Polygon boundary points are calculated incorrectly if a side forms an acute angle.
  OpenAccess crashes when an oaAppObject is added to an oaConstraintGroup and then undo and redo operations are performed.
  Opening a library that is attached to another, which does not have read permission, causes OpenAccess to crash.
  Undoing the remastering of vector instance bits throws an exception.
  lef2oa creates a minSpacing constraint group for each blockage on a layer instead of creating a single minSpacing constraint group for all blockages on the same layer.
  Allow any translation, scaling, or multiple of 90 rotations of the PRBoundary, and apply these to the oaCoreBox and/or oaIOBox.
  lef2oa accepts invalid values for the -dataModel option.
  strm2oa does not correctly detect conflicting vias and produces different translation results dependent on whether the -detectVias option is used.
  lef2oa fails to merge three rectangles that have a common point.
  The oaMinProtrusion constraint data is omitted from LEF when running oa2lef to generate version 5.5.
  oa2strm writes the wrong last modification and last access times.
  OpenAccess generates an unexpected assertion when oaDesign::save is called.
  OpenAccess miscalculates arc start and stop angles.
  If you destroy an ordered group or constraint group then perform an undo, the group does not maintain its order.
  Undefining a super header and returning it to a regular header master results in some sub headers referencing the regular header as though it is still a super header.
  lef2oa crashes if the LEF file contains an empty property string.
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 supported.

Version 22.04.015 Source Code and Documentation Release

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

Build Configurations

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

Platform Compiler
Solaris (x86_64) Operating System 10
with and without support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8
Solaris Operating System 10
with support for STLPort4 C++ standard template libraries
Solaris Compiler: Forte Developer/Studio 11 C++ 5.8*
Solaris Operating System 8 Solaris Compiler: Forte Developer 8 C++ 5.5 (or later)
Linux (x86 and x86_64) Operating System: Redhat Enterprise 3.0
Compatible with: RHEL 4.0, SUSE 9
Linux Compiler: gcc 4.1.1
Windows Operating System: Windows 2000/XP Windows Compiler: Visual Studio .NET 2003**
Windows Compiler: Visual Studio 2005
IBM Operating System: AIX 5.1 IBM Compiler: VisualAge C++ Professional, Version 6 (or later)

Notes
* For sun4v systems for Solaris 10, the following variable must be set: setenv OA_COMPILER stl4
**The Windows Compiler: Visual Studio .NET 2003 is deprecated in favor of Visual Studio 2005
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 remains 37.

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

Compatibility Issue for Code that Uses the std::string Class

The fix for ITS issue 1082 removed the statement using std::string from one of the OpenAccess header files. If your application code contains statements such as string msg("Message") that rely on the using statement in the OpenAccess header file, you need to update your code. For example, add a similar using statement to your code or use statements such as std::string msg("Message").

Changes and New Features

Solaris (x86_64)

The Solaris x86_64 version of OpenAccess now includes the C++ standard template libraries (STLPort4).

Third-Party Packages

The paths to the external packages Bison, Flex++, Tcl, and zlib used in the compilation process have changed. The new paths are constructed as follows:

  $(OPTDIR)/<package>/v<package_version>[_64]    

Corresponding package version macros have been defined as <package>_VERSION.

For example:

  FLEX_VERSION := 2.5.4a                    
  FLEX_HOME := $(OPTDIR)/flex/v$(FLEX_VERSION)/

The default Tcl version has been updated to version 8.4.6. The TCL_HOME path now defaults to $(OPTDIR)/tcltk/v8.4.6.

lef2oa Maps Multiple LEF ENCLOSURE Statements to Separate Constraints

lef2oa maps multiple ENCLOSURE statements to separate constraints that are ordered in a precedence constraint group. However, if two or more statements for the same layer have the same parameters, they map to a single constraint. Each ENCLOSURE statement without WIDTH maps to a separate constraint. All constraints are stored using an oacDualIntTblValue based on width, except single constraints without width use an oacDualIntValue.

In the following example a, b and e are set in three separate constraints with an oacDualIntValue. c,d and f are set in the same constraint with an oacDualIntTblValue.

ENCLOSURE 0.05 0.05 ; # a
ENCLOSURE 0.02 0.07 ; # b
ENCLOSURE 0.10 0.10 WIDTH 1.0 ; # c
ENCLOSURE 0.20 0.20 WIDTH 2.0 ; # d
ENCLOSURE 0.05 0.0 LENGTH 0.7 ; # e
ENCLOSURE 0.50 0.50 WIDTH 2.0 EXCEPTEXTRACUT 0.3 ; # f

The precedence is as follows:

New Behavior When Setting Attributes on Multi-bit Objects

Background: Setting an attribute on a multi-bit object usually results in setting the attribute on its members and bits. In the case of nets, the attributes can be set on implicit nets as well.

For consistency, the behavior has changed when setting the attribute on a multi-bit object where setting the attribute only affects its implicit members and bits. Pre-existing, explicitly created members and bits are not changed if pre-existing implicit members and bits are updated.

This behavior change extends to when objects are created that overlap other, already existing objects and the attribute is specified at creation time. For example, if net bus[0:4] is created with sigType “analog” and bus[2:6] is created later, the bits bus[2], bus[3], and bus[4] are assigned the default “signal” sigType, instead of retaining the “analog” sigType. However, if bit bus[2] was first created with sigType “analog” and bus[2:6] was later created with sigType “scan”, the bus[2] would retain its sigType “analog” while bits bus[3] through bus[6] would be assigned sigType “scan”.

When a multi-bit net is destroyed and an implicit member or bit survives, because it is a member of another multi-bit net, the attributes on the surviving member/bit are updated from the other multi-bit owner. For example, consider the previous example with bus[0:4] with sigType “analog” and bus[2:6] with sigType “signal”; the bits bus[2], bus[3], and bus[4] also have sigType “signal”. If bus[2:6] were deleted, the bits bus[2], bus[3], and bus[4] remain since they are members of bus[0:4} and they be assigned the sigType “analog” to match.

The following table lists examples of the different attributes of nets and indicates whether those attributes can be set on explicit nets, implicit nets, or both. For each of the objects listed, the attributes apply to both the object and the bits of that object.

Multi-bit Object Attribute That Propagates to Implicit Members/Bits
oaNet/oaModNet sigType
isGlobal
oaNet priority
source
oaTerm/oaModTerm termType

API Change Reports

There are no API changes in this release.

Fixed Problems
ITS Issue
  oa2lef writes duplicate SAMENET statements.
  lef2oa incorrectly translates ENCLOSURE parameters.
  oa2strm creates an invalid GDS file.
  When super master parameters are updated, parameter overrides on sub headers that do no match the new parameters are lost.
  After redefining a super master, new instances are created with only a subset of their parameters.
ITS1094 The count of blockages on a given layerHeader doesn't change when one of its blockages is destroyed.
  File size increases though objects are deleted.
  Define how the oaTermType attribute is set when multi-bit terminals overlap.
  Running multiple sessions of an application causes a warning: "Unable to create temporary file."
  A design containing oaFigGroup objects can be saved to disk as a dataModel 0 database.
  Moving an oaFigGroup that has a route and oaRoute objects in the same oaFigGroup causes an assertion failure when region query is enabled.
  A dataModel 0 application can open a database that includes dataModel 2 features.
  Destroying a worst-case multibit oaInstTerm (an oaVectorInst with an oaBusTerm) takes too long.
  Destroying an oaBlock does not reset a design's hasSymmetricConnectivity() flag causing an on-disk inconsistency.
  Fix a potential crash related to communication with the oaDMFileSys lock daemon.
ITS 1082 The "using std::string" statement should not be included in public header files.
  The oaArc::calcArc() startAngle and stopAngle arguments are reversed.
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 supported.

Version 22.04.012 Source Code and Documentation Release

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

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 was incremented to 37 due to the change to the oaObserver<oaScanChainInst> oaScanChainInstModTypeEnum values. If your code uses the oaObserver<oaScanChainInst> observers, you need to recompile your code in this release. See Observer Changes for more information.

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

Changes and New Features

Enhanced Scan Chain Functionality

Observer Changes

The oaScanChainSet class has been updated to issue standard observer notifications.

In addition, the existing oaObserver<oaScanChainInst> observer has more useful notification messages. The new enum values for oaScanChainInstModTypeEnum are as follows:

The following oaScanChainInstModTypeEnum enum values were eliminated in favor of the more useful messages (shown above).

New Exceptions for oaScanChainInst functions

In previous releases, it was possible for an oaInstTerm to be on multiple scan chains. In the current release, an oacInstTermAlreadyInScanChain exception is thrown if an attempt is made to call one of the following functions with an oaInstTerm that is already part of a scan chain.

In addition, the previous four functions throw an oacScanChainInstTermsNotOnSameInst exception if an attempt is made to specify input or output oaInstTerms that are not on the same instance.

Supported Platforms and Compilers for OpenAccess Pre-Compiled Libraries

OpenAccess no longer supports the Linux Redhat Enterprise 2.1 (gcc 3.2.3) platform.

OpenAccess continues to support the Linux Redhat Enterprise 3.0 platform compiled with gcc 4.1.1, but a version compiled with gcc 3.2.3 is no longer provided.

New Value Added to oaReservedViewTypeEnum

A new oaReservedViewType enum, named oacSystemVerilogText, is added. An oaViewType of oacSystemVerilogText has the equivalent string representation of systemVerilogText.

API Change Reports

View a summary  of the OpenAccess 22.04.012 release changes with respect to the 22.04.007 release.

Fixed Problems
ITS Issue
  The construction of an oaInstHeader bounding box is inconsistent when the instance is initialized to unplaced.
  There is a mismatch between Pcell float parameters and shape dimensions.
  The oa2strm translator converts some 45 degree oaPathSegs to GDS paths with off grid vertices.
  oaArc::calcArc calculates an arc that does not pass through the three specified points.
  Undo of a destroy of an oaBundleNet causes a core dump.
  An undo/redo sequence involving an oaConstrainParamArray, with 3 oaIntValue parameters, causes a core dump.
  Enhance OpenAccess to add "systemVerilogText" to the reserved list of viewTypes.
  OpenAccess should handle extra lock files consistently across all platforms.
  When reading an inconsistent database, OpenAccess should not crash.
  OpenAccess incorrectly manages bit instances of oaVectorInsts.
  OpenAccess crashes if an oaViaDef is missing from the database.
  Destroyed nets are not properly reclaimed, causing a file size increase.
  Opening a design over NFS with the FileSys DM plug-in can result in a crash if no master.tag file exists.
ITS1057 Calling oaLayerBlockage::setLayerNum with the current layer number results in the layer header information for a block becoming inconsistent (the layer header reference count is incorrect).
  OpenAccess returns an invalid instTerm when oaInstTerm::find() is called using a term that was destroyed and re-created.
  Name map names that are longer than their unmapped versions should not be generated by oa2spef.
  An exception is thrown when adding a point following undo operations that create a wire.
  An application crashes when deleting a Pcell that includes an oaInstTerm that is marked as in route.
  An oaViaTopologyArrayValue referencing a design database can be created in a tech database. This is an unsupported use model that should throw an exception.
  A sequence of oaConstraintGroup::create(), ::find(), and ::create() calls cause a crash.
  oaCellView::getDMFiles() crashes if two temporary files have filename extensions beginning with file.
  Cannot open a database containing a chain of supply/ground-sensitive bitTerms.
  oaArch::calcArc() throws an exception when the arc being created overlaps an elipse.
  Two users can edit the same cell simultaneously.
  The bbox of an oaFigGroup is updated incorrectly when adding an empty route to the oaFigGroup.
  Applying a transform to a row also incorrectly applies the transform to the siteOrientation.
  oaModVectorInstDef::destroy does not check for vectorInstBits when destroying the oModVectorInstDef.
  When deleting a multi-bit oaInstTerm with implicit members that are also members of other multi-bit oaInstTerms, the remaining multi-bit oaInstTerms are left in an inconsistent state, and iterating through their bits results in a crash (for example, when a design is opened and the oaInstTerm data is defragmented).
  Destroying an oaVectorInstBit incorrectly alters its oaVectorInstDef, causing an oaVectorInst with the same oaVectorInstDef to become inconsistent.
  When deleting oaBundleTerms with members that are also members of other oaBundleTerms, these implicit terminals are left in the design with no explicit owner, and iterating through the data could result in a crash (for example, when a design is opened and the term data is defragmented).
  oa2strm does not handle 45-degree pathSegs and paths when -version is set to 3.
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 supported.

Version 22.04.007 Source Code and Documentation Release

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 36.

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.

 

Version 22.04.007 Source Code and Documentation Release

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 36.

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