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

OpenAccess 2.2.6-p052 Release Notes

Contents


Version 2.2.6-p052

Note: Version 2.2.6-p052 includes all changes that occurred after 2.2.6, including changes outlined in the P045 and P049 source code and documentation release notes.

Compatibility with Earlier Releases

The current oacDataModelRevNumber remains 3.

The oacAPIMinorRevNumber remains 33.

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

Tcl Bindings for the OpenAccess API

Applications compiled with oaTcl header files prior to 2.2.6-p052 need to be recompiled with release 2.2.6-p052 or later. For more information, refer to Limitations in Tcl Bindings for the OpenAccess API for more information.

Changes and New Features

LEF 5.7 Support

The lef2oa and oa2lef translators now partially support LEF 5.7. Any LEF 5.7 constructs that have corresponding OpenAccess built-in constraints are mapped to those constraints. LEF 5.7 constructs that do not currently map to built-in constraints result in warnings in the translators. Refer to the LEF/DEF to OpenAccess Mapping documentation for information mapped constructs.

The lef2oa translator determines the LEF version based on the input file. The oa2lef translator has a -ver option for specifying the output version.

LEF/DEF Mapping

The mapping for the LEF LAYER SPACING attribute with two RANGE keywords has been fixed to also incorporate values from the SPACING attribute with a single RANGE keyword.

oaStrm API Addition (for Derived Stream Translators)

Derived translators can use StrmOut::getTextNS to access the translator namespace in order to write additional labels. Also, functions were added to oaStrm to allow the manipulation of text and statistics.

Supported Platforms and Compilers for OpenAccess Pre-Compiled Libraries

The Itanium Linux platform (AS 2.1) is no longer supported.

Building OpenAccess on Windows

You can now use Microsoft Visual Studio 2005 as well Visual Studio .NET 2003 to compile your environment on Windows. The OpenAccess solution files for Visual Studio 2005 have a  _vc8 extension in their name. For example:

Refer to Optionally Compiling on the Windows Platform for more information.

Optionally Building LEF/DEF Translators

If you need to build the LEF/DEF translators (which is optional), the lefdef5.7 (or later) kits are now required.

API Change Reports

There are no API changes in this release.

Fixed Problems
Si2 ITS Issue
  A crash occurs when you remove a leader from an oaFigGroup.
ITS922 If you scale the width of an oaPathSeg, OpenAccess does not round the width correctly, which can cause an oacEvenWidthRequiredForSegStyle exception.
  The oa2lef translator should not output VIAs or VIARULEs with implant layers as their primary or secondary routing layer.
  If a MACRO is defined multiple times, the lef2oa translator should give a warning, ignore the new geometry, and continue saving the data.
  The lef2oa and def2oa translators should default to a data model of one when the -dataModel argument is not specified.
  Enhance OpenAccess to preserve comments in lib.defs files.
  The oaBundleName::append() function might crash after a call to the oaModBundleNet::getName() function.
  While a pCell oaInstHeader is being bound, a call to bind the same header should be ignored.
  OpenAccess should check for a top block on the oaRefHeaders in the used-in lists before promoting (or removing) any LPP or layer headers.
ITS895 After performing an oaModule::detach operation, there are extraneous oaBusTermDefs and oaBusNetDefs in the module.
  Improve error message for invalid object types.
ITS862 Clarify documentation about the hierarchy delimiter for the cdba namespace.
  The oa2def translator crashes when the database contains an oaRoute that is not assigned to a net.
  The oa2lef translator should not omit the MANUFACTURINGGRID.
  A database created by the lef2oa or def2oa translator on a Linux platform crashes in oaSiteDef when read in on a Sun platform.
  If you move a shape from one route to another several times, then perform an undo operation, the route-net-shape data might be corrupted.
  OpenAccess does not remove all the read-caches of database files if the owning process exits without performing a database close or purge operation.
  A crash occurs in oaDMFileSys::oaDMFileSysComp::isCacheFile on exiting.
  The OpenAccess sysname script does not recognize sun4us.
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:

This release includes partial support for LEF and DEF 5.7 constructs.

The oaPcellScript Plug-In is in development and is not ready for use at this time.

Version 2.2 P049 Source Code and Documentation Release
Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

The current oacDataModelRevNumber is 3.

New functions were added to this release, so the oacAPIMinorRevNumber was incremented to 33. Programs compiled with the header files in the P048 release or later cannot be used with OpenAccess shared libraries from versions prior to P048. Programs compiled with versions prior to P048 will continue to run unchanged with the shared libraries produced from the current release.

Refer to Compatibility for OpenAccess Applications and Data for more information. In addition, refer to the OpenAccess 2.2 Development Feature List for a list of the features included in each version of OpenAccess.

Potential oaAppDef Issue Resolved

Persistent application-defined data (oaAppDef data) created using versions of OpenAccess between 2.2.3 and P048 (inclusive) might be corrupted. The OpenAccess P049 release contains code to automatically repair the corruption in most cases.

In the problematic window (between 2.2.3 and P048 inclusive), an application reading an OpenAccess database using OpenAccess shared libraries that were newer than the OpenAccess shared libraries used to create the database could crash when performing the following actions:

This issue was more prevalent in oaTech databases.

Note: Even though the P049 release contains code to repair the corruption, there are rare cases in which the repair process fails. If the database cannot be repaired, and the repair process failed on oaAppDef data that the application explicitly registered, an oacCannotRepairCorruptedAppData exception is thrown when the database is opened (regardless of mode). Because any application can use oaAppDefs to define persistent application-specific data, the exception is not thrown unless the application reading the database explicitly registered an oaAppObjectDef for an oaAppObject that contains un-repairable oaAppData. This means that applications can still read the database, even if some portions of it are not repairable, if they do not attempt to access the un-repairable portions.

Changes and New Features
Technology Databases

Enhanced Model for Technology Database Attributes

In previous releases, OpenAccess reported a conflict if the default value of a technology attribute, such as DBUPerUU, conflicted with a user-specified value for the same technology attribute in a graph of incremental technology databases. Now OpenAccess can distinguish between explicitly set values and implicitly assigned default values. In a graph of technology databases, an explicitly set attribute value takes precedence over any implicitly assigned value, and there is not a conflict if they differ.

For more information, refer to Technology Database Attributes in the Programmers Guide.

oaTech::setRefs Prevents Circular References

In previous releases, it was possible to create a circular set of technology database references with oaTech::setRefs. For example:

An oacTechSetRefsCircularReference exception is now thrown if an application attempts to create a circular set of references.

Note: The oacTechCannotSetRefToSelf message ("Cannot set self as reference",) has been obsoleted because the functionality is now part of oacTechSetRefsCircularReference.

oaObserver<oaTech> Changes

In previous releases, the oaObserver<oaTech>::onFirstOpen and oaObserver<oaTech>::onPostOpenRefs observers were invoked after checks for conflicts and for unbound technology database references. These two observers are now invoked before the checks. Accordingly, the oaObserver<oaTech>::onConflict and oaObserver<oaTech>::onUnboundRef observers now appear after the onFirstOpen and onPostOpenRefs observers.

In previous releases, the oaObserver<oaTech>::onPurge observer was invoked after the graph of incremental technology databases was destroyed. This observer is now invoked before the graph of incremental technology databases is destroyed. Accordingly, the onModify observers for the oacUnbind<objectHeader>ModType now appear before the onPurge observer notification.

New Design Management (DM) Attribute for Read-Only Reference Libraries

The Turbo and FileSys DM systems have a new attribute that can be set on read-only reference libraries to indicate that OpenAccess can always perform partial reading of the data.

"libReadOnly"

Specifies whether or not applications can modify the library and its contents. This attribute can be set to "yes" to indicate that the library is a read-only reference library. If set to "yes", OpenAccess is always able to perform partial reading of the data, which can improve performance.

If set to “no” (the default), and the library is being accessed across an NFS or AFS network, and the file system permissions prevent OpenAccess from modifying the library, OpenAccess will read database files completely into memory when they are first accessed.

There are two new exceptions related to the new DM attribute:

Note: In previous releases, problems could occur when multiple users on NFS accessed the same libraries. Specifically, if a process partially read a file and left the file open, then another process wrote to that file, the reader would encounter problems on attempting to read the file again. This problem has been resolved.

Translator Changes

Each OpenAccess translator has the following new options, which are made available by the wrapper scripts for the executables.

Option
Description
Notes
-64 Selects the 64-bit version of the translator executable (if available). Takes precedence over the <translator>_BIT and OA_BIT environment variables.
-32 Selects the 32-bit version of the translator executable (if available).
-dbg Selects the debuggable version of the translator executable. Takes precedence over the <translator>_MODE and OA_MODE environment variables.
-opt Selects the optimized version of the translator executable.
-debug3264 Provides diagnostics about the executable in use based on the environment variables, command-line options, and which executables are available on the platform.

For more information, refer to Using OpenAccess Translators.

oa2strm Translator Changes

The oa2strm translator has new options for adding pin text (labels) to nets and terminals. In addition, there is a new option to specify the Stream format for the output file, and a new option that lets you convert path objects to polygons.

Option
Description
-labelMap Specifies a label map file that determines the object type for which labels are created and determines the mapping of shapes on an oaLayer and oaPurpose pair to a GDS layer and GDS data type pair.
-labelDepth Specifies to what depth of the design hierarchy labels are generated.
-pathToPolygon Specifies that oa2strm convert path objects to polygons and write them as boundary records.
-ver Specifies the Stream format version for writing the Stream file.

Refer to OpenAccess to Stream Translator (oa2strm) for more information about these options.

lef2oa Translator Change

The lef2oa translator issues a warning and does not use the new attribute value if the manufacturing grid or clearance measure values in the file being imported are different than the values already in the database. In previous releases, an error message was issued.

oa2verilog Can Map All tieLow or tieHigh Nets

The oa2verilog -tieLow and -tieHigh options now accept an asterisk (*) to map all tieLow or tieHigh global nets at once.

Option
Description
-tieLow * All global nets that are marked as oacTieLoSigType are mapped to 1'b0.
-tieHigh * All global nets that are marked as oacTieHiSigType are mapped to 1'b1.

LEF/DEF API Changes

The openTech function has been removed from LefIn because it was redundant with initTechDBLocal, which provides the same functionality.

Optionally Building lef2oa or oa2lef

If you need to build the LEF translators (which is optional), the lefdefInt05.60-s024 kits are now required.

Refer to the OpenAccess Installation and Configuration Notes for more information about building the translators.

 New Classes and Functions

New oaAnalysisPointArray Class

The oaAnalysisPointArray class implements a utility array class used to pass an array of oaAnalysisPoint class pointers to the following function:

oaParasiticNetwork* oaParasiticNetwork::create(oaDesignObject*                 net,
                                               const oaAnalysisPointArray&     aps)  	

Note: The following function is considered deprecated:

oaParasiticNetwork* oaParasiticNetwork::create(oaDesignObject    *net, 
                                               oaUInt4           numAPs, 
                                               oaAnalysisPoint   **aps) 

New oaBuildInfoArray Class

The oaBuildInfoArray class implements a utility array class used to pass an array of oaBuildInfo pointers back to the user with the following function:

void oaBuildInfo::getPackages(oaBuildInfoArray&    packagesIn)

Note: The following function is considered deprecated:

oaBuildInfo** oaBuildInfo::getPackages()

New oaMemoryError Class

The new oaMemoryError class contains information about the exception that OpenAccess throws when it detects that a process is out of memory when oaMemory::get() or oaMemory::resize() are called. This allows an application to print a more helpful message when this error occurs.

Performance Speed Up

The implementation of const APIs that do not modify the database, such as oaInstTerm::getInst() and oaTech::getDBUPerUU(), has been modified to improve performance. The const APIs in the optimized shared libraries no longer validate their arguments (including the this pointer). The non-const APIs that do modify the database, such as oaInstTerm::create() and oaTech::setDBUPerUU(), continue to validate their arguments as before.

Both the const and non-const APIs continue to validate their arguments and throw exceptions when appropriate in the debuggable shared libraries. However, instead of throwing exceptions, these APIs will generate crashes when the optimized libraries are used.

Applications must not rely on OpenAccess to validate arguments in the const APIs.  Application developers should develop and test their applications using the debuggable shared libraries, then use the optimized shared libraries when testing for release and when shipping.

OpenAccess Tcl Bindings

The Tcl Bindings for the OpenAccess API document has been improved and includes new usage examples.

oaTcl API Interfaces

New oaTcl interfaces are provided for the following:

::oa::AnalysisPointArray
::oa::BuildInfoArray 

The following oaTcl interfaces, which do not correspond to public OpenAccess APIs, have been removed.

::oa::BasePackedData
::oa::VCMessageTypeEnum
::oa::getSocketD
::oa::ClientSocket
::oa::VCOperation
::oa::getSwap
::oa::FDSet
::oa::VCOperationEnum
::oa::grid
::oa::HierPathElement
::oa::accept
::oa::invalidate
::oa::IEvalTextGetId
::oa::acquire
::oa::isAcquired
::oa::IPcellGenGetId
::oa::bind
::oa::isMapped
::oa::IPcellGetId
::oa::calcDiskSize
::oa::isPortNumAvailable
::oa::ITextGetId
::oa::closeWindows
::oa::listen
::oa::ITextInvalidateGetId
::oa::connect
::oa::onBind
::oa::MapFile
::oa::data
::oa::onEval
::oa::MapFileWindow
::oa::extend
::oa::onRead
::oa::MapWindow
::oa::genPcell
::oa::onUnbind
::oa::Mutex
::oa::getBytes
::oa::onWrite
::oa::ServerSocket
::oa::getFirstWindow
::oa::readSwapCheck
::oa::Socket
::oa::getLoc
::oa::select
::oa::SocketClose
::oa::getMapFile
::oa::setAddress
::oa::SocketGetHostName
::oa::getMappableSize
::oa::setMapFile
::oa::SocketRecvMsg
::oa::getNextReady
::oa::setPort
::oa::SocketSendMsg
::oa::getOffset
::oa::setSwap
::oa::VCMessageType
::oa::getPort
::oa::unmap
::oa::writeSwapCheck
 
OpenAccess Examples

The OpenAccess programming examples in <install_dir>/examples/oa have been improved. Each example directory now contains a run script, which creates any demo data (if needed), and runs the example. Each example directory also includes a log.ref file that contains the expected output.

For more information, refer to API Programming Examples.

 Improved Error Messages

The error and warning messages for the SPEF, Stream, and Verilog translators have been improved. Errors messages now help identify the cause of an error and suggest a corrective action. All messages are output with a unique alphanumeric prefix to ensure an unambiguous reference.

Note: Error and warning messages for the LEF/DEF translators were improved in a previous release.

API Change Reports

View a summary  of the OpenAccess P049 source code and documentation release changes with respect to the P045 source code and documentation release.

Fixed Problems
Si2 ITS Issue
  If you open a database, add a shape, and then save the database, you get a crash.
  Cannot create a via that binds to a different oaViaDef master after re-attaching to a library with a standalone technology database.
  Databases with oaAppObjects and oaInterPointerAppDefs written by one version of OpenAccess and read by another version of OpenAccess prior to the p049 release can be in a corrupted state.
  If you call oaTech::attach(designLib, techLib) on an incremental technology database, you cannot access the data from the reference libraries for the technology database immediately following the call.
  An oaAttrDisplay object on an oaDesign refers to an invalid object.
  The oaIter<oaLayerConstraint>, oaIter<oaLayerPairConstraint>, oaIter<oaLayerArrayConstraint>, oaIter<oaConstraint>, and oaIter<oaSimpleConstraint> functions cannot handle a chain of more than four constraint groups from different databases.
  The oaTech::hasAttachment function leaves oaDMData objects open.
  Error occurs when reading oaPRBoundary data.
ITS404 The oaMemory::get() function does not always work correctly.
ITS824 The spef2oa translator should support connection by terminal position
  If there is a local technology database inside a a chain of technology database attachments, that local technology database should be favored over the attached technology database.
  The oaTech::attach function hangs.
ITS769 Tcl bindings: Bad reference count causes a crash.
  Tcl bindings: If a lib.defs file contains duplicate library definitions or duplicate INCLUDE lines, oa::LibDefListOpenLibs prints an error message, ignores the contents of the lib.defs file, and returns the status TCL_OK.
  Tcl bindings: When creating user-defined functions, a compiler error occurs when compiling code that contains the namespace-qualified type, oa::oaBoolean.
  Tcl bindings: The oaTcl error messages should provide information about incorrect inputs, and the oa::help command should provide help about its usage.
  Errors result if you run the def2oa translator on a library that uses an attached technology database.
  The lef2oa -overwrite option works for designs, but not oaSiteDefs.
  The LEF translators do not correctly handle inter-spacing statements.
  The -overwrite option for the LEF and DEF translators does not work correctly.
ITS868 In certain cases, the oaPolygon::isOrthogonal function incorrectly reports that a polygon is orthogonal.
  The strm2oa translator crashes if the input layer map file has conflicting information.
ITS857 Calling oaPointArray::compress() on an array with no elements causes a crash.
 

A crash occurs after reading a database in which many oaConstraintGroups were deleted.

  After reading in a design in which many objects owning oaConstraintGroups were deleted, the database gets corrupted.
  The OpenAccess translators should provide command-line switches that choose between 32 and 64-bit versions, and between debug and optimized versions of the executables.
  A version of OpenAccess with the incremental technology database feature enabled incorrectly destroys oaViaDefs with implant layers when reading in older data.
ITS790 Using oaFig::copy on a leader creates a group with the same name, which should not be allowed.
  When reopening a very large database that was generated on a different platform, a crash results.
  OpenAccess should prevent applications from saving data with a data model revision number that is higher than the application itself supports.
  The oa2verilog translator should handle a design in which both the multi-bit and single-bit connectivity are explicitly expressed.
  Queries should always return zero-sized objects.
ITS690 The oa2verilog translator should autodetect tie nets.
  Binding is not handled correctly for conflicted headers when technology databases in a graph are opened or closed.
  The oaTech::detach function issued on a self-referencing attachment hangs.
  Destroying objects with oaConstraint Groups can be quadratic (performance issue).
  Setting the instance master causes a crash in oaTextDisplay if the instance master does not have any shapes or properties.
  Cannot call oa::ParasiticsNetworkCreate with multiple analysis points.
  OpenAccess should be able to handle more than 65535 open designs.
  OpenAccess should create a built-in constraint group with an auto-name when the technology database contains a regular constraint group with the reserved names foundry or default.
  When using a version of OpenAccess that supports incremental technology databases, deleting a layer from data that was generated in an earlier version of OpenAccess causes a crash.
  The oaModule::detach function crashes if the module being detached contains a block net that spans into lower occurrences of the sub-module hierarchy.
  The index for the foundry constraint group owner needs to be updated.
  Several ABRs when opening a schematic design.
ITS858 Need to clarify the oaInstHeader::get<object>Name documentation.
  The verilogAnnotate translator prints an incorrect message about refLibs.
  The performance of oaRoute::destroy is poor on large designs.
  When using oa2strm -ver 3, the output file should not have PATH records with the "variable" PATHTYPE.
  Support dynamic page size for the first page in oaCommon::oaHashTblArray.
  The oa2def translator does not handle row orientations correctly.
  When provided with a LEF file that contains an ENDOFLINE MinSpacing value, the lef2oa translator uses this value as the default MinSpacing value.
  OpenAccess should favor explicitly set values over implicitly supplied default values in incremental technology databases.
  The oaRegionQuery::startRef function is called for array instances even when the master bBox is smaller than the specified filter size, which adversely affects performance.
  OpenAccess translators write incorrect relative paths in the lib.defs file.
ITS847 Deleting an oaModInst with a global net causes a crash.
  The oaDesign::getTimeStamp function causes a crash.
ITS832 The oaDMTurbo system fails to start due to a port conflict.
  The oaOccInstTerm::getTermName() function fails to throw the oacInstTermConnectsByPosition exception when appropriate.
ITS846 Clarify documentation of the oaModInstHeader::getMaster and getMasterModule functions.
  The oaConstraint::find function does not search all referenced technology databases.
  If you redefine a via definition then create a new via with it, the created via is incorrect.
  Performance is poor when deleting oaSteiners from a design with numerous routes.
  A missing guard statement (to prevent multiple inclusion) in the oaFigGroup.h file causes compilation errors.
ITS839 The oaPointArray::compress function should resize the output array if needed.
ITS842 OpenAccess should throw an exception instead of crashing if DMAttributes are specified using incorrect syntax.
  The def2oa translator does not create all row orientations correctly.
  The number of warnings produced on standard output conflicts with the number of warnings in the log files for the lef2oa/def2oa translators.
  The oa2def translator should output PlacementStatusNone pins as PLACED.
ITS818 The via FILLWIRE property is lost when using the oa2def and def2oa translators.
  If you create multiple MustJoin oaTerms and unset them one by one, the last call to oaBitTerm->unsetMustJoin() causes a crash.
  The lef2oa translator should issue a warning when translating multiple files with different UNITS statements.
  The strm2oa translator does not release its lock on the design library.
  LEF CLASS values not directly supported by OpenAccess should be preserved.
  The oa2strm translator should support multiple stream version numbers.
  The oa2strm translator should translate oaPathSegs.
  The def2oa translator should let you specify the purpose of pins.
  The cellmap file automatically generated by the oa2strm translator includes cell names that do not reflect the original names.
  Using lef2oa -refLibs on the same library a second time should not produce an error.
ITS836 On cleaning up, the oa2strm translator should not close designs that were already open before the translation started.
  The oaDesign::getConstraintGroup function crashes.
ITS831 Problem in the 2-D table look-up when the look-up value needs linear extrapolation.
  OpenAccess 2.2.4 and 2.2.5 should impose the "Cannot open with compatibility error" policy when opening a database containing one of the new oaNet, oaRoute, or oaGroup default constraint groups.
  The Stream translators should support incremental layer map files.
ITS810 The build/runExe wrapper script should detect missing shared libraries.
  The oaDerivedLayer::find function should not return NULL for new layer operations.
  Calling getMaster in an oaObserver<oaInst> while redefining a PCell superMaster (by reopening it in write mode and calling defineSuper) can cause the superMaster to bind recursively.
 

If numerous nets with parasitic networks are deleted from a database, a later defragmentation of that database can result in a crash.

  A crash occurs when setting a reference to a technology database that has a conflicting constraint group name.
  Cannot update the local mfgGridResolution.
  The def2oa translator should not call oaTech::attach if the library specified by –lib and –techLib are the same.
  The oaTech::getTechHeaders function does not return all headers.
  The oaObserver<oaTech>::onPurge() observer should be triggered before the oaTech database unbinds the used-in oaTech databases.
  When using incremental technology databases, conflict checking should occur after the oaObserver<oaTech>::onFirstOpen observer is issued.
  The oaTech::setRef function should succeed for a library with both a local oaTech and an attached oaTech.
  Copying a very large number of figures with oaAppProps can cause a crash.
 

The lef2oa translator should inherit the units specified in a parent technology database.

  When performing a lef2oa/oa2lef round trip, antenna parameters at pins are lost.
  The oa2lef translator does not output vias that do not belong to default rules.
  You can assign a width (different from the inWidth) on an oaPathSeg, but the oa2def translator does not output this width.
  The oaLefDef package has Purify errors on the Sun 32-bit platform.
  A crash occurs when loading a technology database with constraints in a constraint group.
  When creating a derived technology database, the lef2oa translator sets the value of its units to the value of the units in the base technology database even if the units in the base technology database were not specified, thus causing a conflict.


Version 2.2 P045 Source Code and Documentation Release
Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

The current oacDataModelRevNumber is 3.

Refer to Compatibility for OpenAccess Applications and Data for more information. In addition, refer to the OpenAccess 2.2 Development Feature List for a list of the features included in each version of OpenAccess.

API Change Reports

There are no API changes since the 2.2.6 release.

Fixed Problems
Si2 ITS Issue
  The oaDesign and oaTech::revert() functions might corrupt oaAppObject mapping data.
ITS733 Creating nets with the names \VHDL\, \vhdl\, and VHDL in the oaVhdlNS namespace causes a name-collision exception.
  A missing guard statement (needed to prevent multiple inclusion) in oaFigGroup.h causes a compilation error.
 

When translating a DEF file containing a single site vertical row, def2oa fails with an error stating that the row step size is smaller than the size of the site. (Error ID OALEFDEF-50098)

  The lef2oa translator does not handle RANGE rules correctly.

Version 2.2.6
Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Feature-Based Data Compatibility

OpenAccess includes a new infrastructure to support data compatibility. Data compatibility addresses whether or not the databases written by applications built on one version of OpenAccess can be read or modified by applications using a different version of OpenAccess. In particular, newer OpenAccess releases can include features that have associated data that is not understood by previous versions of OpenAccess.

OpenAccess now provides feature-based data compatibility, which means that new features can be added to OpenAccess in a way that continues to allow newer releases of OpenAccess to be used by older applications.

For example, OpenAccess 2.2.6 includes a new feature called incremental technology databases. This new features allows a design database to reference more than one technology database. Because this means that a new kind of data is added to the data model, the incremental technology database capability is considered a feature. When a database contains one or more instances of this new kind of data, it considered to be using that feature. In many cases, older applications will not be able to use databases that have new features.

When OpenAccess releases a new feature, it increments the data model revision number (oacDataModelRevNumber).

OpenAccess has the ability to control the access that an application has to an OpenAccess database based on

In addition, OpenAccess allows the applications in a flow to specify their level of support for new features when importing data with the OpenAccess translators.

For information about how an application can use feature-based compatibility, refer to Compatibility for OpenAccess Applications and Data.

Compatibility with Earlier Releases

The current oacDataModelRevNumber is 3.

New functions were added to this release, so the oacAPIMinorRevNumber was incremented to 30. Programs compiled with the header files in 2.2.6 or later cannot be used with OpenAccess shared libraries from versions prior to 2.2.6. Programs compiled with versions prior to 2.2.6 will continue to run unchanged with the shared libraries in the current release.

Refer to Compatibility for OpenAccess Applications and Data for more information. In addition, refer to the OpenAccess 2.2 Development Feature List for a list of the features included in each version of OpenAccess.

Reference to vector Removed from oaCommonTypes.h

The following statement has been removed from the oaCommonTypes.h file:

#include <vector>

As a result, you might encounter compilation errors because the class std::vector is no longer defined. To resolve this, add this include statement at the appropriate location in one of your own header files.

Changes and New Features

OpenAccess 2.2.6 includes three new features in the context of feature-based compatibility (as describe above).

Important: Applications that support data model 2 or 3 must modify their code to handle these new features. In the sections that follow, guidelines for the needed modification are called out for each of the three new features.

More information about these features is available in the OpenAccess 2.2 Feature List.

In addition, this release includes numerous enhancements and fixes that do not affect the data model:

Technology Databases

This release of OpenAccess includes support for using multiple technology databases (oaTechs) for a single design.

In addition, this release includes enhancements to existing code to consistently handle any failures related to the bindings between oaDesign and oaTech databases.

Finally, a new gateGrounded attribute on oaTech returns a boolean value indicating whether or not the gates are considered grounded in this technology database.

New Incremental Technology Databases

Applications can now use incremental technology databases to provide technology information from multiple sources, such as the foundry, an IP provider, or a designer, to the application at different points in the design cycle. OpenAccess lets applications incrementally assemble technology information by creating references from one oaTech database to other oaTech databases.

For more information, refer to Incremental Technology Databases in Using Technology Databases in the Programmers Guide.

Note: There is currently a known issue when using built-in constraint groups across incremental technology databases. Refer to Known Problems and Solutions for details.

Modifying Your Code to Use this Feature

Most applications based on OpenAccess need access to the technology database. For example, any application that examines graphical data must access layers and via definitions. Applications reading technology databases might encounter incrementally defined databases. This requires defining observers to detect and report conflicts that can occur when a technology database is edited out of context of a larger graph in which it is used. The HelloWorld Example contains sample code that creates such observers.

In addition, applications that use technology objects must be aware that two technology objects referenced from the same design might be defined in different technology databases. Applications can no longer assume that the technology database containing the technology object in question is the sole technology database for the design.

Finally, when creating a technology object, an application must be prepared to handle the exception thrown if the object it is attempting to create conflicts with another object in the graph of referenced technology databases.

Binding Between oaDesign and oaTech Databases

When working with oaDesign and oaTech databases, the most efficient flow is to open and edit the oaTech databases as early as possible, then open the oaDesign databases.

OpenAccess has been enhanced to ensure that any binding failures between oaDesign databases and oaTech databases are handled consistently.

The sections that follow provide more detailed information about these changes.

More Proactive Binding Between oaDesign and oaTech Databases

The binding between oaDesign and oaTech databases is more proactive than in previous OpenAccess releases. When an oaDesign that contains objects that use technology database information (such as vias or rows) is opened, the relevant oaTech database is always opened and bound if possible. All dependent objects are bound as well.

Design Objects That Reference oaTech Objects

When creating a design object that references an oaTech object, a NotInTechAssociatedWithDesign exception is thrown if the referenced oaTech object is not in the technology database to which the design is bound nor in the graph of referenced oaTech databases (if incremental technology databases are used).

For example, the following function throws an oacViaDefNotInTechAssociatedWithDesign exception if the given technology object is not in the technology database to which the design is bound nor in the graph of referenced oaTech databases.

oaCustomVia::create(oaBlock              *block,
                    const oaCustomViaDef *viaDef,
                    const oaTransform    &xform,
                    const oaParamArray   *params)

Other similar cases include:

oaStdVia::create()
oaRow::create() 
oaAnalysisOpPoint::create() 
oaPRBoundary::setCoreBoxSpec() 
oaRowHeader::find() 
oaViaHeader::find() 

In previous releases, an oacCannotFindTechForDesign exception was thrown.

Vias and Via Definitions

When reading in the vias for a design, OpenAccess attempts to bind the vias to their via definitions. This might require binding the design to its technology database. In previous versions, OpenAccess threw an exception if the binding failed. Now OpenAccess leaves the oaViaHeaders unbound instead.

In addition, an attempt to bind a via definition to a via of a different data type results in an exception.

Region Query

Region query now tolerates cases in which a design cannot be bound to its technology database.

Moving or Copying Vias

Copying or moving a via from one design to another does not make sense if doing so results in binding the via to a different via definition. For example, when copying a via, the name of the related via definition might refer to an oaStdViaDef in the source oaTech database, but an oaCustomViaDef in the target oaTech database. Previous versions of OpenAccess did not check for this case, which could cause a crash or corrupt the target design.

OpenAccess now verifies that the source and target designs refer to exactly the same via definition (not equivalent ones). An exception is thrown otherwise.

New oaFigGroup Object

Graphical design-entry tools can use the new oaFigGroup object to hold a set of figures for easy replication and reuse. An oaFigGroup is purely geometric and does not contain connectivity objects (or anything that is not a figure).

For more information, refer to the documentation for the following classes:

Modifying Your Code to Use this New Feature

If your application does not access geometrical data (oaFigs), the oaFigGroup feature does not affect your application. Queries of oaFigs are unchanged, as oaFigs in oaFigGroups are handled by existing region query calls. If your application uses oaFigs solely to query them, you might not need to handle this feature.

If your application handles the selection of graphical objects, you might want to support selection of oaFigGroups by using the new oaRegionQuery class for oaFigGroups. An oaFigGroup can be a member of an oaGroup, so code that iterates through oaGroups must tolerate the presence of oaFigGroups.

New Constraints for 65 Nanometer and Custom Designs and Enhanced Derived Layer Support

OpenAccess provides new constraints to support 65 nanometer and custom designs, and existing constraints have been enhanced. Derived layers have also been enhanced.

New Layer Constraints
New Layer Pair Constraints
New Simple Constraints
Enhanced Layer Constraints

oacMinDualExtension has the following new valid value type.

New Valid Value Type

oaIntDualIntArrayTblValue

When an array of value pairs is assigned for a given width, width is expressed as an oaInt4, the array is an oaDualIntArray, and the value type is an oaIntDualIntArrayTblValue.

oacAntenna has the following new parameters.

oacAntennaAreaFactorConstraintParamType

oaFloatValue

Specifies the metal factor. Depending on the value of the isSide attribute, this parameter represents one of the following:

  • The areaFactor (when calculating antenna/gate area ratios using metal area)

  • The sideFactor (when calculating antenna/gate ratios using metal side area)

The default value for this parameter is 1 in both cases.

oacAntennaDiffPlusFactorConstraintParamType

oaFloatValue

Specifies the diffPlusFactor. The default value for this parameter is 0.

oacAntennaDiffMinusFactorConstraintParamType

oaFloatValue

Specifies the diffMinusFactor. The default value for this parameter is 0.

oacAntennaDiffAreaReduceFactorConstraintParamType

oaFlt1DtblValue

Specifies the diffMetalReduceFactor. This table stores the factors based on the diffusion area. These values typically are in the range of 0 to 1. The default value for this parameter is 1.

oacAntennaCumRoutingPlusCutConstraintParamType

oaBooleanValue

Specifies the cumRoutingPlusCut. This parameter determines how the cumulative antenna ratios for metal and cut layers are calculated. The default value for this parameter is false.

oacMinSpacing has the following new parameters.

oacWidthLengthTableTypeConstraintParamType

oaIntValue

Specifies how the oaInt2DTblValue table, supplied as the constraint value, is interpreted by applications. There are two possible interpretations:

  • The allowed spacing is based on the width of the wider shape and the parallel run length between the two shapes.

  • The allowed spacing is based on the widths of both shapes.

oacDistanceMeasureTypeConstraintParamType

oaIntValue

Specifies whether the distances are measured as Euclidean (which is the the default) or Manhattan.

oacMinClearance has a new parameter and a new valid value type.

oacDistanceMeasureTypeConstraintParamType
oaIntValue Specifies whether the distances are measured as Euclidean (which is the default) or Manhattan.

New Valid Value Type
oaInt2DTblValue Specifies the required clearance width as a function of two keys.

oacMinExtension has the following new parameter.

oacDistanceMeasureTypeConstraintParamType
oaIntValue Specifies whether the distances are measured as Euclidean (which is default) or Manhattan.

oacMinSameNetSpacing has the following new valid value type.

New Valid Value Type
oaInt1DtblValue Specifies the dependency of the net spacing on the width of the shape on the net.
New Built-In Constraint Parameter Types
Constraint IDs and Descriptions

A constraint ID and a string description can be added to constraints.

New Default Constraint Groups

Default constraint groups have been added to objects that formerly did not have default constraint groups.

For more information, refer to the following:

Enhanced Derived Layers

The oaDerivedLayer class provides several new features:

Refer to the following functions in the oaDerivedLayer class documentation for more information.

oaDerivedLayer* oaDerivedLayer::create(oaTech*                             tech,  
                                       const oaLayer*                      layer1,  
                                       const oaDerivedLayerDef*            def,  
                                       const oaString&                     name,  
                                       oaLayerNum                          number,  
                                       const oaDerivedLayerParamArray *    params = NULL 
                                       )  [static] 
oaDerivedLayer* oaDerivedLayer::create(oaTech*            tech,  
                                       oaLayer*           layer1,  
                                       oaLayer*           layer2,  
                                       oaLayerOp          operation,  
                                       const oaString&    name,  
                                       oaLayerNum         number 
                                       )  [static] 
oaDerivedLayer* oaDerivedLayer::find(const oaTech*                      tech,  
                                     oaLayerNum                         layer1Num,  
                                     oaLayerNum                         layer2Num,  
                                     const oaDerivedLayerDef*           def,  
                                     const oaDerivedLayerParamArray*    params = NULL,  
                                     oaBoolean                          local = false 
                                     )  [static] 


oaDerivedLayer* oaDerivedLayer::find(const oaTech*                      tech,  
                                     oaLayerNum                         layer1Num,  
                                     const oaDerivedLayerDef*           def,  
                                     const oaDerivedLayerParamArray*    params = NULL,  
                                     oaBoolean                          local = false 
                                     )  [static] 

Note: The oaSizedLayer class has been deprecated. This type of layer should be expressed as an oaDerivedLayer.

New Derived Layer Definition

The oaDerivedLayer class defines a derived layer, which is formed from the combination of two layers and a layer operation. Refer to the class documentation for oaDerivedLayerDef for more information.

New Derived Layer Parameters

The oaDerivedLayerParam class describes additional information for derived layers. Some layer operations require one or more parameters, such as shrink or grow operations. In such cases, an array of oaDerivedLayerParam objects can be associated with the derived layer.

New Derived Layer Parameter Definition

The oaDerivedLayerParamDef class enforces the value type of a derived layer parameter.

New Layer Operations

The oaLayerOpEnum includes new enum values for additional operations.

enum oaLayerOpEnum {
    // Existing enumeration values go here.
    oacInsideLayerOp                    = 6, 
    oacOutsideLayerOp                   = 7,
    oacOverlappingLayerOp               = 8,
    oacStraddlingLayerOp                = 9,
    oacAvoidingLayerOp                  = 10,
    oacButtingLayerOp                   = 11,
    oacCoincidentLayerOp                = 12,
    oacCoincidentOnlyLayerOp            = 13,
    oacEnclosingLayerOp                 = 14,
    oacButtingOrCoincidentLayerOp       = 15,
    oacButtingOrOverlappingLayerOp      = 16,
    oacAreaLayerOp                      = 17,
    oacGrowLayerOp                      = 18,
    oacShrinkLayerOp                    = 19,
    oacGrowVerticalLayerOp              = 20,
    oacGrowHorizontalLayerOp            = 21,
    oacShrinkVerticalLayerOp            = 22,
    oacShrinkHorizontalLayerOp          = 23
};
New Layer Array Constraint

The oaLayerArrayConstraint class defines constraints for three or more layers.

New oaValue Subtypes

Four new oaValue subclasses support new constraints and derived layers:

Modifying Your Code to Use These Features

If your application does not query for or create constraints or layers, you do not need to modify your code to handle these new features.

If your application does query for or create constraints, you must complete the following tasks.

New Text bBox Plug-in Architecture

OpenAccess now includes a plug-in infrastructure that lets an application calculate its own bBoxes for text labels. For more information, refer to How to Write a Plug-in to Calculate Bounding Boxes for Text.

Changes to Existing bBox Functionality

For oaAttrDisplay and oaInstAttrDisplay objects, the OpenAccess native bBox implementation (the default) now calculates the bBoxes based on the oaNativeNS mapped string. In previous versions, the bBoxes were calculated based on strings mapped in the namespace used in previous calls to oaAttrDisplay::getText and oaInstAttrDisplay::getText previously (if any). Otherwise, the oaNativeNS mapped string was used.

If a design has oaInstAttrDisplay, oaInstPropDisplay, or oaTextOverride objects, these objects might become unbound when the design is opened and the master design is not already open. In previous versions, OpenAccess did not check if these objects should be unbound.

Enhanced Documentation on Extending the Database

The OpenAccess documentation has been enhanced to include a list of all classes that can be extended using properties and oaAppDefs. Refer to Which Classes can be Extended in the Programmers Guide for details.

Implementation Change for oaObserver

The implementation of the oaObserver class has changed. This change is transparent and applications must continue to use oaObserver as before. This description is provided for informational purposes only.

The oaObserver template class and its specializations have been replaced with the oaVersionedObserver template and corresponding specializations. This template has an additional non-type template argument for the version of the observer. The oaObserver identifier is defined in the header files as oaVersionedObserver. This change was required to add new virtual functions to the specialization of oaTech. Application code must reference oaObserver—direct reference of oaVersionedObserver is not supported.

Enhancements to Global Nets

The behavior of OpenAccess APIs with regards to global nets has been enhanced. The consistency of the global state of a net is now preserved across the OpenAccess hierarchy domains. This statement has several implications:

For more information, refer to Global Nets in the Programmers Guide.

New oaTech Attachment Functions

This release includes new APIs for working with attached technology libraries. An application can now detach a technology database that is currently open for a design and reattach a different one.

Note: Using attached technology databases is not the same as using referenced incremental technology databases. Refer to the oaTech class documentation for more information.

void oaTech::attach(oaLib              *lib,
		    const oaScalarName &attachLibName
		    ) 


void oaTech::detach(oaLib    *lib) 


oaBoolean oaTech::hasAttachment(const oaLib    *lib) 


void oaTech::getAttachment(const oaLib     *lib,
		           oaScalarName    &attachLibName
	                   ) 

To support backward data compatibility, the previous mechanism for attaching technology libraries is still supported. Namely, a string property called techLibName in a library’s oaLibDMData database still specifies the name of the target library. The oaTech::attach function creates the techLibName property when it is called. In order to construct the name of the library, the techLibName string is interpreted in the oaNativeNS namespace.

New observers are available for the new APIs.

onPostAttach(oaLib *lib,  const oaScalarName &attachLibName)
onPostDetach(oaLib *lib)
onPreAttach(oaLib *lib,  const oaScalarName &attachLibName)
onPreDetach(oaLib *lib)
Translator Enhancements

Support for Incremental Technology Databases

The lef2oa, def2oa, strm2oa, and verilog2oa translators can create incremental technology databases with the -techRefs option. Refer to the individual translator documentation for more information.

Using the lef2oa Translator with Incremental Technology Databases

The lef2oa translator should not add routing layers or default vias in a derived technology database if one of the referenced technology databases has a LEFDefaultRouteSpec constraint group.

The lef2oa translator creates an explicitly named constraint group called LEFDefaultRouteSpec to store information about layers and default vias (VIAs in LEF that have the DEFAULT keyword). Because a graph of technology databases can contain only a single constraint group with that name, lef2oa cannot add or change layers or default vias in a derived technology database if one of the referenced technology databases already contains the LEFDefaultRouteSpec constraint group.  This is not a problem if the layer and default via definitions in the LEF input match the definitions in the referenced technology database.

The base technology database hierarchy should contain a full set of layer and default via definitions, and subsequent derived technology databases created by lef2oa should be used only to add sites, via-rules, non-default vias, non-default-rules, and macros.

Alternatively, you can create an incomplete base technology database with lef2oa, then add layers and default vias to a derived technology database using lef2oa. You need to remove the LEFDefaultRouteSpec using the OpenAccess Tcl bindings after running the first lef2oa operation.

lef2oa and oa2lef Translators

The lef2oa and oa2lef translators now support LEF 5.6 constructs and create OpenAccess constraints (instead of properties) for these constructs. You must set the -dataModel argument to 3 to enable creation of the LEF 5.6 constraints. Refer to the translator mapping documentation for more information.

Optionally Building lef2oa or oa2lef

If you need to build the LEF translators (which is optional), the def_5.6.tar.Z and lef_5.6.tar.Z kits are now required.

Refer to the OpenAccess Installation and Configuration Notes for more information about building the translators.

def2oa Translator

The def2oa translator has a new -layerMap option to specify a layer mapping file. The translator reads the mapping file before looking up layer names in the technology database, which means users can map layer names to existing layer names in the technology database.

Refer to DEF to OpenAccess Translator (def2oa) for more information.

verilogAnnotate Translator

The verilogAnnotate translator now treats "tristate" as equivalent to "output" for consistency purposes. Ports declared as "output" in Verilog that have an existing oaTermType of "tristate" retain the "tristate" oaTermType.

oa2strm Translator

The oa2strm translator now accepts multiple cell names for translation.

Refer to OpenAccess to Stream Translator (oa2strm) for more information.

Translator API Changes

The following changes have been made to the translator APIs. Applications that derive from the OpenAccess translators must modify their code accordingly.

oaStrm API Changes
oaLefDef API Changes

The LEF/DEF translator components were restructured to handle incremental technology databases.

API Change Reports

View a summary  of the OpenAccess 2.2.6 release changes with respect to 2.2.5.

Fixed Problems
Si2 ITS Issue
ITS715 The Turbo DM system fails to close its standard error file descriptor.
ITS779 Special net path segments, as opposed to regular routing, should automatically extend the path by (path-width)/2 on end-points.
ITS788 The oaDesign::open function crashes if oaCouplingCaps were removed from the design in a previous session.
ITS807 Using the verilog2oa translator with the -shared option throws an exception.
ITS806 The spef2oa translator should throw an exception if the given design does not have a top block to annotate.
ITS800 The oa2verilog translator should create a concatenation if the bit order of the oaBusNet does not match the bit order of the oaBusNetDef.
ITS710 Automatic global block net conflicts with an explicit global mod net.
ITS823 Enhance the information about physical-only objects in the documentation for the OpenAccess DEF translators.
ITS817 Update the documentation for the verilogAnnotate executable to match the implementation.
  Global net information can be corrupted when reading a database that contains a large number of deleted nets.
  The lef2oa translator should accept duplicate points in via polygon shapes.
  oaDesign::open() fails when a defragmentation is occurring.
 

Connecting a block net that is a reflection of a set of partially connected nets in the module domain to an oaInstTerm in the block domain can cause data corruption.

  Copying an instance across designs causes a crash due to memory problems.

Version 2.2.5

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

New functions were added to this release, so the oacAPIMinorRevNumber was incremented to 21. Programs compiled with the header files in 2.2.5 or later cannot be used with OpenAccess shared libraries from versions prior to 2.2.5. Programs compiled with versions prior to 2.2.5 will continue to run unchanged with the shared libraries in the current release.

The current oacDataModelRevNumber number is 1. Refer to Compatibility for OpenAccess Applications and Data for more information.

Changes and New Features

OpenAccess is Available on the Solaris 10 (x86_64) Operating System

OpenAccess is available on the solaris operating system 10 (x86_64). The supported compiler is Forte Developer/Studio 11 C++ 5.8.

Enhancements to Undo and Redo Functionality

OpenAccess provides two use models for performing undo and redo operations:

In previous releases, there was a potential ambiguity in the pre checkpoint model. Consider this example:

If an application issued an undo command after setting checkpoint 3, the expectation might be that checkpoint 3 would be removed, but rect2 would remain intact. In reality, OpenAccess destroys rect2 in this situation.

In order to remove any confusion, OpenAccess provides two new APIs:

OpenAccess also provides new functions that can help applications synchronize the undo state for multiple designs. These functions let applications get and set IDs for checkpoints:

Enhancements to oaInstTerm::create and oaModInstTerm::create

OpenAccess now provides two use models for creating instTerms in the block and module domain:

In previous releases, applications could create only one instTerm with each function call. This single model works well for interactive applications or applications that do not know in advance how many instTerms will be created on a single instance. The new batch model improves performance by optimizing the process of instTerm creation when applications know in advance how many instTerms will be created on the instance.

To support batch instTerm creation, OpenAccess provides the following new public classes and functions. 

Public Classes
Public Functions
class oaInstTerm
    static void                create(oaInst                        *inst,
                                      const oaNetTermArray          &connData,
                                      oaBlockDomainVisibility       view = oacInheritFromTopBlock);

    static void                create(oaInst                        *inst,
                                      const oaNetTermNameArray      &connData,
                                      oaBlockDomainVisibility       view = oacInheritFromTopBlock);

    static void                create(oaInst                        *inst,
                                      const oaNetTermPosArray       &connData,
                                      oaBlockDomainVisibility       view = oacInheritFromTopBlock);


class oaModInstTerm
    static void                create(oaModInst                     *inst,
                                      const oaModNetTermArray       &connData);

    static void                create(oaModInst                     *inst,
                                      const oaModNetTermNameArray   &connData);

    static void                create(oaModInst                     *inst,
                                      const oaModNetTermPosArray    &connData);

Minimizing the Use of Virtual Memory

OpenAccess provides new functions for minimizing the amount of virtual memory used by an application on OpenAccess. These functions should be used only when needed because they can significantly impact the performance of subsequent operations.

Spice Namespace

Name mapping for the OpenAccess Spice namespace is now properly case-insensitive and case-preserving.

Two scalar names initialized with the strings "abc" and "Abc" in a case-sensitive namespace are now mapped to "abc" and "%Abc" in the  Spice namespace. A name initialized in the Spice namespace with the strings "%Abc" or "%abc" is mapped to "Abc" in a case-sensitive namespace, such as the OpenAccess native namespace.

Translator Changes

Change to Translator Argument Names

In previous versions of OpenAccess, each translator used different options and conventions for describing the set of reference libraries and views to translate. For example, verilog2oa used the -leafLibs and -leafViews options, whereas def2oa used -masterLibs and -masterViews. All translators now use standard options named -refLibs and -refViews.

Refer to the documentation for the individual translators for more information.

Note: The old options are still supported, but they generate warnings.

lef2oa Translator

The lef2oa translator can create oaAttrDisplay objects for each pin shape on an oaTerm. You can specify the layer name for the text and the height of the text. If the text layer does not yet exist, it is created (if the technology database is writable). The text is always written with the purpose "drawing".

The following new options are available:

In addition, in earlier lef2oa implementations, the order of SPACING statements in the input file affected the generated spacing table. Now the SPACING statements are sorted before processing so that the spacing tables are the same regardless of the order of the SPACING statements.

def2oa and oa2def Translator
strm2oa Translator
oaStrm API

The strmOut class was updated to support via and cell name mapping. In addition, the layerMapIn class was updated to address a problem related to the paths in map files.

There oaStrm translator APIs that involve the name mapping from Stream structures to lib/cell/view names have changed.

LEF and DEF API

The DefInNet::createVia function, which used to take an oaPoint, now takes an oaTransform. This change supports rotated vias in DEF 5.6. Derived translators that inherit from DefInNet need to change the signature of the derived createVia function. They do not have to change calls to this function because an oaPoint can be cast to an oaTransform.

oaVerilog API

The Verilog translator API has been converted to use batch instTerm creation.

API Change Reports

View a summary  of the OpenAccess 2.2.5 release changes with respect to 2.2.4.

Fixed Problems

Issue Si2 ITS
  The oa2def translator should provide unique names for vias if there are conflicts with existing customViaDefs.
  The lef2oa translator fails when attempting to update a constraint value to a different value type.
  The lef2oa translator fails to display pin labels.
  OpenAccess translators should check for a local design technology database before creating an attached technology database.
ITS763 If the occurrence hierarchy is expanded into a design with a global net and there are no global nets in the top occurrence, getMasterOccurrence() causes a crash.
ITS767 The oaDesign::getSubMasters() function should throw an exception if the design is not a superMaster.
  The spef2oa translator error message uses the wrong file name.
  The strm2oa translator should print warnings for duplicate properties and continue with the translation.
  The strm2oa translator should automatically detect oaVias.
  The lef2oa translator should not overwrite busBit/divider characters or the overlap layerName in the technology database.
  The def2oa translator uses the wrong namespace when the -noModHier option is specified.
  OpenAccess should consider the global state of the net when seeding the preferred equivalent in the block domain.
  The oaGetVersion script fails on the IBM-AIX and HP-UX platforms.
  The strm2oa translator creates inappropriate variants when there are more than 20,000 cellViews.
  Certain OpenAccess Tcl commands crash instead of issuing error messages for invalid parameters.
  The strm2oa translator crashes instead of issuing an error if data in the target library prevents the translation.
  When destroying an oaNet, the connections to other objects must be removed first.
  The lef2oa translator ignores a correct macro pin statement.
  The lef2oa translator does not translate an ANTENNAGATEAREA whose value is zero.
  The lef2oa translator error message OALEFDEF-50051 should not append _via to missing via names.
  Incomplete hierarchy written by the oa2verilog translator.
  Given a module hierarchy with oaModVectorInsts that are not at the top level, scalarize and uniquify do not produce the correct results.
ITS696 oaOccMemNetIter::getNext() results in a crash.
  Legend for hierarchy domains in the EMH documentation should be consistent.
  Applications sometimes hang when using the DM Turbo System due to unnecessary attempts to connect to the server.
  The oaGetLibPath script on the HP-UX and Linux platforms issues an error message instead of returning the path to the libraries.
  The lef2oa translator should issue warnings for missing layers and continue with the translation.
  When creating layers in an existing technology database that has derived layers, the lef2oa translator throws an invalid layer exception.
  The oa2lef translator should output only one style of SPACING rules.
  oaShapeQuery returns a polygon with a non-orthogonal edge that is completely outside of the query box.
  oaConstraintParamDef::find() should find built in paramDefs.
ITS758 In the Verilog, SPEF, LEF, DEF, and SPF namespaces, the exception message for the oacInvalidCharFollowingEscChar exception is truncated.
  OpenAccess should throw an exception if an application attempts to write to a lib.defs file that is found through a symbolic link.
  If you perform an oaDesign::setCp() followed by an oaDesign::undo(), actions before the checkpoint can be undone.
  OpenAccess should issue an error message when a lib.defs file contains an ASSIGN statement for a library that does not have a DEFINE statement.
  oaBlock::destroy( ) makes an EMH design unusable.
  Module connectivity is lost after making a block-only edit in the block domain.
  The strm2oa translator loses paths when you attach a map file.
  oaParasiticNetwork::getPartitions() crashes when called on a object without partitions.
  If you copy an oaPRBoundary object with layer and area halos to a different design, the resulting layer halo is incorrect.
oaIter should handle an empty collection, not throw an exception.
The translation does not work correctly if you use lef2oa on a file with antenna data before using lef2oa on the file containing the geometry.
You should be able to specify an empty library name (“”) in the cell map file to cause the strm2oa translator to search all the reference libraries.
The OpenAccess Spice namespace should preserve the casing of names.
ITS798 The oaModDesignInst::setMaster call is not propagated to occurrences beyond the module’s occurrence.
Batch oaModInstTerm::create() can fail to create all the requested instTerms.
ITS730 oaOccNet::getGlobalNets() should throw an exception if the net is not global.
oaDesign::open crashes if the oaCouplingCaps were removed in the previous session.
  Copying an instance across designs causes a crash due to memory problems.

Version 2.2.4

Compatibility with Earlier Releases

Functions were added in this release, so the oacAPIMinorRevNumber was incremented to 17. Programs compiled with the header files in 2.2.4 or later cannot be used with OpenAccess shared libraries from versions prior to 2.2.4. Programs compiled with versions prior to 2.2.4 will continue to run unchanged with the shared libraries in the current release.

The current oacDataModelRevNumber number, which represents the version of the OpenAccess data model, has been incremented to 1 due to the addition of the Huge Database feature. Refer to Feature-Based Compatibility  for more information.

Feature-Based Compatibility

OpenAccess adds new kinds of data to the data model as newer versions are released. For example, OpenAccess might add new kinds of figures or add support for very large databases.

Each new kind of data added to the data model is called a feature. When a database contains one or more instances of the new kind of data, then it is using that feature. In many cases, older applications will not be able to use databases that have new features.

OpenAccess now includes the infrastructure to support feature-based compatibility. Feature-based compatibility addresses whether or not the databases written by applications built on (or running against) one version of OpenAccess can be read or modified by applications on a different version of OpenAccess.

For more information about feature-based compatibility, refer to Applications Can Specify Supported Data Model Revision.

Argument Validation for Connectivity Creation Functions

The argument validation for all connectivity creation functions has been updated for consistency. This affects the validation for creation functions in oaNet, oaBusNet, oaModNet, oaModBusNet, oaTerm, oaBusTerm, oaModTerm, and oaModBusTerm. Applications might now get different exceptions for errors than in previous builds of OpenAccess. However the set of possible exceptions has not changed.

Changes and New Features

Applications Can Specify Supported Data Model Revision

OpenAccess has a new version of its init functions that an application can use to specify the version of the data model (dataModelRev) that it supports. OpenAccess uses this information to determine whether the application can open databases containing features supported in higher data model revisions.

extern void oaDesignInit(oaUInt4  apiMajorRev,
                         oaUInt4  apiMinorRev,
                         oaUInt4  dataModelRev);

extern void oaTechInit(oaUInt4    apiMajorRev,
                       oaUInt4    apiMinorRev,
                       oaUInt4    dataModelRev);

extern void oaWaferInit(oaUInt4   apiMajorRev,
                        oaUInt4   apiMinorRev,
                        oaUInt4   dataModelRev);

extern void oaDMInit(oaUInt4      apiMajorRev,
                     oaUInt4      apiMinorRev,
                     oaUInt4      dataModelRev);

For example, an application might specify a lower dataModelRev in the oaDesignInit() function to indicate that it does not yet support a new feature, such as Huge Databases, which is defined in the OpenAccess shared libraries with a higher dataModelRev that the application is building against.

The application can call these functions multiple times, but the dataModelRev numbers specified in those calls must be consistent or OpenAccess will throw an exception. The release notes for each OpenAccess release will include information about the current dataModelRev number and any new features included in that release. For more information about these functions and how they affect compatibility, refer to Compatibility for OpenAccess Applications and Data

Note: Applications should use the new init functions as the older versions are considered deprecated. For applications that continue calling the older versions of the init functions, OpenAccess will use the data model revision that is defined as the default (oacDataModelRev) in the kit the application was built against, which indicates that the application fully supports the data model defined by the OpenAccess kit.

Opening Very Large Databases (Huge Databases Feature)

OpenAccess now provides the ability to open very large database in which a single type of data takes over 4 Gbytes of memory.  Refer to the OpenAccess 2.2 Feature List for more information about this feature (which is called Huge Databases).

oa2verilog Translator Enhancement

If an OpenAccess module is created without using the verilog2oa translator, it may not be possible to accurately represent the interface to the module in the Verilog language. This commonly occurs when a bit-wise netlist format such as LEF/DEF is used to create leaf cells that have ported busses because the Verilog language does not allow named connections to individual bits of a bus without creating aliases. In such cases, the verilogAnnotate program is used to define the module interface so that it can be expressed using legal port identifiers.

If verilogAnnotate was not used, oa2verilog has been enhanced to take a “best guess” regarding what the interface to the design should be. When guessing, oa2verilog groups the bits of busses together as long as the bits are either monotonically increasing or decreasing.

Improved Error and Warning Messages

The OpenAccess translators have been enhanced to use a standard message format to ensure comprehensive and consistent messaging. In addition, the translator messages have been improved for usability. See the information about interpreting error and warning messages in the individual translator documents for more information.

Plug-In Registration Files on Windows

String values in the OpenAccess plug-in registration files use the backslash (\) as an escape character. The escape character itself is ignored and the next character is used literally. As a consequence, a backslash character in a string must be represented with two backslashes (\\), and a double quote can be represented with a backslash and a double quote (\”). Strings that represent file paths on the Windows platform must have double backslash characters. For example, the path C:\work\designs should be represented as:

"C:\\work\\designs"

Tcl Changes

The shared libraries for the Tcl bindings of the OpenAccess API are reorganized. This affects only C++ code that leverages the Tcl bindings as described in the section of the Tcl Bindings for OpenAccess APIs document titled C++ Access from Tcl. This reorganization does not affect Tcl scripts that employ Tcl OpenAccess commands.

The single oaTcl shared library is now repackaged with five additional shared libraries.

Shared libraries for custom Tcl bindings, which were previously linked to the single oaTcl shared library, must now be linked to oaTclBase, oaLangInfo, oaTclCommon, oaLangBase and oaTclPlugIn. The previous statement to include the header file oaTcl.h must now be replaced with the statement to include oaTclBase.h.

Performance Improvement for oaInstTerm::find() and oaOccInstTerm::find()

The performance of oaInstTerm::find() and oaOccInstTerm::find() are improved for instances in the block domain that have many terminals. In addition, two new oaOccInstTerm::find() methods are added for finding the oaOccInstTerm corresponding to an oaOccInst and either an oaModTerm or an oaTerm.

Parasitics

If an application reads a design with parasitics, but does not explicitly access those parasitics, then the files containing the parasitic data are not opened (as they were in previous releases). This leaves more file descriptors available for other uses.

API Change Reports

View a summary  of the OpenAccess 2.2.4 update release changes with respect to 2.2.3.

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Fixed Problems

Issue Si2 ITS
The LEF and DEF translators require several fixes for LEF 5.6 constructs.  
The oa2lef translator should not output spacing rules that refer to Nwell/Pwell layers  
In a large design, oaModule::destroy() on a single module has poor performance.  
The documentation for oaOccurrence::uniquify() should state that calling uniquify on an occurrence invalidates all object pointers to that occurrence and to all occurrence objects in the hierarchy of that occurrence.  
A crash occurs if a via in a design references a viaDef in an attached technology database that is not accessible.  
oaDefNS is not implemented in the OpenAccess Tcl binding.  
Creating global blockNets can cause a crash or data corruption.  
A segmentation fault occurs when using oa2def because the pCell plug in cannot be found.  
The oa2lef translator fails to translate default vias.  
The lef2oa translator incorrectly creates two views per LEF MACRO if a FOREIGN statement is found.  
The def2oa translator issues error messages and fails to process a DEF file with feedthrough pins.  
In certain cases, the oa2def translator incorrectly produces a DEF file with TAPER statements.  
The lef2oa translator should not issue an error if unneeded DENSITY information is included in the LEF file.  
OpenAccess incorrectly interprets names such as \k#001 or I_001 in the Verilog name space. ITS731

If a large amount of module data is removed from a design that contains equivalent modNets, the database is corrupted the next time it is read -- for example, this can occur if you use the verilog2oa –top option and a significant number of Verilog modules are not in the module hierarchy of the module specified as the top module.

 
Using the verilog2oa translator with the -blackBox option incorrectly creates stub designs without top blocks for empty modules.  

Using the verilog2oa -top option takes an unreasonably long time if the specified module is not the top module in the Verilog input.

ITS736
Concurrent lib.defs file accesses can cause a crash.  
Create a new Feature to handle databases with a single table over 4 Gbytes.  
oaGroup::setLeader() does not enforce the group type restriction.  
The def2oa translator should allow Net Weight limits greater than 128.  
The oa2verilog translator mishandles feedthroughs created by DEF.  
If you create a global scalarModNet, then try to create a global bundleNet that contains the scalarNet, a crash results. ITS711
The bounding box is lost when copying a custom via to another cellView.  
Copying a pCell instance creates a duplicate subHeader.  
Embedding designs that were not explicitly opened causes a core dump. ITS699
Base stream translator implementation prevents derived translators from including definitions for instances that are instantiated in pCells.  
The ASSIGN keyword in a lib.defs file should allow concatenation to previous entries. ITS714
Need better error messages for issues related to reading lib.defs files.  
The def2oa translator does not reset the routing rules when processing multiple DEF files, and a segmentation fault occurs.  
The lef2oa translator crashes when you use the -version argument.
 
Performance issue when opening pCells.  
oaNode::addConn should throw an oacInvalidNodeConnNet exception if the node and the conn are not on the same or equivalent nets (in the block domain).  
SPEF translator crashes if parasitic network includes elements from equivalent nets  
The oa20to22 translator omits viaSpecs that do not have widths.  
The oaNet::find function returns an invalid net.  
postDefragmentation of instTerm data should update the indices of the list of single-bit instTerms associated with a multi-bit instTerm; Otherwise, a crash occurs.  
When copying the leader of an oaGroup that contains an oaInst as a follower, the overload of oaInst::copy that is used to copy the follower does not work properly.  
Incorrect mapping of the DEF pin placement status by DEF translators. ITS706
If extensions have never been in the sparse state, the extension data is not written to disk.  
The oaBlockage owner is not updated after defragmentation. ITS712
The TCL_HOME environment variable should be documented.  
oaModNet::setGlobal(false) can cause a crash if the net is in a module that is not in the hierarchy of the top module.  
The verilog2oa report should include information about pruned cells and leaf overrides.  
The oa20to22 translator should create pitch and offset in all four directions.  
The cellView contents and status are incorrect if you open a cellView in append mode, reopen the cellView in write mode, modify the cellView, then undo the operation.  
The oa20to22 translator converts pCell instances into regular instances and converts props to params, but OpenAccess fails to convert the props back to params when binding occurs.  
Cannot scalarize single bit wide bus nets.  
Segmentation fault in oaModInstTerm::create. ITS697
busTerm/busTermBit data is corrupted after performing certain types of net merges.  
oaDMFile attachments are not persistent when using the Turbo DM system. ITS532
The function oaCellView::get(oaLib*, const oaScalarName &cellName, const oaScalarName &viewName, oaViewType *viewType) should check for duplicate oaCellViews instead of crashing. ITS669
The Turbo DM system writes an incorrect oaCell name that cannot be reopened. ITS685
Compiling code that uses oaTcl headers with the +w option on Solaris causes a number of warnings.  
The output library of the strm2oa command with the -cell option does not contain the named cell.  
The lef2oa translator should let you specify the viewName for container views created when FOREIGN statements are used in the LEF file.  
The def2oa translator incorrectly puts FILLS statements at the end of the DEF file.  
The oa2lef translator does not output SITE orientation correctly.  
The def2oa translator does not allow a NONDEFAULTRULE defined in DEF file to be used as a TAPERRULE in the NETS wiring statement.  
Marker information for a copied pin is lost.  
oaPointArray::isSelfIntersecting returns incorrect results. ITS701
For a design with pCells, oa2verilog correctly outputs a module definition for each submaster, but incorrectly uses the supermaster's name for the module definitions. ITS686
Shorted nets should be considered equivalent nets. ITS694
Performance issue on UNIX related to file I/O.  
The verilogAnnotate executable does not work if there are bad references in the lib.defs file.  
The verilog2oa translator should not open the first leaf library in non-shared, write mode when accessing the technology database in order to create the tech property in the design library.  
When programmatically calling the VerilogOut::writer() a second time with a new VerilogOut object, no module hierarchy is produced.  
The verilog2oa translator should provide information about generated black boxes.  
The strm2oa translator is very slow when a huge number of layerMap entries are present.  
Row and column parameters should be treated as a set, but an assertion should not be thrown if one value is a default, and one is not.  
Performance is poor for finding an instTerm when given an instance and a terminal in its master.  
Performance for the verilog2oa translator degrades when a design has many nets that have a large number of equivalent nets.  
The oa20to22 translator loses connectivity when translating geometric routes.  
Calling oaDesign::getConstraintGroup() causes an application crash.  
The lef2oa translator crashes when multiple layer statements use the same layer name.  
Revert and undo of cellview edits restore the wrong timestamp value.  
The oa2def translator crashes reporting that the master component for an instance is not found.  
The verilogAnotate executable crashes when module bodies contain translation issues such as missing masters.  
oaLibDefList::openLibs treats INCLUDE warnings as syntax errors.  
Implicit modNets with implicit modInstTerms, which are connected to explicit modTerms with explicit modNets, are incorrectly reflected in the block domain after scalarize.  
The oa2lef translator should not create a LEF file with both SPACING and SPACINGTABLE values.  
If the manufacturing grid value in the input LEF file is the same as the value in the technology database, lef2oa should not modify the technology database.  
After using oa2def then def2oa on the same data, the direction of routes with one via changes.  
Incorrect data types used when calling stdlib string access routines.  
The -timeUnit option description in the command-line help for oa2spef is incorrect.  
The strm2oa translator should issue a warning and skip zero-area polygons encountered in the input file.  
Deleting nearly all of a large number of instances causes oa2def to seg fault. ITS687

New Known Problems and Solutions (KP&S)


Version 2.2 P031 Source Code and Documentation Release

This release includes source code and documentation. Binaries and libraries are not included.

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

New functions were added to this release, so the oacAPIMinorRevNumber was incremented to 15. Programs compiled with the header files in P031 or later cannot be used with OpenAccess shared libraries from versions prior to P031. Programs compiled with versions prior to P031 will continue to run unchanged with the shared libraries in the current release.

Changes and New Features

Support for Feature-Based Compatibility

OpenAccess now includes the infrastructure to support feature-based compatibility. Feature-based compatibility addresses whether or not the databases written by applications built on (or running against) one version of OpenAccess can be read or modified by applications on a different version of OpenAccess.

At present, the support is in place for feature-based compatibility, but there are no new features included in OpenAccess.

For more information about feature-based compatibility, refer to Compatibility for OpenAccess Applications and Data.

API Change Reports

View a summary  of the OpenAccess 2.2 P031 code and documentation release changes with respect to 2.2.3.

Fixed Problems

Issue Si2 ITS
The bounding box is lost when copying a custom via to another cellView.  
After 2.2.3, the oa2def translator no longer corrected wrong viaDirections in oaRoutes, and output non-contiguous routes.
Embedding designs that were not explicitly opened causes a core dump. ITS699
Base stream translator implementation prevents derived translators from including definitions for instances that are instantiated in pCells.  
For oaTech databases with appObjects that were generated before p028, if you do a save followed by a revert, you get a crash.  
The ASSIGN keyword in a lib.defs file should allow concatenation to previous entries. ITS714
Need better error messages for issues related to reading lib.defs files.  
The def2oa translator does not reset the routing rules when processing multiple DEF files, and a segmentation fault occurs.  
Performance issue when opening pCells.  
oaNode::addConn should throw an oacInvalidNodeConnNet exception if the node and the conn are not on the same or equivalent nets (in the block domain).  
SPEF translator crashes if parasitic network includes elements from equivalent nets  
OpenAccess translators crash if you use the -v or -h arguments.  
The oa20to22 translator omits viaSpecs that do not have widths.  
The oaNet::find function returns an invalid net.  
postDefragmentation of instTerm data should update the indices of the list of single-bit instTerms associated with a multi-bit instTerm; Otherwise, a crash occurs.  
When copying the leader of an oaGroup that contains an oaInst as a follower, the overload of oaInst::copy that is used to copy the follower does not work properly.  
Incorrect mapping of the DEF pin placement status by DEF translators. ITS706
If extensions have never been in the sparse state, the extension data is not written to disk.  
The oaBlockage owner is not updated after defragmentation. ITS712
The TCL_HOME environment variable should be documented.  
oaModNet::setGlobal(false) can cause a crash if the net is in a module that is not in the hierarchy of the top module.  
The verilog2oa report should include information about pruned cells and leaf overrides.  
The oa20to22 translator should create pitch and offset in all four directions.  
The cellView contents and status are incorrect if you open a cellView in append mode, reopen the cellView in write mode, modify the cellView, then undo the operation.  
The oa20to22 translator converts pCell instances into regular instances and converts props to params, but OpenAccess fails to convert the props back to params when binding occurs.  

Version 2.2 P028 Source Code and Documentation Release

This release includes source code and documentation. Binaries and libraries are not included.

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

Functions were added in this release, so the oacAPIMinorRevNumber was incremented to 13. Programs compiled with the header files in 2.2 P028 or later cannot be used with OpenAccess shared libraries from versions prior to 2.2 P028. Programs compiled with versions prior to 2.2 P028 will continue to run unchanged with shared libraries built from the P028 OpenAccess source code.

Applications using OpenAccess 2.2.3 shared libraries cannot read designs with parasitics from previous versions. Applications using P028 and later can read parasitics from any previous version.

The argument validation for all connectivity creation functions has been updated for consistency. This affects the validation for creation functions in oaNet, oaBusNet, oaModNet, oaModBusNet, oaTerm, oaBusTerm, oaModTerm, and oaModBusTerm. Applications might now get different exceptions for errors than in previous builds of OpenAccess. However the set of possible exceptions has not changed.

Changes and New Features

Improved Error and Warning Messages

The OpenAccess translators have been enhanced to use a standard message format to ensure comprehensive and consistent messaging. In addition, the translator messages have been improved for usability. See the information about interpreting error and warning messages in the individual translator documents for more information.

Plug-In Registration Files on Windows

String values in the OpenAccess plug-in registration files use the backslash (\) as an escape character. The escape character itself is ignored and the next character is used literally. As a consequence, a backslash character in a string must be represented with two backslashes (\\), and a double quote can be represented with a backslash and a double quote (\”). Strings that represent file paths on the Windows platform must have double backslash characters. For example, the path C:\work\designs should be represented as:

"C:\\work\\designs"

Parasitics

If an application reads a design with parasitics, but does not explicitly access those parasitics, then the files containing the parasitic data are not opened (as they were in previous releases). This leaves more file descriptors available for other uses.

New Translator Option

OpenAccess is improving the error message format for translators. To preview the new format, use the -newMsgFormat command-line option.

-newMsgFormat Use the new format for info, warning, and error messages. Turns on Message IDs, standardized message prefixes, and standardized file and line number information. This option does not alter the message text. This is a temporary option to let users preview the changes planned for messages.

Tcl Changes

The shared libraries for the Tcl bindings of the OpenAccess API are reorganized. This affects only C++ code that leverages the Tcl bindings as described in the section of the Tcl Bindings for OpenAccess APIs document titled C++ Access from Tcl. This reorganization does not affect Tcl scripts that employ Tcl OpenAccess commands.

The single oaTcl shared library is now repackaged with five additional shared libraries.

Shared libraries for custom Tcl bindings, which were previously linked to the single oaTcl shared library, must now be linked to oaTclBase, oaLangInfo, oaTclCommon, oaLangBase and oaTclPlugIn. The previous statement to include the header file oaTcl.h must now be replaced with the statement to include oaTclBase.h.

EMH Changes

The performance of oaInstTerm::find() and oaOccInstTerm::find() are improved for instances in the block domain that have many terminals. In addition, two new oaOccInstTerm::find() methods are added for finding the oaOccInstTerm corresponding to an oaOccInst and either an oaModTerm or an oaTerm.

API Change Reports

View a summary  of the OpenAccess 2.2 P028 code and documentation release changes with respect to 2.2.3.

Fixed Problems

Issue Si2 ITS
Cannot scalarize single bit wide bus nets.  
Segmentation fault in oaModInstTerm::create. ITS697
busTerm/busTermBit data is corrupted after performing certain types of net merges.  
oaDMFile attachments are not persistent when using the Turbo DM system. ITS532
The function oaCellView::get(oaLib*, const oaScalarName &cellName, const oaScalarName &viewName, oaViewType *viewType) should check for duplicate oaCellViews instead of crashing. ITS669
The Turbo DM system writes an incorrect oaCell name that cannot be reopened. ITS685
Compiling code that uses oaTcl headers with the +w option on Solaris causes a number of warnings.  
The output library of the strm2oa command with the -cell option does not contain the named cell.  
lef2oa should let you specify the viewName for container views created when FOREIGN statements are used in the LEF file.  
def2oa incorrectly puts FILLS statements at the end of the DEF file.  
oa2lef does not output SITE orientation correctly.  
def2oa does not allow a NONDEFAULTRULE defined in DEF file to be used as a TAPERRULE in the NETS wiring statement.  
Marker information for a copied pin is lost.  
oaPointArray::isSelfIntersecting returns incorrect results. ITS701
For a design with pCells, oa2verilog correctly outputs a module definition for each submaster, but incorrectly uses the supermaster's name for the module definitions. ITS686
Shorted nets should be considered equivalent nets. ITS694
Performance issue on UNIX related to file I/O.  
VerilogAnnotate does not work if there are bad references in the lib.defs file.  
verilog2oa should not open the first leaf library in non-shared, write mode when accessing the technology database in order to create the tech property in the design library.  
When programmatically calling the VerilogOut::writer() a second time with a new VerilogOut object, no module hierarchy is produced.  
verilog2oa should provide information about generated black boxes.  
strm2oa performance issue when using a layerMap that covers all possible combinations of layers and datatypes.  
Row and column parameters should be treated as a set, but an assertion should not be thrown if one value is a default, and one is not.  
Performance is poor for finding an instTerm when given an instance and a terminal in its master.  
verilog2oa performance degrades when a design has many nets that have a large number of equivalent nets.  
oa20to22 loses connectivity when translating geometric routes.  
Calling oaDesign::getConstraintGroup() causes an application crash.  
Reopening a design causes a crash in dbOpenCellViewByType, which is traced to a problem in OpenAccess.  
lef2oa crashes when multiple layer statements use the same layer name.  
Revert and undo of cellview edits restore the wrong timestamp value.  
oa2def crashes reporting that the master component for an instance is not found.  
verilogAnotate crashes when module bodies contain translation issues such as missing masters.  
oaLibDefList::openLibs treats INCLUDE warnings as syntax errors.  
Issues uncovered when using verilog2oa: For implicit instTerms connected to lower explicit instTerms, the canonical net is not updated correctly when scalarized, and positional instTerms are not found correctly after reading in an OpenAccess database.  
The oa2lef translator should not create a LEF file with both SPACING and SPACINGTABLE values.  
The latest OpenAccess shared libraries could not read parasitic data that was created by OpenAccess versions prior to p023.  
If the manufacturing grid value in the input LEF file is the same as the value in the tech DB, lef2oa should not modify the tech DB.  
After using oa2def then def2oa on the same data, the direction of routes with one via changes.  
Incorrect data types used when calling stdlib string access routines.  
The -timeUnit option description in the command-line help for oa2spef is incorrect.  
The strm2oa translator should issue a warning and skip zero-area polygons encountered in the input file.  
Deleting nearly all of a large number of instances causes oa2def to seg fault. ITS687

Version 2.2.3

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

Functions were added in this release, so the oacAPIMinorRevNumber was incremented to 12. Programs compiled with the header files in 2.2.3 or later cannot be used with OpenAccess shared libraries from versions prior to 2.2.3. Programs compiled with versions prior to 2.2.3 will continue to run unchanged with the shared libraries in the current release.

Parasitic Objects With AppDefs

This release fixes a bug with extensions on paged parasitics objects when loading a parasitic network from disk. Previously, applications needed to explicitly create AppDefs for all extensions used in existing parasitic networks to avoid a crash when loading those networks. For databases written by P023 and later, OpenAccess will automatically create any AppDefs needed when loading parasitic networks.

Changes and New Features

Tcl Changes

In order to eliminate redundancy, the oa::String object has been removed from the oaTcl bindings. All bindings with an oaString parameter now accept a Tcl string as the parameter.

The following oaString member function bindings were removed.

In addition, all enum values and constant references have been moved from the global Tcl namespace to the the oa:: namespace. For example, $oacMaskLayout is now $oa::oacMaskLayout. This change reduces the size of the list that is returned from the info vars command to a more manageable size. If your Tcl program uses these oa values, you can correct it by adding oa:: to the reference, or you can import these symbols to the global namespace with a command such as

foreach var [info var ::oa::*] {upvar #0 $var ::[namespace tail $var]}

Finally, for consistency with the rest of the OpenAccess code, the name of the TclException class has been changed to oaTclException, and the getMsg() return value has been changed from std::string to oaString.

oaString::format Functions

Three overloaded functions, oaString::format, have been added. These functions format an oaString object according to the given format specification.

verilog2oa Translator

The verilog2oa translator is intended to create new design data, not append to existing design data. Checks have been added to produce an error if you try to use verilog2oa to append to an existing design. Note that verilog2oa has an –overwrite option if you simply want to overwrite an existing design.

Behavior Change for oaNet::setSigType and oaModNet::setSigType

The behavior of the oaNet::setSigType() and oaModNet::setSigType() functions has changed. The sigType attribute of nets is now domain specific. Calling oaNet::setSigType() does not alter the sigType of any related net in either the Module or Occurrence domains. Similarly, calling oaModNet::setSigType() does not alter the sigType of any related net in the Block domain.

The oaNet::getSigType(), oaModNet::getSigType(), and oaOccNet::getSigType() functions each return the sigType of the net in their respective domains. When a net is initially created, the sigType parameter of the create function is copied to all nets implicitly created in other domains.

When reading a database generated with a previous version of OpenAccess, the sigType of the nets in the old database is preserved in the new database. When an old shared library is reading a new database, the sigType of the nets in the Occurrence domain become the sigType of the related nets in all domains with respect to the semantics of the old shared libraries, which supported only a single sigType for all related nets.

New getCreateTime Functions

Previously, the values returned by oaDesign::getTimestamp were seeded by the create time of the oaDesign. In order to provide stable values for testing, oaDesign::getTimestamp now returns the number of changes since the oaDesign was created as the time stamp.

Applications can use oaDesign::getCreateTime to distinguish databases that might be identical but that were created at different times.

The following new functions let you get the creation time for the database objects:

Deprecated Primitive Types

The primitive types that were declared in oaCommonTypes.h have been deprecated. Applications should use the equivalent primitive OpenAccess types. The following table shows both the deprecated types and the types that should be used.

Deprecated Primitive Types –
Defined in the oaCommon Namespace
Replaced by OpenAccess Types –
Defined in the oa Namespace
byte oaByte
int16 oaInt2
uint16 oaUInt2
int32 oaInt4
uint32 oaUInt4
int64 oaInt8
uint64 oaUInt8
uintPtr oaUIntPtr

All usages of the deprecated types in OpenAccess have been replaced with the equivalent OpenAccess types. This does not affect drop-in compatibility nor compile-time usage for the affected classes. In OpenAccess, the public classes that are affected by this change are defined in the oa/src/common and oa/src/plugin packages.

oaViaParams Enhancement

In the oaViaParam class, the cut height and cut width can be controlled separately by using two new enumeration values, oaViaParamTypeEnum::oacCutWidthViaParamType and oaViaParamTypeEnum::oacCutHeightViaParamType.The enumeration value oaViaParamTypeEnum::oacCutSizeViaParamType was formerly used to control both cut width and height simultaneously. That value is now deprecated, but is still supported for backward compatibility.

Conversely, the numbers of cut columns and cut rows are now controlled simultaneously. Users must either specify them both, or not specify either. Due to the backward compatibility requirements, the OpenAccess API still supports specifying the numbers of cut rows and cut columns separately (using the methods oaViaParam::setCutRows and oaViaParam::setCutColumns). However, specifying only one of them without specifying the other results in undefined behavior.

oaStdViaDef::setParams Enhancement

In the oaStdViaDef class, the logic of the setParams method has changed. Previously, the parameters from the incoming oaViaParam object were directly copied into the oaStdViaDef object, regardless of their flag values. This behavior required that users explicitly specify all the parameters in the incoming oaViaParam object, even if only one was to be modified. The new implementation accounts for the flag values in the incoming oaViaParam objects, so that only the changed attributes are copied into the oaStdViaDef object.

oaScanChain Enhancements

oaScanChain::create(), oaScanChain::setStartObject(), and oaScanChain::setStopObject() now check that the start and stop objects are of type oaBitTerm, oaInstTerm or oaScanChainInst, otherwise an oacInvalidScanChainObject exception is thrown.

New InstTerm getBit() Functions

New oaInstTerm::getBit(), oaModInstTerm::getBit(), and oaOccInstTerm::getBit() functions allow applications to access a specific member instTerm of a multi-bit instTerm.

oaTech Attachment Change

When a tech database is opened for a library, the tech database is associated with the library and remains the tech database for that library until either

This is true if the tech database is contained in the library, or if it is attached to the library using the library attachment property.

For example, library1 has a property that forms an attachment to the tech database in library2. Once library1 opens this tech database, the association to the tech database in library2 remains in effect even if the attachment property in library1 is changed or removed. The association remains until the tech database in library2 is purged, or library1 is closed.

verilog2oa and verilogAnnotate Now Generate Warnings

OpenAccess requires that all bits of a given port have the same direction. If the Verilog declares a different direction for different bits, the translator issues a warning and picks a single direction to apply to the OpenAccess terminal. Previously, the translator issued an error and exited.

Package Header File for Verilog Translators

The package header file for the OpenAccess Verilog translators has been changed to oaVerilog.h. The contents of the oaVerilog.h  file were previously contained in two header files: oaVerilogIn.h for the verilog2oa translator and oaVerilogOut.h for the oa2verilog translator. If you have your own Verilog translators built on the OpenAccess Verilog libraries, include oaVerilog.h instead of oaVerilogIn.h or oaVerilogOut.h.

New EMH Functions

New EMH Functionality

EMH has been enhanced with regards to the production and processing of objects when modules are uniquified, embedded, or detached (regardless of whether the occurrence hierarchy is bound or unbound).

EMH now attempts to copy, create, bind, and unbind multi-bit, scalarized, implicit objects as the data is being processed. For example, previously when a busNet such as A[0:4] was scalarized, if its module was uniquified, only the explicit busNetBits A[0],…,A[4] were processed. Now, the implicit busNet A[0:4] is also processed.

The oaOccTraverser class has been enhanced with a new flag bit to let applications choose whether they want to process implicit objects.

Changed oaBusNet Functions

oaBusNet::setBaseName and oaBusNet::setRange now throw exceptions if the new net name conflicts with an existing net (even if that net is implicit), or if the new connectivity results in an illegal oaTerm connection.

Optionally Building LEF and DEF Translators

Previously, if you rebuilt the LEF and DEF translators, you had to override the default location of the translators with a LEFDEF_HOME environment variable.  Now you can choose to specify the LEF and DEF paths individually with LEF_HOME and DEF_HOME. See Optionally Compiling Translators in the OpenAccess Installation and Configuration Notes.

Note: Very few users need to recompile the OpenAccess translators. You need to do this if you use an operating system that isn’t compatible with one of the pre-built versions, or if you want to modify the distributed translator.

Implant Enclosures

The implant enclosure specified for the params for a StandardVia is now relative to the corresponding layer, not relative to the cut as it was previously. See Implant 1/Implant 2 Enclosures in the Programmers Guide for more information.

Improved Documentation System

The OpenAccess documentation now provides index pages that let you locate classes according to class categories. See OpenAccess Class Selections. In addition, you can access the list of OpenAccess exceptions from the new Exceptions button at the top of each page.

Restructuring of Inline Function Definitions

Inline and template member function implementations have been moved from class header files to inline function files. The behavior of the functions has not changed, so application code is unaffected. The purpose of this change is to inline member functions of two co-dependent classes that need to access each other’s members. This change also resolves issues with some versions of compilers related to co-dependent template classes and their member functions.

Changed Exception

The exception oacCannotFindAttachedTech has been replaced by the oacCannotFindTechForDesign exception. Any code that attempted to catch oacCannotFindAttachedTech must be modified accordingly.

API Change Reports

View a summary  of the OpenAccess 2.2.3 update release changes with respect to 2.2.2.

Fixed Problems

Issue Si2 ITS
verilog2oa is very slow when a net has a very large number of equivalences.  
verilog2oa is very slow when a net has an extremely large fanout in the module hierarchy.  
def2oa should search the validRoutingVias constraint before any other vias.  
mw2oa loses a net assignment on shape creation. ITS678
convertRect(), convertPolygon(), and convertPath() do not get the Milkyway netId and therefore do not use oaConnFig::addToNet on the OpenAccess side. ITS681
Extra modules or undefined busses in input cause verilogAnnotate to drop connections.  
The scalarization of a design is very slow for instances that have both many multi-bit instTerms and many single-bit instTerms.  
Destroying a physical layer should destroy the viaSpecs that reference that layer.  
oa20to22 attempts to translate unsupported elements (geometric routes) and crashes.  
oaShape::setShieldNet crashes when the design contains no nets.  
Deleting a block net might cause a crash if there is an associated constraint group.  
Positional instTerms are not being re-bound when they are destroyed and re-created. ITS671
OpenAccess variables should be moved from the global Tcl namespace to the oa:: namespace.  
oa20to22 should ignore instance headers without instances instead of crashing.  
OpenAccess code should not declare fixed-size char arrays and then use unsafe, unchecked functions such as strcpy(), sprintf(), and vsprintf() to copy strings into these buffers.  
If you delete an oaParasiticNetwork, save and reopen the design, you get a  segmentation fault if you attempt to delete an associated oaAnalysisPoint.  
In certain cases, the data is corrupted when you edit and save parasitics. ITS660
OpenAccess should provide better error handling for libDefList::save.  
OpenAccess should not have using statements in public header files in the base database code.  
When loading a parasitic network of a design that has AppDefs, an error results.  
Need to fix the Verilog mapping of escaped, single-member concatenations.  
oa2spef truncates lines in the output.  
oaAppDef::remove fails on non-local occurrence objects.  
A crash occurs if you open a new design, create a module in that design (call it “top”), create an instance of a non-existent design in the module “top”,  create the instance master design along with its top module and top block, and go back to the first design and call setTopModule() with module “top”.  
def2oa should handle conflicts between pre-existing oaStdViaDefs and new oaCustomViaDefs (from DEF fixed VIAs) by renaming the new oaCustomViaDefs to _via (to be consistent with the behavior of lef2oa).  
If the net net93<0:24> is connected to an instTerm with the termName A<7:28>,<*3>A<28>, the last four bits of this bundle termName refer to the same implicit terminal A<28> and OpenAccess should throw an exception.  
In certain situations, an incorrect net is made available to the block domain due to equivalences being made at lower levels in the module hierarchy.  
lef2oa should ignore the techLib property in the input LEF file.  
If an AppDef is created in a session, then a design is opened with an AppDef with a different signature but the same name, a segmentation fault occurs.  
oa2strm does not correctly represent InstVectors that are mirrored or rotated.  
oa2strm does not translate to multiple layer/datatype pairs.  
verilog2oa exits with the error: InstTerm already defined  
Remove extraneous whitespace from the XY Tree plug-in code.  
Need to address issues with cross-platform read/write of certain databases.  
Under certain conditions, writing out a database that contains no nets might cause a crash.  
By the time the onPreDestroy() callback is executed, the pin figures have lost their pin references.  
A Purify error occurs when saving an OpenAccess database.  
If you delete a scalarNet with a span of nets having at least one multi-bit net, a crash occurs.  
If you open a database in edit mode without having write access, a lock file is created.  
Editing the net associated with an instTerm that represents a connection to a bundleTerm with repeated members corrupts the instTerm contents and eventually results in a crash.  
Scripts such as oaGetLibPath fail on Linux due to environment variable settings (CDPATH).  
Values of appType parameters are not translated by oa20to22.  
Errors occur if you use oaBitTerm::setMustJoin on two terminals that are already implicitly set as mustJoins.  
Unnecessary warnings produced by OpenAccess headers files during compilation.  
A crash occurs during oaCustomViaHeader expansion when the associated parameterized superMaster design is re-mastered.  
Compiler crash when using oaStrIsEqual.  
oaScanChain should throw exceptions on invalid start or stop objects.  
OpenAccess pointers are not bound to their string representations in Tcl.  
Tcl variables that have an OpenAccess pointer as a value evaluate incorrectly.  
Tcl observers needed so that oaLibDefList is usable.  
TCL examples produce warnings from tclcheck.  
Enhance Tcl exceptions to have useful error codes.  
Using oaLib::open causes an oaDMTurbo "no child processes" exception.  
oa2def output contains an error in the diagonal segment.  
oa2def produces duplicate vias if the customViaDef master is a Pcell. Also, oa2def outputs 0 area shapes (oaDots) from customViaDef masters.  
oa2lef issues a misleading error message when all the views specified with -views are missing.  
oaLayerBlockage::hasEffectiveWidth() should not return FALSE when the width is zero.  
OpenAccess should throw an exception if a user tries to "short" two terms that are used in a MUSTJOIN.  
Stream translators should clean up output data if there are fatal errors.  
The post create observers for oaMarker do not work correctly.  
Data corruption occurs on RHEL Linux 2.6 when using NFS. ITS646
Issue with auto cell name mapping in oa2strm.  
stdVia parameter should allow separate control over the cut width and height.  
Performance issue for the spef2oa translator.
 
An exception should be thrown when repeated bundle instTerm bits connect to different nets.  
A hash table assertion exception is thrown when you convert an implicit bit to explicit if the bus that the bit is a member of is threaded both up and down the occurrence hierarchy.  
oaModInstTerm::isBound triggers binding code that may improperly bind a subset of the bits of a multi-bit net to a subset of the bits of a multi-bit term.  
oaBlock::getBBox is incorrectly documented.  
Some examples are named inconsistently between the Windows and UNIX platforms.  
oa::getParams does not work for stdViaDef.  
When you construct a new oa::ViaParam and specify only the cut height and width value, oa::getLayer1Enc returns 0.  
Memory leak in in the OpenAccess Tcl binding.  
oa20to22 does not preserve the BBox of certain instances.  
If you use lef2oa to import LEF with the FOREIGN syntax, the ports are in the wrong location.  
Need a method to unset the blockage effectiveWidth.  
verilogAnnotate should issue an error for inconsistent pin declaration (instead of exiting).  
oa2verilog does not increment unconnected signal IDs.  
The FileSys DM plug in should not consider certain files to be primary files.  
initForRegionQuery goes into an infinite loop.  
Accessing a block net causes a crash.  
Timestamps are reset after an object is destroyed, saved, then opened.  
Signed formatting code used for unsigned integer (affects oa2spef) ITS675
Release notes for 2.2.2 neglected to state that oacCannotFindAttachedTech was replaced. ITS684
ModBundleNet iterator returns the wrong nets.  

Version 2.2.2

Release 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 oaPcellScript Plug-In is in development and is not ready for use at this time.

Compatibility with Earlier Releases

Changes and New Features

zlib is Statically Linked to Translators

Several translators support reading files in the gzip format by using the zlib open source library. The translator executables delivered with OpenAccess previously linked to zlib as a shared library, which forces end users to download and install zlib on their machines. Unlike some other third-party components such as Tcl, the functionality provided by the zlib library is not directly exposed to end users, and there is no need to have multiple tools use the same version of zlib. The translator executables that read files in gzip format now link to zlib as a static library.

Translators are Built as Static Libraries

Previously, translator components were delivered as shared libraries, and both the translator executables and other applications linked to them dynamically. Unlike the public OpenAccess API, the interfaces into these translators are subject to change. These changes can affect applications that derive from the translator base classes, as well as applications that simply use the translator components as-is.

When new OpenAccess kits ship (including the translator shared libraries) applications need to use the kits with existing applications. A change to the translator API would break existing applications even though the OpenAccess core remains drop-in compatible.

All translators are now built as static rather than shared libraries. This allows applications to link to a fixed version of the translator API while supporting drop-in compatibility for new OpenAccess kits. In some cases, a bug fix requires both a change to the translator API and a co-dependent change to the OpenAccess kits. In that case, applications that link statically to a translator must be rebuilt in order to pick up part of the fix, and existing executables will not work properly with the new kits. To avoid these problems, the overall architecture for how applications use the translators must change. This issue is currently under consideration by the OpenAccess development team.

oa, oaCommon, and oaUtil Restructured

To improve efficiency, avoid inconsistencies between different versions of the modules, and to minimize obscure compilation errors and test failures, oaCommon and oaUtil are now packages within the oa module. The following figure shows the new structure:

Header files from oaCommon are still installed in the top level include/oa directory. Header files from oaUtil were previously installed in include/oaUtil. These are now installed in include/oa for consistency. This should not affect applications that use the translator components because those applications already depend on include/oa. Shared libraries from oaCommon are still installed in the top level lib/<platform>/<mode> directory, and DLLs are still installed in the top level bin/<platform>/<mode> directory. As part of the change to statically link the translator component libraries, oaUtil now installs static instead of shared libraries in the top level directory.

Tcl Package Support

The Tcl binding of OpenAccess supports the Tcl package command, which is preferred over the Tcl load command. Refer to Package Support for more information.

Dependencies for Building Applications on OpenAccess on Windows

OpenAccess depends on the Winsock2 socket technology, and therefore must include Winsock2.h.

If your code files contain #include <Windows.h> statements, adhere to the following rules.

Note that most users do not specify #include <Windows.h> statements in their code files because OpenAccess code files already contain include statements for Windows.h.

Building the oa20to22 Translator

The following procedure explains how to build the oa20to22 translator.

  1. Download the following kits for the platform you want:

    cdsCommon executable kit
    cdsCommon development kit
    OpenAccess development kit
    OpenAccess source kit

  2. Expand these four kits in the same directory.

  3. Refer to OpenAccess 2.2 Installation and Configuration Notes for information about how to build OpenAccess.

  4. Set the environment variable OAHOME_2_0 to the directory that contains the expanded kits.

  5. Add the directory that contains the cdsCommon executables (typically tools.<platformName>/bin) to your executable search path.

oa20to22 Translator Change

oa20to22 will now convert 1-bit wide vector objects into the corresponding bit objects. This means that explicit single-bit busNets, busTerms, and vectorInsts are converted into explicit busNetBits, busTermBits, and vectorInstBits.

LEF/DEF Translators Take a List of Files

Both lef2oa and def2oa now take a list of files now and process each file in the specified order. For multiple DEF files, if one DEF refers to one of the other specified DEF files (as COMPONENT), the translator handles this reference in any order. You can use a set of hierarchical DEF files without concern about the order of processing for the files.

lef2oa Translator Change

The lef2oa translator no longer overwrites the oaDesign for existing custom vias.

def2oa Translator Changes

Calculation of Width for Diagonal Segments by Def Translators

The DEF translators have been modified to correctly calculate the width of diagonal segments.

Stream Translator Change

oa2strm now translates the following oaTextDisplay objects:

These textDisplays are translated as labels and are written out as Stream TEXT records. The translation is asymmetric, and these objects return as oaText objects in a round-trip translation.

Note that oaInstAttrDisplay and oaInstPropDisplay are not translated.

The new command line options are as follows.

Option Description
-noOuputTextDisplays Disables the translation of of textDisplays. The textDisplays are translated by default.
-text <namespace> Some text displays, such as oaAttrDisplay, either require or support namespace namemapping. This options specifies the namespace to use. The valid choices are: "native", "cdba", "lef", "def", "verilog", "vhdl", "spef", "spf", and "spice".

oa2spef

oa2spef suppresses grounded capacitors whose values are 0.0. If there are multiple values on the capacitor (from multiple analysis points), the capacitor is suppressed only if all the values are 0.0.

verilog2oa Translator

The verilog2oa translator has been updated to better handle expanding multi-bit connectivity. See Expanding Connectivity in the Verilog to OpenAccess Mapping document for details.

oaDefNS and oaSpefNS Namespace Changes

A name with a double vector notation (name[1][2]) now becomes a vectorBitName with the first bus notation escaped internally (name\[1\][2]).

A name with a bus notation in the middle of the name now becomes a scalarName with the bus notation escaped internally (name[1]a becomes name\[1\]a).

When getting the string from the name, the escaping is undone, so you get the original name back.

Default Parameters for Pcell References

The handling of default parameters for Pcell references (including instances and custom vias that are Pcells) has changed.

Previously, any parameter that had the same value as the default value in the superMaster was considered to be a default parameter. These were not stored on the instance and the value would change if the superMaster value changed. Now, a parameter is a default parameter only if it is not explicitly specified during creation or in subsequent calls to setParams(). If a parameter is specified in the reference, it is not a default parameter even if its value equals the default value.

This change impacts getParams() calls to the following:

getParams() will now return any parameter that is explicitly specified on the instance regardless of whether or not its value equals the default value.

LPP and layerHeaders in Pcell superMasters

Previously, the LPP and layerHeaders in the Pcell superMaster were filtered out from the parent design that contained instances of the superMaster. This filter has been removed, and the result is that additional LPP and layerHeaders might appear in the parent design if LPP or layerHeaders are in the superMaster, but not in its subMasters.

Behavior Change for oaFig::copy and oaFig::move for Pcells

The behavior of oaFig::copy() and oaFig::move() has changed with regards to copying or moving an unbound Pcell instance across designs. The copy and move functions will now more closely match Pcell instance creation. Accordingly, the copy and move functions will force the master to load to ensure that the instHeader created in the destination design is consistent with the source. The exceptions oacCannotCopyPcellInst and oacCannotMovePcellInst are thrown if the master cannot be found.

Implementing Pcells Through Tcl (Beta Version)

OpenAccess implements Pcells in Tcl using the oaPcellScript and oaTclEngine plug-ins. The oaPcellScript plug-in is a Pcell evaluator that uses a scripting engine to interpret a content generation procedure written in a scripting language that supports the OpenAccess binding. Provided the necessary scripting engine, the Pcell evaluator can work with different types of scripting languages. The oaTclEngine is a scripting engine included with OpenAccess that provides the OpenAccess binding through the oaTcl shared library. The oaTclEngine plug-in supports Tcl version 8.4.1 or later.

For more information, see Implementing Pcells Through Tcl.

oaPcellScript Plug-In (Development Version)

Note that the oaPcellScript Plug-in is included in this release, but it is not ready for use and is still under development.

Documentation Change for oaNameMem::getValue()

The documentation for this function has been updated to state that this function is only intended for use by nameSpaces.

Unbinding Occurrence Hierarchies Has More Consistent Behavior

When an occurrence hierarchy or sub-hierarchy is unbound from the top occurrence hierarchy, OpenAccess now consistently removes the hierarchy from the occurrence domain. The public occObjects in the sub-hierarchy and the non-local occurrence hierarchies are destroyed, and the annotations in the occurrence domain are removed.

Uninstalling OpenAccess on UNIX Platforms

Uninstallers are no longer provided for UNIX platforms. Use the rm command instead:

% rm -r <install_dir> 

DM FileSys Plug-In

If DM FileSys cannot deterimine the viewType of a cellView, the cellView is ignored rather than throwing an exception.

New APIs

The following new APIs are available.

oaBoundary and Derived Classes

Due to code optimizations, the order in which points are returned for a rectangular boundary can differ from the order in which they were entered.

oaName Utility Classes

New operator== and operator!= methods are available on the oaName, oaBundleName, oaSimpleName, oaVectorName, oaVectorBitName, and oaScalarName utility classes. See the API documentation for more information.

oaTech Class

The following APIs have been added to the oaTech class:

Functions that Take a Database Argument

All API's that take an oaObject *database now throw a common oacInvalidDatabase exception. Most of these functions previously threw individual exceptions.

Affected APIs

APIs Current Exception Previous Exception
oaAppObjectDef::isUsedIn()
oaAppObjectDef::remove()
oaAppObjectDef::create()
oacInvalidDatabase None
oaAppDef::isUsedIn()
oaAppDef::remove()
oacInvalidDatabase oacInvalidObjectForAppDef
oa<any>Value::create() oacInvalidDatabase oacInvalidObjForValue or oacEmptyArrayValue
oaConstraintGroup::create() oaConstraintGroup::copyTo() oacInvalidDatabase oacInvalidObjForConstraintGroup
oaConstraintParam::create()
oaConstraintParam::copyTo()
oacInvalidDatabase oacInvalidObjForConstraintParam
oaGroup::create() oacInvalidDatabase oacInvalidObjForGroup

 

API Change Reports

View a summary  of the OpenAccess 2.2.2 update release changes with respect to 2.2.1.

Fixed Problems

Issue Si2 ITS
oaModule::getInsts() incorrectly includes physical-only instances when called on the top module of the oaDesign, and oaModScalarInst::find() and oaModVectorInst::find() incorrectly return physical-only instances in the top module when given the right name.  
Call to oaDesign::open crashes, or oaDesign::exists incorrectly returns False in the oaDMFileSys plug in.  
Region Query ignores the initially specified transform.  
If an incorrect name is supplied with the -DMSystem option, strm2oa fails to display error information to stdout, although the log file contains the error information.  
If the -lib <design_library> and -refLibs <reference_library> are the same, verilog2oa creates an extra abstract view of zero bytes.  
When a terminal that defines the ground or supply sensitivity for another terminal is deleted, querying the ground/supply sensitivity term returns a term pointer that is invalid.  
Functionality for adding or removing Def objects in the block domain is missing or incomplete.  
Correct the performance issues (compared to 2.0) when creating and deleting busNets. In particular, the version 2.2 performance for deleting busNets is significantly degraded.  
Deleting instTerms in a particular order from two instances of the same master, or deleting instTerms from two instances connected by a common net, causes a crash.  
oaGetLibPath does not return the appropriate library path. It should return the RH EL 2.1 path not the RH 7.2 path.  
The OpenAccess Tcl command oa::getType of a name fails with the error "Error: Mismatched argument", although the name can be printed.  
There is no good way to obtain a printable name for non-scalar objects using oa Tcl because the binding does not properly resolve the arguments to oa::getName.  
oaLayerConstraintDef::get is missing from the Tcl binding. ITS528
OpenAccess dumps core when invalid pointers are passed via the Tcl API.  
OpenAccess consumes excessive memory.  
The 2.2 documentation includes information on how to build other translators but doesn't talk about how to build oa20to22. ITS527
Invalid refHeader during undo  
oa2lef creates bad PITCH definitions if the PITCH value in OpenAccess is unset or 0.  
oa2lef should not output objects with non-LEF layers.  
When the OVERLAPLAYER property in a CDB database is an oaAppProp instead of an oaStringProp, the lef2oa translator fails and returns an Invalid Property error.  
Improve the performance of oa2lef and def2oa that is degraded when the -DMSystem oaDMFileSys option is used.  
Cell rotations produced by oa2strm are wrong when angles are larger then 360 degrees or smaller then 0 degrees. ITS622
The oaSpiceNS namepace should throw an exception when extracting a string from a vector name.  
Region Query ignores the initial transform specified.  
Overlapping of arrayInst is not handled correctly for the case where the region lies directly on the boundary of array elements.  
Uniquifying one occurrence of a module, detaching the original module, and then embedding it back, causes a crash.  
The oa2lef translator should output default values for all attributes that have explicit default values.  
oaAreaHalo does not work with oaArrayInst.  
def2oa should handle multiple hierarchical DEF files.  
The halo blockage points are not recomputed when the bBox of an inst is changed.  
The def2oa translator should have a switch to prevent the geometries (routes) from being read from DEF.  
SYSNAME script update for RHEL 3.0 for Itanium needed.  
"Make clean" command gives an error regarding ./lang.  
The defragmentation of pin data corrupt the contents of the database in unpredictable ways.  
Multiple oaModule::embed calls cause a crash.  
IsGlobal returns true for non global net.  
Merging nets mismatches instTerms on explicit bits.  
If you try to scalarize an oaModModuleVectorInst, you get an incorrect error such as: ERROR: Input name (or member): inst4[0:1] has improper bus syntax.  
Need to add plug-in library path to support third-party plug ins.  
oaFSLockD crashes on HPUX 32-bit platform.  
The following code causes a SEGV: oa::oaString junk("12345678123456781234567812345678"); junk += junk;  
Installers crash for RHEL 3.0 32-bit.  
Need to remove UNIX uninstallers.  
oaViaSpec::destroy() crashes when the viaDef array contains NULL values.  
oa20to22 translation should not create zero value constraints.  
lef2oa complains if you have a read-only tech library with a macro-only input LEF file.  
lef2oa ACCURRENTDENSITY mapping reports the incorrect index.  
def2oa -masterViews option does not work correctly.  
A core dump occurs if you try to delete a constraint that is a member of a previously deleted constraintGroup.  
Cannot set layer attribute values to NULL.  
oaPath::create returns incorrect boundary paths.  
Stream translator should accept zero-path width. ITS611
Translators should clean up appDefs after translating.  
Default lib.defs conflicts with -libDefFile option.  
The Verilog translator mishandles the terminal name of a forward referenced bus terminal if the actual bus terminal is not zero indexed.  
oaVerilogNS does not handle names that start with non-alphanumeric characters.  
If an oaGroundedNode has zero for its cap value, oa2spef writes a zero-valued cap in the spef file. (These should be suppressed as they add no useful information and increase the file size.)  
verilog2oa should print a list of unbound masters.  
A missing master.tag file causes OpenAccess to core dump.  
OpenAccess throws an exception from the FileSys DM system when a cell has a dot (.) in its name.  
oaString::operator+=() does not work correctly when both arguments are the same object.  
oaPath::genBoundary creates an incorrect boundary for non-rectilinear paths.  
LEF and DEF translators to support multi-dimensional vector names  
Need to throw an exception in FileSys if a file cannot be created due to path name length. ITS503
Cannot create a connectDef for an implicit bitNet.  
If you detach a module and create a new design database, all of the data from the module and the module hierarchy underneath it are copied to the new design. During the copy, issues with autoNamed nets causes a crash. Also, after the data is copied to the new design, it is deleted from the source design. This causes a crash in some situations due to an attempt to reference bounding box information for an instance that was not in the block domain. ITS596
oaBaseCollection.h does not compile with MFC on a non-Microsoft compiler.  
Scalazing a modInstTerm should make its occInstTerm implicit.  
oa20to22 does not preserve the preferred routing direction.  
If you create a via in designA with a regular master (not a superMaster) designB, save and close designA, then modify designB to be a superMaster while designA is closed, an incorrect viaHeader binding is created in designA when it is opened later.  
oa20to22 should use the default value specified in OpenAccess when an oaAppDef is created.  
inst->getMaster is incorrectly flagging the top design as modified.  
oa20to22 does not preserve ANTENNAPARTIALCUTAREA.  
lef2oa translator crashes if the LEF file defines the "non-width based" via rules before the "width based" via rules.  
oa2lef should output non-cut layer rules for the inter-layer spacing section.  
oa2lef output contains a custom via without the via definition.  
oaAppDef functions are slow.  
Creation of specific paths results in objects with overly large bounding boxes.  
setParam() does not find an existing subHeader.  
oaProp::find performance issue.
 
Change FileSys to throw oaExceptions.  
The InstTerm of a term that uses the autoName syntax is unbound.  
Performance issues when creating and deleting busNets.  
Undoing the delete of a net span should restore the canonNets of the occNet.  
If you scalarize data, then edit a bitNet and delete its scalarized owner, if the owning net has a multi-bit terminal that was also scalarized, it should also be deleted.  
uniquify fails when there are scalar instances and vector instances for a module.  
Cannot install OpenAccess in the previously used directory.  
oaNames should have equal and not equal operators.  
Generating a Tcl Pcell subMaster fails when the Tcl binding (oaTcl) is loaded explicitly.  
Some OpenAccess Tcl APIs do not have documentation in oa::help.  
The Tcl examples do not conform to Tcl standards.  
Some oa::Exception objects are not useful in Tcl.  
Connections are lost when you scalarize vector insts.  
Problems occur if you reuse an occurrence after the original instance bound to it is destroyed.  
Parasitics are lost after the design is saved. ITS620
A crash occurs if you undefine a superMaster without parameters.  
The parameter handling mechanism for stdVias is incomplete.  
Error message is not used in the OpenAccess code.  
lef2oa overwrites via designs in update mode.  
def2oa should split non-rectangular PLACEMENT blockages into rectangles.  
def2oa crashes if an instance references its own design.  
In update mode, def2oa should handle instTerms that are connected by position.  
In update mode, def2oa should update the cellType of a design.  
Incorrect chamfering of path boundaries occurs for some non-acute angles when very large coordinate values are specified.  
setTransform produces incorrect results.  
After scalarization, the busNetBits in an instance lose their visibility to the module domain.  
Verilog translator errors out with: "Net width does not match instance/terminal width."  
oaDMFileSys throws an exception when the master cannot be determined.  
The instHeader bBox is not updated properly.  
Embedding a detached module with multiBit objects causes a crash.  
Nonexistent Tcl API specified in the documentation.  
Attempting to create an object with a bundle name of the form “a,a<0:1>” can cause a crash.  
Too much information is deleted when a net is deleted via the module domain.  
Connections are lost when calling vectorInst->setBaseName or setRange.  
Please clarify the categories of classes in the OpenAccess documentation.  
oa_Init aborts when invoked from a statically linked Tcl shell.  
Problem with baseName procedure in /oa/TCL/oa.tcl example.  
processInstance procedure does not work correctly in /oa/TCL/inst.tcl example.  
Getting the master from an unbound Pcell instance that was created without optional default parameters causes a crash.  
oa20to22 creates implicit busTermBit terminals for terminals that were not implicit in the OpenAccess 2.0 data.  
The PREFERREDENCLOSURE statement should be mapped to a soft constraint in the FoundryRules constraint group instead of a hard constraint in the LEFDefaultRouteSpec constraint group.  
oaAppObject methods should not accept invalid objects. ITS613
def2oa creates an incorrect EMH in the OpenAccess database.  
Infinite loop occurs when a directory in an OpenAccess library is removed.  
Tcl oa::DesignOpen crashes on invalid parameters.  
Tcl oa::LibDefCreate command crashes.  
Path boundaries should not have coincident/collinear points.
 
oaModBusTermDef has empty collections.  
oaName operator== case sensitive/insensitive comparison fails.  
If a cell has the view name 'layout' a view type other than oacMaskLayout, oa2strm should not try to open that cell.  

Version 2.2.1

Compatibility with Earlier Releases

New Features

Translators

The lib, cell, and view names that you supply to the translators on the command line are now in the OpenAccess Native name space.

Spef Translators

The zlib library, which is required by the Spef translators, is no longer shipped with OpenAccess. For information about acquiring and setting up zlib, see the Installation Instructions.

Also, spef2oa now includes a -tolerate command-line option, which tolerates connectivity mismatches between the SPEF input and the target OpenAccess database. Usually, connectivity mismatches result in an error and processing stops. The –tolerate option reduces these errors to warnings, but some coupling capacitance may be dropped from the parasitic network. If the network cannot be properly connected due to connectivity problems with series devices (such as resistors), the entire network is ignored but processing continues. Note that the SPEF translator does not perform exhaustive node to node checking of the network connectivity. It is possible to construct networks that contain electrical opens regardless of whether this option is used.

Stream Translators

The Stream translators include a new -viaMap option to support inputting and outputting custom via mappings.

-viaMap file

For oa2strm, produces a via mapping file that lists all of the structures output that are masters for CustomViaDefs.

For strm2oa, specifies an input file that defines which structures to recognize as CustomViaDef masters.

Custom Via Mapping File Syntax
# Comment
# Blank lines will be ignored
<Structure Name> <oaCustomViaDef Name> <Layer1 Name/Number> <Layer2 Name/Number> 

Example:

# Custom Via Master List for mydesign
via1 m1m2via m1 10 m2 20
via2 m2m3via m2 20 m3 30

oa2lef Translator

The PITCH, DIAGPITCH, and OFFSET constructs have been moved to the LEFDefaultRouteSpec constraint group. Previously generated tech databases are incompatible because oa2lef will no longer find these constructs in the foundry rules group.

LEF/DEF Mapping Changes

Wafer API Changes

Two new wafer functions have been added:

oaTimeStamp             getTimeStamp(oaWaferDataType    type) const;

oaTimeStamp             getTimeStamp(oaAppObjectDef     *def) const;

New Overload for oaCellView::setView

void oaCellView::setView(const oaView *view); // Already exists
void oaCellView::setView(const oaView *view, oaBoolean mustExist); // New overload 

These functions modify the cellView that is associated with the specified view.

oaCellView::setView(const oaView *view) accomplishes this by renaming the existing primary data in the cellView to be of the appropriate type. An exception is thrown if the non-primary data already exists in the cellView of the specified type.

oaCellView::setView(const oaView *view, oaBoolean mustExist) assumes the cellView already contains the appropriate type of data, but that it is not currently marked as the primary data for the cellView. This function makes this data primary. The original data is left in the cellView as non-primary data. The argument mustExist should be set to TRUE. If mustExist is set to FALSE, this function operates identically to the first version.

Note: To maintain drop-in compatibility, these functions are implemented separately, but will be merged together at a later date.

New Turbo DM System Attribute

maxFilesPerDataDir Specifies how many files are created before the Turbo DM system starts creating subdirectories to store the files. This number is also used as the maximum number of files to include in the subdirectories.

See Turbo DM System in the Libraries and Design Management section of the Programmers Guide for more information.

FileSys File Locking Use Model

The file locking functionality for the FileSys DM system is fully documented. The lock recovery daemon is now called oaFSLockD.

See File Locking in the Libraries and Design Management section of the Programmers Guide for more information.

Constraints

The distance parameter has been added to the oacMinWireExtension constraint.

Default Compiler Environment

There has been a change to the default compiler environment path settings supplied with OpenAccess. See Default Compiler Environment for details.

Removal of Fatal Exceptions

The following fatal exception classes have been removed:

OpenAccess does not throw exceptions using any of these objects, so they have been eliminated. The expectation is that clients are not using these class types to catch OpenAccess exceptions because OpenAccess does not throw these exception objects.

Almost all clients use the base oaException type in the catch block to get a copy or a reference of the thrown object. There should be no drop-in compatibility issues for these clients, and eliminating these classes now will prevent unnecessary confusion in the future.

Clients that have catch blocks to specially handle these fatal exception types should remove them.

API Changes

View a summary  of the OpenAccess 2.2.1 changes with respect to 2.2.0.

Fixed Problems

Issue Si2 ITS
OpenAccess should not purge a master design as a side-effect of undoing an operation that explicitly opened the master.  
The oaNet::getSingleBitMembers() and the oaNet::getMemberNets() collections and iterators should return the corresponding canonical net associated with the underlying net object. ITS580
Threading causes the net of an InstTerm to be invalid.  
Deleting a net that represents a span in the block domain causes a crash.  
oaInstTerm::addToNet throws an invalid exception.  
oa2strm causes a segmentation fault.  
Tcl (oaLang) incorrectly uses varargs in C++. ITS540
There is a superfluous dependency on libtcl8.4.so in the runtime oaTcl library.  
Purify error on oaDMFileSys::FileLocking::save.  
A segmentation fault occurs on oaInst::setMaster.  
def2oa crashes if there are no pins in the DEF file and the -noModHier flag is not specified.  
Segmentation fault due to a null pointer access in oaIter<oaGroup>::oaIter.  
A segmentation fault occurs on oaSimpleConstraint::find.  
Cannot have a techlib with a dot (.) in its name.  
oaTech::getUserUnits returns the incorrect value. ITS584
oaModDesignInst::destroy crashes if there is no top module.  
Via query performance issues.  
A crash occurs when trying to close data.  
Unexplained memory growth occurs during oaParasiticNetwork creation.  
Defragmentation of oaModVectorInstDefs causes a crash.  
isClone and isVariant are wrong after using uniquify().  
Documentation for header files contain misleading #include statements.  
oaTextDisplayIter crashes when there are no shapes in the design.  
Change translators to read lib, cell, and view names in the Native name space.  
A segmentation fault occurs in oaStringAppDef< oaDesign >:set(). ITS579
MAXIMUMDENSITY should not depend on MINIMUMDENSITY in the LEF file.  
oaDesign->getTimeStamp(oacBusNetDefDataType) causes a crash.  
Stream translators output a duplicate elapsed time message.  
oa2verilog incorrectly omits a comma when constructing bundle names that consist of both real net names and numerical values.  
oa2spef should write a name map only for objects that will be referenced later.  
The distribution of zlib is inconsistent with the Spef translators.  
Using oaDesign::scalarize on an oaModModuleVectorInst throws an unknown exception.  
If you create a cellView using oaCellView::find(lib, cellName, viewName), then manually delete the cellView during the same session, a subsequent call to oaCellView::find for that cellView incorrectly returns a valid cellView. ITS533
Tcl oa::getShapes should return real object types. ITS577
When an argument is incorrect in a Tcl call, you should get a more helpful error message than "mismatched argument." ITS538
The enums for oaPlugInDMTypes are not available from Tcl. ITS531
The cellView is not updated after redefining the Pcell master.  
Problem with oa2lef for pitch constraint.  
A crash occurs when you move an instance from design1 to design2 if you just opened design2 and didn't get the topBlock of design2.  
If you specify a variable endStyle different than half-width, the width at the end is twice the extension.  
Memory issues occur when pushing levels for an oaHierPath object beyond its size and when assigning an oaHierPath object to another object of smaller size.  
Incorrect oaPointArray::getArea() documentation.  
All translators should print command summary and run time information.  
If you open a techfile in 'r' mode, then open it in 'a' mode (or reopen it in 'a' mode), you get an exception.  
Wrong exception for cross-partition device  
The oa20to22 translator crashes when converting a library containing a techDB, but referring to an external techDB.  
Overly restrictive uniquify check prior to scalarization.  
Assignments are not properly destroyed when an inst is deleted.  
HashTableIter does not support HashTable::remove.  
Pcell instance master has the wrong viewType.  
oa2lef searches only one level of the constraint group.  
The DEF translators cannot handle names with a dot (.) in them.  
oa2lef core dumps on lef2oa data.  
oa2lef should default to the current LEF version.  
oaPointArray::contains() does not return true for certain polygon configurations for specific points inside that polygon (which causes some region queries to produce incorrect results).  
oaHierProps are deleted, but do not completely disappear. ITS552
oaIter copy constructor does not reset (documentation issue) ITS576
Cannot get the defaultAntennaRule.  
Crash occurs in techFindConstraintGroupByName.  
Verilog translators should handle constants with more than 32 bits.  
oa2verilog should preserve ASSIGN statement semantic direction.  
oa2verilog should traverse through design instances when producing recursive output.  
Allow spef2oa to ignore coupling caps to nets that do not exist with a -tolerate command-line option.  
verilog2oa errors on module redefinition.  
oa2lef searches only one level of the constraint group.  
Nets do not have POWER and GROUND sigTypes.  
lef2oa translates the wrong number of default database units.  
The pitch and offset values are reversed in lef2oa and oa2lef.  
oa2strm crashes on a design with C++ Pcells.  
Cannot open a cellView in 'w' or 'a' mode within the oaObserver ::onFirstOpen observer when the tech is opened in 'r' mode.  
A crash occurs during the call to getOccShape.  
Cannot open a database with minFillPatternSpacing rules.  
Uniquifying an occurrence of an instance causes a crash.  
The Tcl oa::DesignOpen command with custom via fails. ITS529
Reading in an older 2.2 database should throw an exception.  
OpenAccess 2.0 geometric routes are not translated correctly.  
oa20to22 changes the route status of wires.  
def2oa should exclude physical-only cells from the occurrence hierarchy.  
lef2oa output has errors when a VIA and a VIARULE GENERATE share the same name. ITS516
lef2oa spacing rule should set the 1D table default value. ITS530
oaObserver<oaProp> fails to catch a preModify or postModify event when an oaProp is moved.  
Opening a design with a large number of pin figs, which had been shuffled, exits with a bus error.  
Tcl docs need corrections. ITS525
Running strm2oa with -refLibList fails.  
oa2strm does not translate independent PathSegs and Vias.  
Should throw an exception if there isn't any top block when trying to create an oaLayerConstraint, oaLayerPairConstraint, or oaLayerValue in an oaDesign.  
oa2spef writes bad *N statements.  
oaShapeQuery does not work after an undo operation.  
The use of the oa name space for lib name in lib.defs is problematic.  
Cannot find occBundleTerm.  
oa20to22 does not allow -log option.  
oa2lef creates a corrupt LEF file.  
If you run oa2def and oa2verilog on an existing OpenAccess database, you get different connectivity for the same net.  
oaFSLockD hanging.  
ModModuleInstHeaders are incorrect after using uniquify().  
oaNet::merge(oaNet* net) throws an incorrect exception.  
oaNet::getPins() produces incorrect results for a term without pins.  
DM Turbo should handle relocated libraries automatically.  
When re-loading a design database after expanding a large number of occDesignInsts (10000), you get a core dump. ITS563
OpenAccess crashes after an oaViaDef is destroyed in a techDB.  
You get an invalid instHeader after undefining, then redefining a Pcell master.  
design->open() in 'w' mode crashes after redefining a Pcell superMaster.  
The lef2oa translator does not correctly process overlap shapes.  
You get an invalid viaDef warning when using lef2oa with an existing techLib.  
The mapping of oacMin[Concave,Convex]EdgeLength is incorrect.  
You get a compilation error for libTech->getAppDefsByDataType().  
lef2oa complains if there is a read-only techLib with a macro-only input LEF file.  
oa2lef dumps property values incorrectly.  
lef2oa does not store USEMINSPACING OBS OFF into the techfile.  

After iterating through areaBoundaries, markers, or blockages, the areaBoundary iterator is being reset, which causes the areaBoundaries to be counted too many times.

 
oaMapFileWindow::readSwapCheck() throws an exception without any arguments, which causes a crash.  
term->getNet()->getBit(index) returns an invalid object. ITS571
Invalid oaCellView object in DM library  
Confusing DM error messages.  
oaGetLibPath returns the wrong value on sunOS 5.9.  
A zero length lib.defs file causes onLoadWarnings.
 
Compile failure on UNIX/Linux systems using MFC APIs because OpenAccess was including Windows.h instead of windows.h.  
verilog2oa exits with error - "InstTerm already defined"  
OpenAccess should prevent rebinding a refHeader when its design is being purged, otherwise, a crash results.  

 

 

Return to top of page