OpenAccess 2.2 P028 Source Code and Documentation Release


Contents

Note: For an overview of the new features available in 2.2.0, refer to What's New.


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