OpenAccess 2.2 Incremental Release Notes
For a complete overview of the new features in OpenAccess 2.2, see What's New in OpenAccess 2.2.
The information that follows describes updates and bug fixes for incremental releases of OpenAccess 2.2.
OpenAccess 2.2 p001
API Change Reports
View a summary of the OpenAccess 2.2 p001 changes with respect to 2.2 b014.
View a summary of the OpenAccess 2.2 b014 changes with respect to OpenAccess 2.1.
Database Version Changes
Fixed PCRs
- 722110 When a block domain net is
deleted, the span of the net is recalculated and a new canonical net is
chosen.
- 740238 oaModInstTerm::removeFromNet crashes if the occurrence hierarchy is expanded.
- 742064 Merging a top level net and a lower level net in the block domain causes a crash.
- 754680 oaModTerm::getMaxPosition() does not return an updated value.
- 723528 Wrapper scripts contain hard-coded OS assumptions.
- 743721 oaModule::getOrig() is not returning the correct module name.
- 749027 When using
verilog2oa, the wrong equivalent net is associated with the assign statement.
- 754309
oa20to22 crashes if the 2.0 library contains the techLibName property.
- 746164 Improve exception messages for namespace errors.
- 754300 The oacInvalidName exception message should include the problematic string.
- 724647 The oaDMFile Leader/Follower relationship is not restored when reloading the database (DMFileSys).
- 743409 Need to document the interaction between DM version control functions and locking.
- 721971 A runtime error occurs if a
.plg file is missing.
- 754428 Region query returns unplaced instances.
- 754435
Ellipse not being produced by shape query.
Beta 2.2 b014
API Change Reports
View a summary of the OpenAccess 2.2 b014 changes with respect to 2.2 b013.
View a summary of the OpenAccess 2.2 b014 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 99.
- Tech database incremented to 59.
- Wafer database incremented to 12.
- DMData database incremented to 3.
Fixed PCRs
- Threading is not happening when the inst and net are in different hierarchies.
- Threading through a busTerm and a busNet throws an exception.
- If a modInstTerm connects to a net in the module domain and its corresponding net in the block domain connects to a different net, detaching the modInstTermfrom its net causes a crash.
- You get an unexpected exception when calling occTerm->getTopOccurrence.
- The database becomes corrupt when all the connectivity is removed from a large design.
- oaModule::detach() breaks the OccInstTerm to OccTerm binding.
- The RC temp file is not cleaned up on close.
- Need to add set() functions to oaPoint and oaBox.
- After occurrence destroy, getOccMaster() gets an invalid occurrence.
Beta 2.2 b013
Release Highlights
Setting the Library Path for Applications Built on OpenAccess
OpenAccess provides a script called oaGetLibPath that returns the path to the shared libraries for LD_LIBRARY_PATH, SHLIB_PATH, and LIB_PATH. Your application can use this script to set the library path for the OpenAccess libraries.
The script in available in <install_dir>/bin. The script has an optional mode, -numBits, that lets you override the bit mode specified by any environment variables.
API Change Reports
View a summary of the OpenAccess 2.2 b013 changes with respect to 2.2 b012.
View a summary of the OpenAccess 2.2 b013 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 98.
- Tech database incremented to 58.
- Wafer database incremented to 11.
- DM lib database incremented to 15.
- DMData database incremented to 2.
Fixed PCRs
- If you set the bundle net bit (implicit) as the original net of a scalarNet, then destroy the bundle, the scalar net still has an original net.
- Empty routes should pass isContiguous().
oa2def crashes if the tech does not contain a lefDefaultRouteSpec constraint.
oa2verilog fails to produce InstTerm after importing data with def2oa.
- Getting improper net names in the block domain.
- Need an OpenAccess script to report the shared library location.
Beta Exceptions
EMH
When using an occurrence hierarchy that has been expanded into occurrences of lower level designs, undo is not supported for certain combinations of operations. While undo is enabled, you can either change the annotations (properties, groups, appDefs, and parasitics) on the objects in the lower level design occurrences, or change connectivity in the top or lower level designs. Changing both annotations and connectivity while undo is enabled will generally cause a crash in either oaDesign::undo() or oaDesign::redo().
Documentation Status
- OpenAccess API Specification -- There are places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- OpenAccess 2.2 Libraries and Design Management
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Release Status
Design Management
oaDMObject::destroy has no effect when called on an oaLib.
Beta 2.2 b012
Release Highlights
File Locking Clarification
When a DM object is to be destroyed, none of the files contained within that object can be locked by another process. If any of the files are locked by another process, the destroy is denied and an exception is thrown.
API Change Reports
View a summary of the OpenAccess 2.2 b012 changes with respect to 2.2 b011.
View a summary of the OpenAccess 2.2 b012 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 97.
Fixed PCRs
- Unable to find hierarchical net.
- Should not be able to create all domain BusTerm on physical only net.
- Redo of destroy of an explicit net bit of a bundle hangs.
- Crash in undo destroy of busNetBit of scalarized merged bus.
- Need to change subdatatable organization for connectivity objects (capacity improvement)
lef2oa uses the wrong default for layer offset.
oa2def crashes on design created by oa20to22.
- oaFig::copy with transform gives incorrect results for a via.
- pathSeg pointer is invalid after undo (affects regionQuery).
- Need to add name to oacInvalidLayerConstraintTypeName.
- A crash occurs when you read in a library with a custom view type.
Beta Exceptions
Design Management
oaDMObject::destroy has no effect when called on an oaLib.
Documentation Status
- OpenAccess API Specification -- There are places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- OpenAccess 2.2 Libraries and Design Management
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
The PCells example is not currently working.
Beta 2.2 b011
Beta Exceptions
Design Management
oaDMObject::destroy has no effect when called on an oaLib.
Documentation Status
- OpenAccess API Specification -- There are places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- OpenAccess 2.2 Libraries and Design Management
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
The PCells example is not currently working.
Release Highlights
EMH
Collections related to global nets are now supported in the occurrence domain.
DM Changes
Library Transactions
Library transactions have been simplified so that you only need to get access to a library. The commit and rollback functionality that was available previously has been removed. Library changes, when made, are always persistent.
oaLib::startTrans() has been replaced by oaLib::getAccess(), and oaLib::endTrans() has been replaced by oaLib::releaseAccess(). oaLib::commitTrans() has been removed.
The oaLib API has changed from:
oaBoolean startTrans(oaDMTransType type,
oaUInt4 timeout = 0);
void commitTrans();
void endTrans();
oaBoolean hasTrans() const;
oaBoolean hasWriteTrans() const;
oaDMTransType getTransType() const;
to:
oaBoolean getAccess(oaLibAccess accessType,
oaUInt4 timeout = 0);
void releaseAccess();
oaLibAccessLevel oaLib::getAccessLevel()
The oaLibAccessLevel class has been added. This is an enum wrapper class that represents three levels of library access:
- No access
- Read access
- Write access
New oaDMData Classes for Associating Properties, Groups, AppDefs, and AppObjects with Container Objects
This release introduces the oaDMData class and four derived classes:
These classes let clients persistently associate properties, groups, appDefs, and appObjects with oaDMContainer objects (oaLib, oaCell, oaView, and oaCellView.)
The new oaDMData class derives from oaObject, and the database objects created using this class are managed objects. A new oaObject::isDMData() method has been added at the oaObject level as a verifier. Also, oaObject::getType() supports the new object types, which are oacLibDMDataType, oacCellDMDataType, oacViewDMDataType, and oacCellViewDMDataType respectively.
To set properties or extensions on DM objects, open the appropriate oaDMData for that object. For example, to read or write properties on an oaCellView, call oaCellViewDMData::open. This returns a pointer to an oaDMData object that you can then use to hold the cellView's properties.
The oaDMData database is treated like any other database; it can be opened, closed, and saved
oaCellView Changes
A new get() method finds an existing cellView or creates and returns a new cellView if one does not exist.
static oaCellView *get(const oaLib *lib,
const oaScalarName &cellName,
const oaScalarName &viewName,
const oaViewType *viewType);
oaObject Changes
A new query method isDMData() at the oaObject level can be used to confirm whether or not an object is an oaDMData object.
oaBoolean isDMData() const;
File Locking
When a file is locked by the current or any other process and a lock is requested, the lock request is denied.
When a DM object is to be destroyed, none of the files contained within that object can be locked. If any of the files are locked, the destroy is denied and an exception is thrown.
oaObserver<oaDMObject> is Replaced
The class oaObserver<oaDMObject> is replaced by oaObserver<oaCell>, oaObserver<oaView>, oaObserver<oaCellView>, and oaObserver<oaDMFile>. The usage of the observer class remain the same -- it's just more strongly typed now.
Function Arguments Use typedefs
Many function arguments that were formerly oaUInt4 or oaInt4 have been changed to use the typedefs: oaCoord, oaDist, or oaOffset. This typedef provides a better indication of the purpose of the argument.
Tcl User Units
In Tcl, coordinates and distances are floating-point numbers specified in user units, such as microns. These user units are converted to database units by the Tcl bindings.
This affects the following C++ types directly:
Database units are converted to user units directly by the Tcl binding whenever possible. For example, when you call the getWidth Tcl command on a path object, the width return value is converted from database units to user units, and the result is assigned to the Tcl result. This conversion is accomplished with oaTech conversion functions, as follows.
Type |
Database to user |
User to database |
oaCoord |
dbuToUU |
uuToDBU |
oaDist |
dbuToUUDistance |
uuToDBUDistance |
oaOffset |
dbuToUU |
uuToDBU |
These functions require the technology database and the view type. Tcl commands for C++ member functions that are derived from the oaDesignObject class obtain the technology database and the view type from their design. As a consequence of this automatic conversion, a technology database must be available on the design before functions involving this conversion can be called, otherwise a Tcl error results.
All Tcl command arguments that are related to the three types above are specified in user units, and are converted to database units. The procedure for this is similar to that of converting database units to user units.
There are a number of OpenAccess C++ classes that do not have technology databases, and a conversion is therefore not possible. The simplest example is the oaPoint class. This class is represented in Tcl by a list of two double values. The oaBox is another example of such a class that has a pure TCL representation. The oaPointArray is an example of a class that is represented by a user defined Tcl object.
oaDesign API Change
oaDesign::getCellView() was removed because it implicitly accessed library data and required a call to oaLib::getAccess(). It is preferable to make this explicit and require the caller to do this.
Building OpenAccess on UNIX
OpenAccess has a new dependency on liboaCommon.so. You cannot build an executable without adding liboaCommon.so to the link line.
Changes to oaPlacementStatus
- oacSuggestedPlacementStatus and oacCoverPlacementStatus are no longer supported. OpenAccess 2.0 databases converted using
oa20to22 will map these values to oacPlacedPlacementStatus and oacLockedPlacementStatus, respectively.
- oacFirmPlacementStatus has been renamed to oacFixedPlacementStatus to improve consistency with oaConnStatus and DEF.
Change in Behavior for Undo
- oaDesign::undo() goes back one checkpoint, which is the most recent checkpoint in the design.
- oaDesign::undo() reverses the actions stored in undo-records, starting from the most recent. oaDesign::undo() will cover all the undo-records on one and only one side of the most recent checkpoint.
- oaDesign::redo() does the opposite of oaDesign::undo(); One checkpoint is restored in the exact position that it was consumed by oaDesign::undo().
- OpenAccess does not insert implicit checkpoints, for example, there’s no implicit checkpoint added when you call oaDesign::enableUndo().
- OpenAccess collapses adjacent checkpoints if there is no undo-record between those checkpoints.
- You should not edit the same OpenAccess database while an undo() or redo() is occurring. A new API exposes this state: oaDesign::inUndo().
New function:
oaBoolean oaDesign::inUndo() const;
Removed function:
oaBoolean oaDesign::isCpNeeded() const;
Changed function:
oaBoolean oaDesign::setCp();
changed to:
void oaDesign::setCp();
API Change Reports
View a summary of the OpenAccess 2.2 b011 changes with respect to 2.2 b010.
View a summary of the OpenAccess 2.2 b011 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 96.
- Tech database incremented to 57.
- Wafer database incremented to 10.
- DM lib database incremented to 14.
Fixed PCRs
- If you scalarize a multi-bit mod InstTerm (on a bundle terminal) with the occurrence hierarchy expanded, then get the collection of instTerm bits from the net bits, invalid instTerms are returned.
- There are invalid nets in the block after performing an undo of a modInstTerm create operation.
- Adding an instTerm to a block-only net incorrectly created nets and terminals in the module domain.
- Unable to find hierarchical nets using oaNet::find.
- Calling getNext on an oaModMemNetIter that was copy constructed from another modMemNetIter object causes a crash.
- If you have nets "a", "e", "2*e,f[0],g[0:3]", and nets "a" and "e" are equivalent and "e" is preferred, the member net collection on net "e" with the unique argument set to false does not contain the equivalent net "a".
- Redo of makeEquivalent does not set the equivalent nets.
- After importing data using
verilog2oa and scalarizing the design, the names of some nets in the block domain are incorrect.
- The oaDesign::scalarize() function crashes.
- Modules with bundle nets cannot be embedded.
- The oaGroupTypeEnum documentation is incorrect.
- A crash occurs in the FileSys DM system due to a null hostname.
def2oa fails for an oaSegStyle with an extend or truncate end style.
lef2oa uses the wrong units.
- You should not need to define the appObjectDefs in the same order as you did in a previous session before.
def2oa creates the wrong extension for an oaPathSeg.
- Clean up oacNullIndex in public APIs.
- A crash occurs when deleting objects with constraints.
- The nets supplied through the
-tieHigh and -tieLow options of verilog2oa should be marked global.
- Verilog assign statements create redundant bundles.
verilog2oa does not equate tristate with inout.
- All nodes that have coordinates in a parasitic network should have their coordinates written out by
oa2spef regardless of whether or not the parasitic network has Terms or InstTerms that have nodes with coordinates.
- The units switches are broken in
oa2spef.
- RegionQuery should return all zero-sized objects regardless of the filter size.
- oaNet::getVias()::getCount() enters an infinite loop.
- Poor performance when binding designs with no top blocks.
- oaObserver<oaInstTerm>::onPostCreate is run twice.
Beta 2.2 b010
Beta Exceptions
Design Management
- oaDMObject::destroy has no effect when called on an oaLib.
EMH
- Collections related to global nets are not yet supported in the occurrence domain.
Documentation Status
- OpenAccess API Specification -- There are places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
The PCells example is not currently working.
Release Highlights
Moving Functions to Bit Classes
- Moved oaNet::isOriginal() to oaBitNet::isOriginal().
- Changed the argument type in oaScalarTerm::create() from oaNet* to oaBitNet* to be consistent with the oaBusTermBit::create() argument list.
- Changed the argument type in oaModScalarTerm::create() from oaModNet* to oaModBitNet* to be consistent with the oaModBusTermBit::create() argument list.
EMH
References to the same global signal in different occurrences are now merged into a single oaNet in the block domain.
API Change Reports
View a summary of the OpenAccess 2.2 b010 changes with respect to 2.2 b009.
View a summary of the OpenAccess 2.2 b010 changes with respect to OpenAccess 2.1.
Database Version Changes
- Detailed parasitics database incremented to 9.
- Design database incremented to 93.
Fixed PCRs
- Block domain instTerm creation fails if the occurrence hierarchy is uniquified.
- An infinite loop occurs when an instTerm is created.
- If you use dbMoveFig to move a pin, its children are not moved appropriately.
- Cannot simultaneously create two libs with same logical name.
- Dir::exists calls both FileBase::exists and FileBase::isDir resulting in two calls to _stat.
- oa20to22 does not translate WIREEXTENSION values for layers.
- getSiteDefWidth returns incorrect values if the rowHeader is not bound.
- oaAppObject::getAppObjectDef() causes a crash.
- Memory resize fails at oaGCellTbl().
- Performing an undo after moving an instance with an areaHalo undoes the move of the instance, but not the areaHalo.
- lef2oa does not translate WIREEXTENSION values for layers.
- tech->purge causes a crash when regionQuery is initialized in a hierarchical design.
- Performing an undo after oaModule::detach causes a crash.
- dbCreateTerm causes a crash.
- oa2spef cannot open a parasitic database.
- Error while calling dbGetPropByName.
- Lock file is not removed after calling dbClose.
- oaModule::getOccurrences should filter out unexpanded occurrences.
- Using oaModule::embed with a lib, cell, and view name makes the master design invalid.
- Need to support multiple oaLibServer versions on one machine.
- oaParasiticNetwork::getConnNodes doesn’t handle busBit objects.
Beta 2.2 b009
Beta Exceptions
Design Management
- The Version Control API is available along with a sample implementation. This sample is used as a vehicle for testing the OpenAccess Version Control API and can be used as the starting point for an implementation. See Version Control (VC) System Plug-In for more information.
- oaDMObject::destroy has no effect when called on an oaLib.
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
Documentation Status
- OpenAccess API Specification -- There are places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
TCL Bindings
- Currently, the TCL bindings are not available on Linux 64-bit: AS 2.1 (Itanium).
Examples
The following example is not currently working:
Release Highlights
Change to Initialization Functions
The argc and argv arguments have been eliminated from the oaDMInit, oaTechInit, oaDesignInit, and oaWaferInit functions. The new signatures are as follows:
void oaDMInit(oaUInt4 apiMajorRev = oacAPIMajorRevNumber,
oaUInt4 apiMinorRev = oacAPIMinorRevNumber);
void oaTechInit(oaUInt4 apiMajorRev = oacAPIMajorRevNumber,
oaUInt4 apiMinorRev = oacAPIMinorRevNumber);
void oaDesignInit(oaUInt4 apiMajorRev = oacAPIMajorRevNumber,
oaUInt4 apiMinorRev = oacAPIMinorRevNumber);
void oaWaferInit(oaUInt4 apiMajorRev = oacAPIMajorRevNumber,
oaUInt4 apiMinorRev = oacAPIMinorRevNumber);
The translators and the example programs have been updated accordingly.
Information about How Plug-Ins are Loaded
The information in this section doesn't represent new functionality for b009. Rather, it elaborates on existing functionality.
There are two common scenarios for how a plug-in is loaded for OpenAccess:
Scenario 1: Loading a Specific Plug-in by Name
- The plug-in system is passed the name of the plug-in that you want to load.
- The system finds the path to the oaPlugIn shared library and uses that path to find the data directory.
- The system finds the registration file for the plug-in by appending
.plg to the name of the plug-in and looks for a file of that name in the data/plugIns directory.
- If the system finds the <plug-in_name>.plg file, it loads it to get the root name of the library to load. There is a parameter of the plugIn tag called lib, so you will see ‘lib=”<root_lib_name>”’ in the xml file.
- The root name is decorated based on the platform and build mode (opt or dbg).
- The system loads the specified shared library (this library only needs to be in the library search path) and gets an entry-point function that allows it to create an instance of the plug-in.
Scenario 2: Loading the Default Plug-in for a Given Category
- The plug-in system is passed the category name from which you want the default plug-in. For example, in DM, the category name is oaDMSystem. Note that all DM plug-ins specify this category in their .plg files. This is the name you pass to the plug-in system in place of a specific plug-in name.
- The plug-in system finds the <category_name>.plg file as described in scenario 1. At this point, the system has no knowledge of its category name.
- The <category_name>.plg file is a little different from a regular plug-in .plg file. Instead of giving the root library name (in a ‘lib=”<root_lib_name>”’ statement), it specifies a treatAs parameter that gives the actual plug-in name to use.
- The plug-in system loads this special .plg file, determines that you are asking for a category default, and redirects to the name of the plug-in given in the treatAs field.
- The system then proceeds as in Scenario 1, step 5.
Each plug-in package installs its .plg file for use in Scenario 1 to the data/plugIns directory. oaDMTurbo before promotes an additional file called oaDMSystem.plg with the treatAs=”oaTurbo” statement in it. This establishes oaDMTurbo as the default plug-in for that category. In general, when troubleshooting a plug-in problem, look at the data/plugIns directory to see if everything looks correct, then look for the libraries that the .plg files are referring to.
Conversion of Generic Integer Parameters to Special Types
Arguments and return values of functions in various classes, such as oaBox, oaPoint, and oaArrayInst have been changed from a generic oaUInt4 type to special types if the argument or return value represents a coordinate, distance or offset value, as follows:
• oaCoord represents a signed coordinate in 2D space.
• oaDist represents an unsigned distance in 2D space.
• oaOffset represents a signed offset in 2D space.
This conversion of generic integers to special types represents useful information for end-application users.
Note that this change is critical at the TCL level. Specifically, Cadence extension languages use user units, which are user-specified units that can be any units such as microns, mils, meters, angstroms, and so forth, rather than database units. These values therefore go through a conversion from (floating-point) user units to (integer) database units.
Changes to Region Query
- All applications that use region query must call oaRegionQuery::init(“oaRQSystem”) immediately after calling oaDesignInit(). Specifically, oaRegionQuery::init(“oaRQSystem”) must be called before doing any region queries and before calling initForRegionQuery. This loads the default region query plug-in. OpenAccess provides a default region query plug-in named “oaRQXYTree”. An oacRegionQueryFailedToGetPlugIn exception is thrown if the plug-in fails to load.
- Applications can call oaRegionQuery::getPlugInName() to get the name of the region query plug-in being used. An empty string is returned if a plug-in is not loaded.
- An oacRegionQueryNotInitialized exception is thrown if oaRegionQuery::init() is not called when using region query.
- An oacRegionQueryAlreadyInitialized exception is thrown if oaRegionQuery::init() is called more than once.
DM Changes
New API
The following function returns the write path to this library.
oaLib::getWritePath()
Removed API
The oaLibServer class is obsolete and has been removed.
Changes to Transactions
The ability to perform read locking has been removed.
- Now there are only write locks.
- The semantics of oaDMObject::getLock() and related functions have changed accordingly -- the lockType argument has been removed.
- The oaLockTypeEnum() class has been removed because it is no longer needed.
- oaDMLockStatusEnum has been updated to reflect that read locks are gone.
Removed Topology Attribute from Routes
Topology is used on geometric routes, and geometric routes do not use oaRoutes. Accordingly, the topology attribute has been removed from oaRoute.
Changed API
oaRoute::create() has been changed to:
static oaRoute *create(oaBlock *block,
oaNet *net = NULL,
oaBoolean isGlobal = false,
oaRouteStatus stat = oacNormalRouteStatus);
Removed APIs
The following APIs have been removed:
oaRouteTopology getTopology() const;
void setTopology(const oaRouteTopology &topology);
Changes to Observers
The oaAppDef* (pointer to the definition) is passed to the observer whenever any of its data changes.
Changed the Controlling Flags for oaGuide Iterators and Collections
From:
#define oavGuideIterBeginLayer 0x0001u
#define oavGuideIterEndLayer 0x0002u
#define oavGuideIterBeginAndEndLayers 0x0003u
To:
#define oacGuideIterBeginLayer 0x0001u
#define oacGuideIterEndLayer 0x0002u
#define oacGuideIterBeginAndEndLayers 0x0003u
API Change Reports
View a summary of the OpenAccess 2.2 b009 changes with respect to 2.2 b008.
View a summary of the OpenAccess 2.2 b009 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 92.
- Tech database incremented to 56.
- Wafer database incremented to 9.
- Detailed parasitics database incremented to 8.
- DM lib database incremented to 13.
Fixed PCRs
- Detaching a module that has vectorInst bits causes a crash.
- There are multiple block domain nets with same name after using
verilog2oa.
- oaOccBusNet::find fails with step sizes greater than one.
- When
def2oa runs in update mode, it adds vdd/vss connections that appear in oa2verilog -- these connections should have block-only visibility.
- Need transaction access checking when in a DM data transaction.
oa2verilog: sticky isInterface bit causes bad connectivity.
- oaDesign::undo does not restore the right checkpoint.
- Unable to get the appropriate flat net names in the block domain.
- oaDMTurbo Plug-In: Need file name portability across UNIX and Windows.
- After running
verilog2oa, there are two nets in the block domain that have the same name but are identified as the same net.
- isPreferredEquivalent returns false for block domain nets.
- If you create a block-only terminal on the net TN1 in the top block, then printing the top module using EMHOut, which iterates over the modNets and terminals on the modNet TN1, crashes.
- getMemberNets on a BusNet should return itself.
- pathSeg setPoints crashes when there are existing shapes.
- Need to remove topology from routes.
- Need three optional attributes for oaResistor: effective width, length, and height; number of cuts; cut area and cut perimeter.
- Some type names are not consistent with the class names for the oaModModuleScalarInst, oaModModuleVectorInst, and oaModModuleVectorInstBit classes.
- Need to clean up database initialization and eliminate argc and argv.
oa20to22 does not translate routing direction correctly.
def2oa misses vias in SPECIALNETS.
- Need to refine operations for derived layer definition.
oa2verilog modeling of unconnected term bits is not correct.
- Need a better error message when the
.oalib file is missing.
- The oaCell:makeEditable function crashes.
- Problems with comments and openLibs() in libDefs.
- A library cannot be opened at the same time by multiple clients.
- Add the oaAppDef* argument to observers.
- Need to clean up interPointer extension when an object is deleted.
- You get the incorrect siteDefWidth value if the rowHeader is not bound.
- Memory resize failed at oaGCellTbl().
def2oa failed to translate DEF file with error: Error: Line 110109: Exception: Invalid syntax in input name.
lef2oa should also store WIDTH as an oacMinWidth foundry rule.
- There is an infinite loop in oaIter<oaProp>.
- Disallow zero as the number of siteDefs in oaRow object.
- OpenAccess does not map the viewtype name VERILOGAText to the correct file name.
- Crash in getViewType() for an unknown view.
- Crash while translating cmos_c9d1 library.
Beta 2.2 b008
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
TCL Bindings
- Currently, the TCL bindings for pointArrays do not work correctly.
- Currently, the TCL bindings are not available on Linux 64-bit: AS 2.1 (Itanium).
Examples
The following examples are not currently working:
- PCells
- PinConnections
- LibStructureData
- LibStructure
- opnMBitConnectivity
- opnConnectivity
Release Highlights
Design Management (DM) Changes
You need to recreate your old libraries for b008 either by re-translating them or by recreating them from scratch. (This is due to a change in the format of the library description file (.oalib)).
Removed APIs
Now that transactions are fully implemented, the following function is not needed and has been removed:
oaDMObject::release()
New APIs
The following function returns the full path to the library:
void oaLib::getFullPath(oaString &fullPath) const;
The following function returns the name of the DM system associated with the library at creation time.
void oaLib::getDMSystemName(oaString &dmSystem) const;
Modified APIs
Previously, the following function returned the library name and the DM system name in the list of attributes. This functionality is no longer needed and has been removed. The library name can be returned directly from an oaLib, and the DM system name can be queried directly.
oaLib::getAttributes()
EMH
You can now destroy a portion of an occurrence hierarchy using a new function, oaOccurrence::destroy(). Applications can use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
In addition, an optional argument has been added to several functions to control whether the occurrence hierarchy is expanded. In each session, an application must expand the occurrence hierarchy as much as needed. After doing so, the application can avoid expanding the occurrence hierarchy further by setting expand to false when calling the following functions:
oaOccInstTerm::getTerm(oaBoolean expand = true) const
oaOccInst::getMasterOccurrence(oaBoolean expand = true) const
oaOccModuleInstHeader::getMasterOccurrence(oaBoolean expand = true) const
oaFSComponent Changes
- oaFSComponent::isNonEmpty() moved to oaFile::isNonEmpty().
- oaFSComponent::isOpen() moved to oaFile::isOpen().
Changes to oaTerm, oaInstTerm
The default oaRouteMethod for a new oaTerm or oaInstTerm has changed from oacGeometricRouteMethod to oacSymbolicRouteMethod. Specifically, the changes include the following:
- Removed the oaRouteMethod argument from oaTerm::create().
- Removed the oaRouteMethod argument from oaScalarTerm::create().
- Removed the oaRouteMethod argument from oaBusTermBit::create().
- The default routeMethod value for new bitTerms is oacSymbolicRouteMethod.
Translator Changes
- The default value of the
–DMSystem option has changed to "oaDMSystem" for all translators. The "oaDMSystem" value indicates that the default DM plug-in, which is defined for the entire DM system, should be used rather than selecting a DM plug-in on a per library basis.
- Any import translators that create instTerms and terminals have been updated according to Changes to oaTerm, oaInstTerm.
- A new command line option,
-DMAttributes, has been added to translators that import data into OpenAccess. See the documentation for the individual translators for details.
- The default behavior for
lef2oa is now update, and there is an –overwrite option to be consistent with the other translators.
- By default, all translators now produce a log file named
<application>.log. The -logFile option let's you choose a different name for the log file.
Recompiling LEF and DEF Translators
The liblef and libdef static libraries, which comprise the LEF/DEF parsers, are no longer included in the OpenAccess installation because they are licensed separately. Note that the OpenAccess LEF/DEF translator executables are still available inside the distribution.
If you want to recompile the LEF/DEF translators, you need to download and compile the LEF/DEF parser from https://openeda.si2.org/projects/lefdef/. See Optionally Compiling Translators for instructions.
API Change Reports
View a summary of the OpenAccess 2.2 b008 changes with respect to 2.2 b007.
View a summary of the OpenAccess 2.2 b008 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 91.
Fixed PCRs
- oaOccTerm::find fails to find terms in an occurrence.
- oaOccurrence::getInstTerms does not return the objects.
- There is an infinite loop in oaModNet->getOccNets.
- If you create an ordered group in a tech DB, save the techfile, then quit and start a new session, the group is not ordered.
- occInsts of an autonamed modInst have different names.
- The incorrect value is returned by occModuleScalarInst::isBound.
- The oaCoreBoxSpec:getNumRows() and oaCoreBoxSpec::getRowBBox() methods return incorrect results.
- The oaRowTbl::overlaps() function is not used.
- Incorrect row bBox values are produced when using
lef2oa and def2oa.
verilog2oa rejects valid Verilog statements.
oa2spef writes nodes in both *I and *N sections.
- Nested library-level transactions are not functioning correctly.
- A crash occurs when deleting pinFigs on the last net defined.
- A crash occurs when iterating on techfile constraints.
oa2strm does not recognize libraries from the libDefFile.
- Need a minBoundaryEnclosure constraint.
lef2oa should not create duplicate lib.defs entries.
oa2lef cannot find library translated by cdb2oa.
- Library generated by
lef2oa is corrupted.
- Undo after a move operation on an instance does not work for areaHalo.
- Add option to spec the order of refLibs during
def2oa.
Beta 2.2 b007
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
- A planned capability to destroy a portion of an occurrence hierarchy has not yet been implemented. When available, applications will be able to use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
- The PCells example is not currently working.
Release Highlights
- All array classes are now instantiations of the template class oaArray.
API Change Reports
View a summary of the OpenAccess 2.2 b007 changes with respect to 2.2 b006.
View a summary of the OpenAccess 2.2 b007 changes with respect to OpenAccess 2.1.
Database Version Changes
- No Database version changes.
Fixed PCRs
- Docs for RegionQuery Incorrectly States Hierarchy is Opene
- 2 must join terms can have the same net
- disallow set halo owner to be NULL
- speed up getNext function
- speed up zoneTree getNext function
- - crash when opening a schematic in dfII
- - OA creates >1 object for same cellview on
- def2oa to handle assign statements in verilog
b007 Limitations
- TCL is temporarily unavailable
- If a library is created or opened in Non-Shared mode and the library is not closed, the lock is “stranded” – the lock file is left behind. The work around, as with any stranded lock, is to delete the lock file
Beta 2.2 b006
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
- A planned capability to destroy a portion of an occurrence hierarchy has not yet been implemented. When available, applications will be able to use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
- The PCells example is not currently working.
Release Highlights
SPEF to OpenAccess Translator (spef2oa) is Available
spef2oa is the standard translator implementation that reads a SPEF file and annotates an OpenAccess database with parasitic information. The translator only adds parasitic information to an existing database. spef2oa does not create connectivity. The translator runs from the command line and includes options to control what information is read from the SPEF file and how the information is stored in the database.
For more information, see spef2oa Translator.
New APIs for Library Definition Files (lib.defs)
The purpose of this set of APIs is to provide a mechanism to open all the libraries in a library definition file as well as to provide an interface to update the contents of library definition files.
- The classes are as follows:
- oaLibDefList - An ordered list of zero or more oaLibDefListMem objects. There are zero or more oaLibDefList objects per session, each of which has a library definition file (typically named
lib.defs) on disk.
- oaLibDefListMem - Represents the member object in a libDefList.
- oaLibDef - Derived from oaLibDefListMem. Represents a library definition with attributes.
- oaLibDefListRef - Derived from oaLibDefListMem. Represents a reference to another oaLibDefList.
- OpenAccess provides oaLibDefList::openLibs utility APIs to open libraries defined in the library definition file.
- OpenAccess also supports the concept of a default library definition file, which is defined as a file named
lib.defs and is searched for in the following order:
- The current working directory
$HOME
- The OpenAccess installation hierarchy
OpenAccess will open libraries from the default library definition file using oaLibDefList::openLibs() if no other file is specified.
- In the context of the openLibs() call, OpenAccess imposes a rule to resolve conflicting library definitions in the library definition files hierarchy: The last definition encountered during parsing is used.
- The error and warning messages for openLibs() are provided through specific exceptions and Observer (oaObserver<oaLibDefList>) notifications.
Change to oaPointArray API
oaPointArray now derives from oaArray<oaPoint>.
As a result of this change, any {get,set}NumPoints() methods become {get,set}NumElements() methods.
Non-Shared Library Access Mode in the FileSys DM System
The FileSys DM System now lets you access a library in non-shared mode via the oaLibMode class. When one client accesses a library in non-shared mode, no other client is allowed access to that library (no lock files will be produced for those other clients). This enhancement improves the performance of translators that create or update data in a library.
Note that the FileSys plug-in will not fail to open a library in non-shared mode if other clients have already opened the library.
To use the new non-shared mode, pass the oaLibMode argument with a value of oacNonSharedLibMode to oaLib::create() and oaLib::open() as follows:
newLib = oaLib::open(scalarLibName, libPath, "", oacNonSharedLibMode);
newLib = oaLib::create(scalarLibName, libPath, oacNonSharedLibMode, dmSystem);
New Library Mode API
The oaLib::getMode() method is now implemented.
Constraints
- Changed the allowed value for oacMergeSpaceAllowed from oacBooleanValueType to oacIntValueType.
- Removed oaInt1DTblValueType as a valid value on the oacMinClearance and oacMaxClearance constraints.
- Removed AreaBoundary and PRBoundary from the value objects list on the oacMinClearance constraint.
- Added a new built-in constraintParamDef called oacCoincidentAllowedParamType, which has an oaBooleanValueType value. This new definition represents conditions such as extension, which must be either minimum or coincident.
- Removed the oacCoincidentExtensionAllowed built-in constraint because this can now be represented using the supported extension constraints and the oacCoincidentAllowed parameter.
- Added an oacMinBoundaryExtension built-in constraint to describe the minimum extension of a well past a boundary. This is a new oaLayerConstraintType, with the following attributes:
- valid values (oaIntValue)
- valid databases (oaDesign, oaTech)
- valid objects (oaPrBoundary, oaAppObject)
oaBooleanValue API Change
oaTechInit() Calls oaDMInit()
oaTechInit() now automatically calls oaDMInit(). This affects the signature for oaTechInit(), adding two new arguments, argc and argv.
void oaTechInit(oaInt4 *argc,
char *argv[],
oaUInt4 apiMajorRev,
oaUInt4 apiMinorRev)
Moving Functions to the Bit Classes
As a result of the changes in 2.2 to support bitwise connectivity, all the connectivity classes that have Busses (or Vectors) now have a Bit class for the single-bit objects, such as oaBitNet and oaBitTerm. Many member functions on the parent classes, such as oNet and oaTerm, are only used on single-bit objects, but previously had to be on the parent of the Scalar and Bus sub-classes. Functions that only apply to single-bit objects have been moved to the new Bit classes, and other functions with arguments or return values that refer to single-bit objects have changed to the more specific type.
Changes to oaNet and oaBit
The following member functions have been moved from oaNet to oaBitNet:
oaBoolean isPreferredEquivalent() const
oaNet* getPreferredEquivalent() const
oaRoutePattern getRoutePattern() const
oaFloat getVoltage() const
oaConnStatus getConnStatus() const
oaNet* getShieldNet1() const
oaNet* getShieldNet2() const
oaNet* getOriginal() const
void getParasiticConfidence(oaUInt4 &minValue,
oaUInt4 &maxValue) const
void setPreferredEquivalent()
void setRoutePattern(oaRoutePattern routePattern)
void setVoltage(oaFloat voltage)
void setConnStatus(oaConnStatus status)
void setShieldNet1(oaNet *shieldNet)
void setShieldNet2(oaNet *shieldNet)
void setOriginal(oaNet *original)
void setParasiticConfidence(oaUInt4 value)
void setParasiticConfidence(oaUInt4 minValue,
oaUInt4 maxValue)
void makeEquivalent(oaNet *equivNet)
void breakEquivalence()
oaCollection<oaSteiner, oaNet> getSteiners() const
oaCollection<oaVia, oaNet> getVias(oaUInt4 filterFlags = oacViaIterNetRoutes) const
oaCollection<oaNet, oaNet> getEquivalentNets() const
The following had return or argument types modified as appropriate for oaBitNet:
oaBitNet* getPreferredEquivalent() const
oaBitNet* getShieldNet1() const
oaBitNet* getShieldNet2() const
void setShieldNet2(oaBitNet *shieldNet)
void makeEquivalent(oaBitNet *equivNet)
oaCollection<oaSteiner, oaBitNet> getSteiners() const
oaCollection<oaVia, oaBitNet> getVias(oaUInt4 filterFlags = oacViaIterNetRoutes) const
oaCollection<oaBitNet, oaBitNet> getEquivalentNets() const
The single-bit member net collection:
oaCollection<oaNet, oaNet> getSingleBitMembers() const
Was changed to contain oaBitNets:
oaCollection<oaBitNet, oaNet> getSingleBitMembers() const
Changes to oaShape and oaVia
The following member functions on oaShape and oaVia have been modified to refer to oaBitNet.
oaBitNet* oaShape::getShieldNet1() const
oaBitNet* oaShape::getShieldNet2() const
void oaShape::setShieldNet1(oaBitNet *net)
void oaShape::setShieldNet2(oaBitNet *net)
oaBitNet* oaVia::getShieldNet1() const
oaBitNet* oaVia::getShieldNet2() const
void oaVia::setShieldNet1(oaBitNet *net)
void oaVia::setShieldNet2(oaBitNet *net)
Changes to oaModNet and oaModBitNet
The following member functions have been moved from oaModNet to oaModBitNet:
oaBoolean isPreferredEquivalent() const
oaModNet* getPreferredEquivalent() const
void setPreferredEquivalent()
void makeEquivalent(oaModNet *equivNet)
void breakEquivalence()
The following had return or argument types modified as appropriate for oaModBitNet:
oaModBitNet* getPreferredEquivalent() const
void makeEquivalent(oaModBitNet *equivNet)
oaCollection<oaModBitNet, oaModBitNet> getEquivalentNets() const
The single bit member net collection:
oaCollection<oaModNet, oaModNet> getSingleBitMembers() const
Has been change to contain oaModBitNets:
oaCollection<oaModBitNet, oaModNet> getSingleBitMembers() const
Changes to oaOccNet and oaOccBitNet
The following member functions moved from oaOccNet to oaOccBitNet:
oaBoolean isPreferredEquivalent() const
void getParasiticConfidence(oaUInt4 &minValue,
oaUInt4 &maxValue) const
oaCollection<oaOccNet, oaOccNet> getEquivalentNets() const
The following had return or argument types modified as appropriate for oaOccBitNet:
oaCollection<oaOccBitNet, oaOccBitNet> getEquivalentNets() const
The single-bit member net collection:
oaCollection<oaOccNet, oaOccNet> getSingleBitMembers() const
Has been changed to include oaOccBitNets
oaCollection<oaOccBitNet, oaOccNet> getSingleBitMembers() const
Changes to oaTerm and oaBitTerm
The following member functions have been moved from oaTerm to oaBitTerm:
oaRouteMethod getRouteMethod() const
oaPinConnectMethod getPinConnectMethod() const
oaRoutePattern getRoutePattern() const
oaTerm* getSupplySensitivity() const
oaTerm* getGroundSensitivity() const
void getAntennaData(oaAntennaData &data,
const oaAntennaDataModel &model() const
void setRouteMethod(oaRouteMethod routeMethod)
void setPinConnectMethod(oaPinConnectMethod pinConnMethod)
void setSupplySensitivity(const oaTerm *term)
void setGroundSensitivity(const oaTerm *term)
void setMustJoin(const oaTerm *term)
void unsetMustJoin()
void setAntennaData(const oaAntennaData &data)
void unsetAntennaData(const oaAntennaDataModel &model)
oaBoolean isAntennaDataSet(const oaAntennaDataModel &model)
oaCollection<oaTerm, oaTerm> getMustJoinTerms() const
The following had return or argument types modified as appropriate for oaBitTerm:
oaBitTerm* getSupplySensitivity() const
oaBitTerm* getGroundSensitivity() const
void setSupplySensitivity(const oaBitTerm *term)
void setGroundSensitivity(const oaBitTerm *term)
void setMustJoin(const oaBitTerm *term)
oaCollection<oaBitTerm, oaBitTerm> getMustJoinTerms() const
API Change Reports
View a summary of the OpenAccess 2.2 b006 changes with respect to 2.2 b005.
View a summary of the OpenAccess 2.2 b006 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 90.
- Tech database incremented to 55.
- Wafer database incremented to 8.
- DM lib database incremented to 12.
- Detailed parasitics database incremented to 7.
Fixed PCRs
- Performing a positional instTerm->getTerm causes a crash when the vecInstBit is implicit.
- When you create an instTerm on a module, the instTerm's parents are not validated.
- oaOccInstTerm::find is crashing for a bundle name.
- OccInstTerm::find by position returns an object instead of an exception if the instTerms are defined by name.
- Vector names are incorrectly converted to the DEF namespace.
- If you destroy a pin, then perform an undo, perform a redo, create another object, and then perform an undo again, the creation operation is undone, but not the destroy operation.
- There is a problem with textOverride.
- When clusterBoundaries are deleted in a specific order, the cluster->boundary collection does not return the correct number of boundaries.
- Cannot find the pin after performing oaPin::setTerm().
- If you create a parent cluster, then add children clusters, then delete children clusters, cluster->getClusters().getCount() returns an incorrect number.
- oaPcellLink::find causes a core dump.
- Core dump during
oa20to22 translation of instTerms.
- Core dump during
oa20to22 translation of nets.
- oaAreaHalo::setOwner(oaPRBoundary* ) causes a crash.
- The init() API documentation for oaVectorName/oaVectorBitName is not clear.
- OpenAccess should accept an empty 2D table value.
- Cannot find default constraint group by name.
- A compilation error occurs while creating an oaViaDef2DTbVal object.
-
verilog2oa performance issue.
- All translators should provide consistent banner message at startup.
- oaParasiticNetwork::exists throws an exception if no parasitics exist.
- oaParasiticNetwork::create throws an exception if the design is in read mode.
Beta 2.2 b005
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
SPEF Reader
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
- A planned capability to destroy a portion of an occurrence hierarchy has not yet been implemented. When available, applications will be able to use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
- The PCells example is not currently working.
Release Highlights
Changes to TCL Bindings
64-bit versions of the TCL bindings are now available.
Also, the commands to load the oaTcl shared library have changed, as shown in the following table.
Platform |
Command |
| Solaris |
load oaTcl.so oa |
| Linux |
load oaTcl.so oa |
| IBM |
load oaTcl.so oa |
| HP |
load oaTcl.sl oa |
| Windows |
load oaTcl.dll oa |
New oaCellView::setView API
void oaCellView::setView(const oaView *view);
This API changes the parent view of the cellView. If the viewType is changed, the primary file name also changes. If the primary file exists on disk, it is renamed.
An exception is thrown if another cellView already has the cellName and viewName that this cellView would have after the change is made. (oacCVExists).
An exception is thrown if a file already exists in the cellView with the same name that the primary file is to be renamed. (oacCVSetViewPrimaryFileExists)
An exception is thrown if the primary file cannot be write locked.
Compiling Verilog Translators
Bison 1.875-3 is now required for compiling the Verilog translators instead of Bison++. For more information, see Optionally Compiling Translators in the Installation and Configuration Notes.
Change to oaDesign::getTech()
getTech has been updated to first look for a local technology database, then look for an attached technology database.
If getTech finds a technology database in the library containing the design, it opens that local technology database (if it is not already open) and returns a pointer to that technology database.
If getTech does not find a local technology database, it looks for a library property called "techLibName". The techLibName property specifies a different library containing the technology database, which is called an attached technology database. If this property is found, getTech opens the attached technology database (if it is not already open) and returns a pointer to that technology database.
API Change Reports
View a summary of the OpenAccess 2.2 b005 changes with respect to 2.2 b004.
View a summary of the OpenAccess 2.2 b005 changes with respect to OpenAccess 2.1.
Database Version Changes
- Design database incremented to 88.
- Detailed parasitics database incremented to 6.
Fixed PCRs
- oaOccModuleVectorInst::find should not take an oaVectorBitName arg.
- Need to throw an exception if the caller specifies oacInstTermIterSingleBit to any of the net->getInstTerms() collections.
- Destroying an unbound inst with instTerms causes a crash.
- The equal operators from oaCoreBoxSpec and oaTransform should be friend functions to be consistent with other equal operators.
- oaAppDef::remove fails to remove data.
- Need to add Bbox caching to rows.
- Hierarchy depth (hierDepth option) is not working for vias.
- You get the wrong queryInst result after scalarizing a vectInst when performing a region query.
- oaInstTerm::AddToNet is too slow.
- Unable to change the net of a multi-bit instTerm by position.
- When creating positional instTerms, OpenAccess should validate the net width against the inst width.
- If you have an oaModVectorInstBit (instance of a design) in a module, you cannot create an oaModModuleVectorInst (instance of a module) in the same module.
- Should not be able to find oaOccModuleVectorInstBit objects in the hierarchy of an occModuleVectorInst.
- DM needs a public API for calcVMSize.
- Cannot open design in read mode due to DM permissions.
- Undoing a destroy operation on module insts (vector and scalar) causes a crash.
- oaDesign with non-persistent AppDefs cannot be saved.
- def2oa should give an error message when changing the connectivity.
- def2oa fails when there are implicit terminals in the design.
- Single bit bus not deleted from BundleNet.
- Hierarchical find for oaOccVectorInsts is not working.
- Application crashes during openHier() call.
- mw2oa reports illegal name in the logfile.
Beta 2.2 b004
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
SPEF Reader
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
- A planned capability to destroy a portion of an occurrence hierarchy has not yet been implemented. When available, applications will be able to use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
Examples
- The PCells example is not currently working.
Release Highlights
TCL Bindings for OpenAccess APIs are Available
The OpenAccess API is available in TCL, for version 8.4.1 and later. In order to use this, you need to install TCL 8.4.1. You can obtain this from:
http://www.tcl.tk
If you compile the TCL bindings (oaLang package), there will be compilation warning messages. The OpenAccess team is aware of this issue and is working to correct it. Note that there is no need to compile the TCL bindings unless you want to work on a platform that is not one of the OpenAccess precompiled platforms.
Note: Only 32-bit versions of the TCL bindings are currently available. 64-bit versions will become available in a subsequent release.
Prerequisites
Before you invoke the TCL shell:
- Make sure that your OpenAccess libraries are in your library path. This also ensures that the OpenAccess libraries for TCL are in your library path:
- liboaTCL.so on Solaris, Linux and AIX
- liboaTCL.sl on HPUX
- oaTCL.dll on Windows
- Make sure that you have the TCL shared library in your library path. For 8.4 release of TCL, the shared libraries are as follows:
- libtcl8.4.so for Solaris, Linux, and IBM
- libtcl8.4.sl for HP
- tcl8.4.dll for Windows
- Make sure the oaLibServer executable is in your executable path to open design libraries.
Using the TCL Bindings
You can invoke TCL from the command line. For example:
> tclsh8.4
This starts the TCL shell that came from the TCL distribution. You can now enter TCL commands. To see all available commands in the global TCL namespace, use the info command:
% info commands *
This returns:
tell socket subst open eof pwd glob list exec pid auto_load_index time
unknown eval lrange fblocked lsearch auto_import gets case lappend
proc break variable llength auto_execok return linsert error catch
clock info split array if fconfigure concat join lreplace source
fcopy global switch auto_qualify update close cd for auto_load file
append format read package set binary namespace scan trace seek while
flush after vwait uplevel continue foreach lset rename fileevent
regexp upvar unset encoding expr load regsub history interp exit
puts incr lindex lsort tclLog string
All OpenAccess commands are provided in the TCL namespace oa. To view commands in this namespace, enter:
% info commands oa::*
At this point, there aren't any available commands because the oaTcl shared library has not been loaded. To do so, use the TCL load command for your platform:
Platform |
Command |
| Solaris |
load liboaTcl.so oa |
| Linux |
load liboaTcl.so oa |
| IBM |
load liboaTcl.so oa |
| HP |
load liboaTcl.sl oa |
| Windows |
load oaTcl.dll oa |
The info command now shows a long list of functions. To see the commands for opening libraries, use:
% info commands oa::Lib*
This returns:
::oa::LibDefFileAddLib ::oa::LibServerGetDefaultPortNum
::oa::LibDefFileGetLibDefFiles ::oa::LibDefFileIter
::oa::LibGetOpenLibs ::oa::LibDefFileGetCurrent
::oa::LibMode ::oa::LibCreate ::oa::LibDefFileRemoveLib
::oa::LibExists ::oa::LibServer ::oa::LibServerGetLocalHostName
::oa::LibDefFileCollection ::oa::LibServerFindServerFor ::oa::LibOpen
::oa::LibDefFileGetDefault ::oa::LibFind ::oa::LibDefFileLoad
Note that oa::LibCreate is in this list. To obtain information on a particular command use oa::help as follows:
% oa::help LibCreate
This returns:
LibCreate
name oaScalarName
libPath oaString
mode oaLibMode
dmSystem oaString
dmAttrList oaDMAttrArray
==> oaLib
Try creating a library, for example:
% oa::LibCreate myLib myLib
This returns an address such as:
oa:0x80013
Examples
There are sample scripts in your installation hierarchy in <install_dir>/examples/oa/tcl.
Troubleshooting
- When you issue oa::LibCreate, you get an abort and the TCL shell exits. In this case, make sure your library path includes the path to the TCL libraries.
- After you perform oa::LibCreate, you get an error message:
Exception #0 received from DM Interface component: Received exception Server unable to create library due to: Unable to create library myLib at path /home/oapv/myLib: OS error code: '13': "Permission denied"
% exit
In this case, you don't have access to the libserver. Restart the libserver.
Changes for Library Definition Files
The following search path is now used by OpenAccess to locate lib.defs files.
./lib.defs
$HOME/lib.defs
<install_dir>/data/libraries/lib.defs
Changes to oaLibDefFile::load()
- The load() functions now returns void.
class OA_DM_DLL_API oaLibDefFile {
public:
static void load();
static void load(const oaString &path);
- oaObserver<oaLibDefFile>::onParseWarnings() is replaced by oaObserver<oaLibDefFile>::onLoadWarnings(), which takes an additional enum:
virtual oaBoolean onLoadWarnings(const oaString &path,
const oaString &msg,
oaLibDefFileWarningTypeEnum type);
where the enum is defined as:
enum oaLibDefFileWarningTypeEnum {
oacNoDefaultLibDefFileWarning = 0,
oacCannotOpenDefaultLibDefFileWarning = 1,
oacSyntaxErrorLibDefFileWarning = 2,
oacCannotOpenIncludeLibDefFileWarning = 3,
oacRecursiveIncludeLibDefFileWarning = 4,
oacMultiDefinitionsLibDefFileWarning = 5,
oacCannotOpenLibLibDefFileWarning = 6
};
DM Data Transactions
The DM data transactions have not changed between b003 and b004. However, the following information about DM data transactions is more clear than the information in the b003 release notes.
A data transaction on a DM object can exist outside of the library transaction, as follows:
lib->startTrans(oacReadDMTransType);
oaCell *cell = oaCell::find(dmLib, dmCellName);
cell->startDataTrans(oacWriteDMTransType);
dmLib->endTrans();
The library transaction is necessary to obtain the pointer for the DM object. A DM data transaction is then started for the DM object. The library transaction can be ended at this time, and other processes can now obtain library transactions and modify the library. However, any DM object that has an active library transaction is protected from destruction by other processes.
The DM object pointer remains valid because of the active DM data transaction.
While the DM object pointer is valid, it can be used to create and access DM data (properties). In addition, some DM APIs on the object that access information about that object can be used. Any other APIs are blocked because the caller does not have a valid library transaction. In particular, any API that returns information about other library objects is disallowed.
When the outermost data transaction is ended, the object pointer becomes invalid if there is no encompassing library transaction.
API Changes for Parasitic Network Partition Support
New APIs:
static oaParasiticNetwork *create(oaParasiticNetwork *parent);
static oaParasiticNetwork *create(oaParasiticNetwork *parent,
const oaString &name);
static oaParasiticNetwork *find(oaParasiticNetwork *parent,
const oaString &name);
void setBBox(const oaBox &bBox);
void getBBox(oaBox &bBox) const;
oaBoolean isLoaded();
oaBoolean isParent();
oaParasiticNetwork *getParent();
void load(oaBoolean allPartitions = false);
oaCollection<oaParasiticNetwork, oaParasiticNetwork> getPartitions() const;
Changed API:
static oaParasiticNetwork *load(const oaDesignObject *net,
const oaAnalysisPoint *ap,
oaBoolean allPartitions = false);
API Change Reports
View a summary of the OpenAccess 2.2 b004 changes with respect to 2.2 b003.
View a summary of the OpenAccess 2.2 b004 changes with respect to OpenAccess 2.1.
Database Version Changes
The database version numbers have not changed since b003.
Fixed PCRs
- oaOccModuleInstHeader::getInsts returns a colllection of the wrong type.
- Missing implementation of an oaInstCollection constructor.
- oaModModuleVectorInstBit::setName throws an exception.
- oaModModuleScalarInst::setName is not reflected on all its occurrences.
- If you specify a parent module in a call to oaModInstHeader::getInsts(...), the instances that are contained by other parents are not filtered out.
- oaModule is the only oaName object that has no getName(const oaNameSpace &ns, oaString &name) method.
- Added support for parasitic network partitions.
- OpenAccess crashes when opening a technology library in append mode.
- Need to filter implicit instances from regionQuery.
Beta 2.2 b003
Beta Exceptions
Design Management
- The Version Control API is available, but a complete example implementation is not. However, a boilerplate sample that might be used as the starting point for an implementation is available. See Version Control (VC) System Plug-In for more information.
- The Library Server (Turbo DM system) currently only allows a single user to access a library at a time. The permissions are determined by the permissions of the user who starts the library server.
- oaDMObject::destroy has no effect when called on an oaLib.
SPEF Reader
TCL Bindings to OpenAccess
- Although this was not part of the original OpenAccess 2.2 definition, Cadence is developing TCL bindings to OpenAccess. This feature is not yet available.
EMH
- Collections related to global nets are not yet supported in the occurrence domain, and references to the same global signal in different occurrences are not yet merged into a single oaNet in the block domain.
- A planned capability to destroy a portion of an occurrence hierarchy has not yet been implemented. Applications will be able to use this capability to improve capacity and performance when performing significant edits in the block or module domain, which often invalidate all related occurrence annotations.
Documentation Status
- OpenAccess API Specification -- The API documentation matches the current implementation of the code. In places where the code implementation is incomplete, the documentation states that the method is not yet supported, and the code itself throws an oacNotYetSupported exception. There are also places in the API documentation with notes about documentation work that still needs to be done (ToDo items).
- Programmers Guide -- Most sections have been updated to reflect the latest 2.2 functionality except:
- Open Access Hierarchy
- Creating and Modeling Process Rules and Constraints -- Incomplete draft
- Coding Style Guide and Standards -- Beta draft
- Information Models Diagrams – Beta drafts
- LEF and DEF Translators -- Beta draft
- LEF/DEF to OpenAccess Mapping -- Out of date, no 5.6 updates
- Stream Translators -- Beta draft
- Stream to OpenAccess Mapping -- Beta draft
- Verilog Translators and Annotator -- Beta draft
- Verilog Mapping documents -- Beta draft
- OpenAccess to SPEF Translator (oa2spef) -- Beta draft
- SPEF to OpenAccess Mapping -- Beta draft
- Milkyway Database Translator -- Beta draft
- Milkyway to OpenAccess Mapping -- Beta draft
- Migrating Applications to Version 2.2 -- Script is documented. Manual steps for migration are not documented. Not applicable to 2.1 releases.
- Automatically Updating 2.0.x Libraries to 2.2 -- Beta draft. Not applicable to 2.1 releases.
- Release Notes -- Complete, but represent incremental updates, not an overall summary.
- Installation and Configuration Notes -- Beta draft
Examples
- The PCells example is not currently working.
Release Highlights
New Reserved viewTypes
The viewTypes in green are new reserved viewTypes, which are included because they are common viewTypes. There is no corresponding OpenAccess database representation for these new viewTypes.
enum oaReservedViewTypeEnum {
oacMaskLayout = 0,
oacSchematic = 1,
oacSchematicSymbol = 2,
oacNetlist = 3,
oacWafer = 4,
oacVerilogAMSText = 5,
oacVHDLAMSText = 6,
oacVerilogText = 7,
oacVHDLText = 8,
oacVerilogAText = 9
};
These are the corresponding viewType names:
oacVerilogAMSText "verilogAMSText"
oacVHDLAMSText "VHDLAMSText"
oacVerilogText "verilogText"
oacVHDLText "VHDLText"
oacVerilogAText "verilogAText"
In the FileSys plug-in, there is a specific file name associated with each viewType, as follows:
oacVerilogAMSText "verilog.vams"
oacVHDLAMSText "vhdl.vhms"
oacVerilogText "verilog.v"
oacVHDLText "vhdl.vhd"
oacVerilogAText "veriloga.va"
For more information about the new viewTypes, see OpenAccess 2.2 Libraries and DM API.
DM Data Transactions
A data transaction on a DMObject can exist outside of the library transaction, as follows:
lib:startTransaction
lib -> cell
cell -> startDataTransaction
lib:endTransaction
At this point, data cannot be accessed from the library or the cellView. Data can only be accessed from the cell itself. Other users can edit the library while the data transaction on the cell is occurring.
The data transaction can be closed directly from the cell.
For more information, see the Code Example - Referencing DMObjects with Active Data Transactions.
API Changes for Library Definition Files
- oaLoadLibs() is replaced by oaLibDefFile::load(). The following search path is used by OpenAccess to locate
lib.defs files.
./lib.defs
$HOME/lib.defs
<install_dir>/data/libDefs/lib.defs
Note: The name of the libDefs subdirectory will change in B004.
- In addition, the following functions are available from oaLibDefFile:
- load()
- getCurrent
- getDefault
- addLib
- removeLib
- getLibDefFiles
API Changes for oaLib
Two new APIs have been added to oaLib:
- void oaLib::getAttributes(oaDMAttrArray &attrList) const;
This function retrieves the attributes associated with the library, its DM system, and its version control system and places them in the specified attribute array.
- void oaLib::setAttributes(const oaDMAttrArray &attrList);
This function attempts to change the attributes associated with the library, its DM system, and its version control system if one is configured. Any exceptions thrown are specific to the DM system and the version control system.
Iterator Copy Constructors
Iterator copy constructors no longer reset the target iterator.
Support for Diagonal PathSegs and Chamfered Ends for Orthogonal and Diagonal PathSegs
Support for diagonal oaPathSegs and chamfered ends in oaSegStyles has been implemented. New constructors for oaSegStyle accommodate PathSegs with one chamfered and one square end. See oaPathSeg and oaSegStyle for details.
Translator Changes
Updating Library Definition Files
- All translators accept a
-libDefFile option to explicitly load a particular lib.defs file. If you don't supply the –libDefFile option, the default search mechanism of the DM system is used to locate the lib.defs file.
- Translators that create libraries update the
lib.defs file with the definitions of the new libraries using the oaLibDefFile::addLib(oaLib*) API. The DM system determines which lib.defs file is updated and what information is stored in the lib.defs file.
- Translators will not find any libraries that are not listed in the
lib.defs file, even libraries in the current working directory.
Translator Behavior (Appending, Overwriting, and Creating Designs)
The default mode for all translators is append, which means that the translator can create new designs in the library but cannot overwrite existing designs. There is a new -overwrite option, which lets most translators overwrite existing designs and create new ones in the library. However, the verilogAnnotate translator always appends data to existing designs and does not accept the -overwrite switch.
Notes:
- Currently,
lef2oa does not overwrite the techDB when the -overwrite mode is specified.
strm2oa previously used a -noOverwrite option to specify that existing cells were not to be overwritten, and the default was to overwrite. Now, the default is not to overwrite unless the -overwrite option is provided.
oaDefIn Class Changes
Previously, in order to customize def2oa, you had to derive from the base translator class and the helper classes. Starting with B003, you need only derive from the helper class, then register your user derived helper classes with the base translator class.
Constraint API Changes
- oaConstraintType is replaced by the following:
- oaSimpleConstraintType
- oaLayerConstraintType
- oaLayerPairConstriantType
- The method oaConstraintDef::get(oaConstraintType) is replaced by the following:
- oaSimpleConstraintDef::get(oaSimpleConstraintType)
- oaLayerConstraintDef::get(oaLayerConstraintType)
- oaLayerPairConstraintDef::get(oaLayerPairConstraintType)
Observer API Changes
- Added a new observer class:
- Added the following methods to oaObserver< oaLib>:
- Removed the following method from oaObserver< oaLib>:
- onFirstAccess -- OnPostOpen handles this functionality
- Changed oaObserver< oaLibDefFile >:
- onParseWarnings now returns a Boolean that specifies whether to continue (True) or abort (False).
AppDef Observer Changes
The preModify and postModify methods on oaObserver< oaAppDef > now take the appDef as an argument. Also, the appDef observer no longer has onRead or onWrite methods.
Migrating from oaPcellDataObserver to IPcell
Two new classes, IPcell and oaPcellLink, replace oaPcellDataObserver. IPcell is an interface class that contains the application-specific function for pcell processing. oaPcellLink creates the link between OpenAccess and the IPcell provided by your application. The following listings are excerpts from the oaDesignInterfaces.h and IPcellLink.h header files followed by brief descriptions of the functions.
oaDesignInterfaces.h Excerpt
class OA_DESIGN_DLL_API IPcell ...
//Public Methods:
public:
virtual oaPcellDef *getPcellDef() = 0;
virtual void getName(oaString &name) = 0;
virtual void onBind(oaDesign *design, oaPcellDef *pcellDef) = 0;
virtual void onUnbind(oaDesign *design, oaPcellDef *pcellDef) = 0;
virtual void onEval(oaDesign *design, oaPcellDef *pcellDef) = 0;
virtual void onRead(oaDesign *design, oaMapFileWindow &mapWindow, oaUInt4 &loc, oaPcellDef *pcellDef) = 0;
virtual void onWrite(oaDesign *design, oaMapFileWindow &mapWindow, oaUInt4 &loc, oaPcellDef *pcellDef) = 0;
virtual oaUInt4 calcDiskSize(oaPcellDef *pcellDef) const = 0;
- getPcellDef() replaces the oaPcellDataObserver::pcellDefAlloc() function.
- getName() returns the name of the IPcell.
- onBind() is called instead of the oaPcellDataObserver::onPcellBind() function.
- onUnbind() replaces the oaPcellDataObserver::onPcellunbind() function.
- onEval() replaces the oaPcellDataObserver::onPcellEval() function.
- onRead() replaces the oaPcellDataObserver::onPcellRead() function.
- onWrite() replaces the oaPcellDataObserver::onPcellRead() function.
- calcDiskSize() replaces the oaPcellDataObserver::calcDiskSize() function.
oaPcellLink.h Excerpt
class OA_DESIGN_DLL_API oaPcellLink ...
//Public Methods:
public:
void destroy();
// Static Public Methods:
oaPcellLink *find(const oaString &name);
oaPcellLink *create(IPcell *pcellIn);
oaPcellDef *getPcellDef(const oaString &name);
- The destroy() function destroys the OpenAccess link to this pcell.
- The find() function tries to find the existing pcell links with the specified name. The plug-in manager is called to load the corresponding pcell plug-in and create the pcell, and a link to the pcell is created in OpenAccess. The IPcell that is found, or created through the plug-in, is returned. If the plug-in manager fails to load the pcell plug-in, ‘null’ is returned.
- The create() function creates a link in OpenAccess for the pcell provided by the application.
- The getPcellDef() function finds the link in OpenAccess for the pcell provided by the application and returns the oaPcellDef using the pcell object’s getPcellDef() function.
The find() function is intended for creating pcell links for IPcells that come in as a plug-in. The create() function is intended for creating in-memory IPcells.
class OA_DESIGN_DLL_API oaPcellDef ...
// Public Methods:
public:
oaPcellDef(IPcell *pcellIn);
virtual ~oaPcellDef();
- oaPcellDef() is the constructor of oaPcellDef, and it takes an IPcell pointer as the argument.
An application can provide an IPcell for OpenAccess by either creating one in memory or through a pcell plug-in. Information about how you create an IPcell plug-in will be provided in a subsequent release. To create a memory pcell, the application must perform the following steps:
- Derive the pcell processor from IPcell instead of deriving it from oaPcellDataObserver. The derived class returns the name through the getName() function.
- Change the derived class function name from pcellDefAlloc to getPcellDef.
- Change the following function names:
- from onPcellBind to onBind
- from onPcellUnbind to onUnbind
- from onPcellRe