OpenAccess Overview


OpenAccess provides an infrastructure designed to promote the interoperability of EDA applications and design data. The infrastructure is a C++ API that defines classes and member functions to create, access, and manage databases that describe designs as they evolve through the design process to implementation.

This document describes the following:

OpenAccess API Packages

The OpenAccess API is structured into a set of packages, each of which provide the implementation of part of the total functionality. Each package has one top level header file that a program must include to access the package classes and functions. Each package is distributed in the form of a shared library that contains the implementation of its functions. An application must link against the shared library to call those functions.

The debug versions of the shared libraries perform additional API argument checking that is not available in optimized libraries. OpenAccess will likely crash if incorrect arguments are used in API calls. The debug versions of the libraries perform additional checking for common errors such as incorrect argument values, which throw exceptions where optimized libraries crash. As an application developer, you must ensure that OpenAccess APIs are called with valid and consistent arguments to avoid application crashes when optimized libraries are used.

OpenAccess supports three kinds of databases: design, technology, and wafer. Each database has its own data model, which is the description of the objects that can reside in that database, their relationships with other objects, and their proper usage by EDA applications. The OpenAccess C++ API contains classes that represent these objects and member functions for traversing the relationships between them.

Each of the three kinds of databases has its own package in OpenAccess. There are three additional packages, for a total of six:

The six packages and the public API are shown below.

Design Database Package

The design database package is the oaDesign API. It manages designs and everything they contain. Designs refers to the design-specific representation of all the objects in a particular piece of a design, including the layouts, netlists, and schematics. A managed class is defined as having data that is persistently stored in an OpenAccess database. The managed classes in the design database package derive from the oaDesignObject class.

Design databases include connectivity, hierarchy, layout, floorplanning, place and route controls, and parasitics.

Technology Database Package

Technology databases hold data that is not specific to one part of the design, but can be generally applied across the all designs made from a given technology. These include descriptions of vias that can be used and the definitions of layers that are available. The technology database also contains the routing and foundry constraints that specify which design geometries can be manufactured.

Managed classes in this package are derived from the oaTechObject class.

Wafer Database Package

Wafer databases contain the layout of chips as they are processed for manufacturing. A wafer database holds both the layout of the reticles that are used to manufacture each layer and the plan for stepping the reticle images across the entire wafer.

Wafer databases are still in experimental usage and the data model is subject to change.

Managed classes in the Wafer database derive from the oaWaferObject class.

Design Management Package

The Design Management package organizes design libraries that contain all the data files needed to describe designs. This includes OpenAccess databases and all other files used by EDA applications to contain design data. This package provides a structure that has lib, cell, and view containers that are used to organize those data files.

OpenAccess lets you select between various design management systems when you create design libraries. These DM systems are implemented as plug-ins that can be found at run time.

The Design Management API in OpenAccess also provides functions to access version control capabilities such as the ability to update a library from versions checked into a remote repository. OpenAccess does not implement these functions, but a vendor can provide an implementation as a plug-in that gets automatically loaded at run time.

Managed classes in the DM package derive from oaDMObject.

Base Package

The Base Package provides objects that are used by more than one database and provides generic infrastructure capabilities. It handles such things as names, strings, and properties. Managed classes in the base package derive directly from oaObject.

Plug-In Package

OpenAccess allows certain functions of the API to be customized at run time through the use of plug-ins. Plug-ins let the end user choose the implementation for select capabilities using software that might not have been available when the application was linked.

The Plug-In package does not have an API that is used by typical applications. However, some functions in OpenAccess automatically locate and use plug-ins. This includes the Design Management API, the Version Control API, and programmable cell (Pcell) evaluation.

API Programming Examples

Code examples are available in your installation hierarchy under <install_dir>/examples/oa. Separate sub-directories contain source code and a header file for common programming tasks.

Compiling the Examples

The required GNU make utility for building the examples is GNU make version 3.80. It is recommended that you rename the make utility as gmake. This will prevent older, incompatible versions of make from being called.

To compile the examples in debug mode, do the following:

cd /examples/oa
gmake

To compile in optimized mode, use the OPTMODE argument:

gmake OPTMODE=opt

Running the Examples

Each example directory includes a log.ref file that contains the expected output. The <install_dir>/examples/oa/test/bin/runExamples script runs all the examples at once. You can use the following switch to suppress the output and report only whether each example passed or failed:

runExamples -q

By default, the examples are run in debug mode. To run them in optimized mode, set the following environment variable first:

setenv OA_MODE opt 

You can run the examples individually as well. For instance:

cd HelloWorld
./run -q

Optionally Choosing a DM System for Running the Examples

Before you run the programming examples, you can choose the DMSystem to use for design management. The default DMSystem for your OpenAccess installation is set in the file <installation_dir>/data/plugins/oaDMSystem.plg. You can choose a different DMSystem for the programming examples by setting the $DMSystem environment variable. The values for this environment variable are either oaDMFileSys or oaDMTurbo. This environment variable is used only for the programming examples; it is otherwise ignored by OpenAccess. See OpenAccess Libraries and Design Management for more information about DMSystem.

To better understand how to run the programming examples, refer to Getting Started—A HelloWorld Example. After working through HelloWorld, you are ready to look at the examples below.

Listing of Examples

Return to top of page

Return to Programmers Guide topics



Copyright © 2001-2010 Cadence Design Systems, Inc.
All rights reserved.