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.
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.
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.
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.
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.
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.
The Itanium Linux platform (AS 2.1) is no longer supported.
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.
If you need to build the LEF/DEF translators (which is optional), the lefdef5.7 (or later) kits are now required.
There are no API changes in this release.
| 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. |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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. |
The openTech function has been removed from LefIn because it was redundant with initTechDBLocal, which provides the same functionality.
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.
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)
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()
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.
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.
The Tcl Bindings for the OpenAccess API document has been improved and includes new usage examples.
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
|
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.
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.
View a summary of the OpenAccess P049 source code and documentation release changes with respect to the P045 source code and documentation release.
| 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 |
|
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. |
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.
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.
There are no API changes since the 2.2.6 release.
| 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, |
|
The lef2oa translator does not handle RANGE rules correctly. |
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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 now tolerates cases in which a design cannot be bound to its technology database.
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.
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:
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.
OpenAccess provides new constraints to support 65 nanometer and custom designs, and existing constraints have been enhanced. Derived layers have also been enhanced.
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 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:
|
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. |
| oacDistanceMeasureTypeConstraintParamType | |
| oaIntValue | Specifies whether the distances are measured as Euclidean (which is default) or Manhattan. |
| New Valid Value Type | |
| oaInt1DtblValue | Specifies the dependency of the net spacing on the width of the shape on the net. |
A constraint ID and a string description can be added to constraints.
Default constraint groups have been added to objects that formerly did not have default constraint groups.
For more information, refer to the following:
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.
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.
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.
The oaDerivedLayerParamDef class enforces the value type of a derived layer parameter.
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
};
The oaLayerArrayConstraint class defines constraints for three or more layers.
Four new oaValue subclasses support new constraints and derived layers:
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.
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.
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.
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.
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.
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.
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)
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.
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.
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.
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.
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.
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.
The oa2strm translator now accepts multiple cell names for translation.
Refer to OpenAccess to Stream Translator (oa2strm) for more information.
The following changes have been made to the translator APIs. Applications that derive from the OpenAccess translators must modify their code accordingly.
The LEF/DEF translator components were restructured to handle incremental technology databases.
View a summary of the OpenAccess 2.2.6 release changes with respect to 2.2.5.
| 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. |
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.
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.
OpenAccess is available on the solaris operating system 10 (x86_64). The supported compiler is Forte Developer/Studio 11 C++ 5.8.
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:
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.
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);
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.
This function minimizes the amount of virtual memory this design uses by releasing dynamically allocated data structures that can be rebuilt as needed.
This function minimizes the amount of virtual memory this technology database uses by releasing dynamically allocated data structures that can be rebuilt as needed.
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.
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.
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:
-pinLabels-textLayertext).-textHeightIn 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 translator exited the translation if the starting layer of a route did not match the vias that followed. Instead, the translator now issues a warning and uses the correct routing layer. For example, ROUTED M1 ( 0 0 ) VIA23 VIA12 is now passed through with a warning. oa2def translator exited the translation if the viaDirection attribute of an oaVia in an oaRoute did not match the other elements in the route. Now, the translator issues a warning and the correct starting layers are output.strm2oa translator can now accept an asterisk (*) for the library name in the cellMap file, which means that the reference libraries are searched for the mapped cellName. The strm2oa translator searches only for uppercase names when searching reference libraries if the -toUpper option is specified. Similarly, the translator searches only for lowercase names in the reference libraries if the -toLower option is specified. In previous versions, strm2oa searched first for the case-converted name, then for the non-converted name.strm2oa -detectVias option automatically recognizes GDS structures that are vias, and represents them as oaStdVias rather than oaDesigns. -detectVias option and provide the necessary information in the layerMap file, the translator produces many oaDesigns to represent the vias. This can adversely affect the performance of both the strm2oa translator and other applications running on the oaDesigns that are produced. 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.
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.
The Verilog translator API has been converted to use batch instTerm creation.
View a summary of the OpenAccess 2.2.5 release changes with respect to 2.2.4.
| 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. |
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.
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.
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.
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.
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).
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.
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.
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"
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.