Setting up the Cadence Environment

Cadence Tool Versions

There are two basic versions of Cadence on the ECE machines:

  1. CDB-based (2004 and 2005).
  2. OpenAccess-based (2007).

The Solaris machines support the 2004 and 2007 versions. The Linux machines support the 2005 and 2007 versions.

Component Data Bank (CDB) database vs. OpenAccess (OA) database

The CDB database is not compatible with the OA database. In the future (by Spring 2008), it will be necessary to convert all CDB databases to OA, as support for the 2004 and 2005 versions of the Cadence tools is going away. Refer to the CDB -> OA Database Conversion section below for instructions on how to convert your libraries to the new OA database.

Setting up the Cadence Environment

There are four files which need to be setup in the directory where you start Cadence. If you haven't been told to use specific files by your T.A. or Professor you can get copies of the cdsinit and cdsenv from:

/usr/local/packages/ncsu-cdk-1-6-0-beta/cdssetup

Copy them as 'dotfiles' to your working directory. (e.g. cdsenv -> .cdsenv)

File Description
.cdsinit This file initializies the Cadence session.
.cdsenv This file defines the environmental variables used by the various tools inside of the Cadence including Layout, Schematic capture and the Library Manager. There are substantial differences between the various versions of this file for 2004/5/6 and 2007.
cds.lib

This file is used to specify where all of the libraries are located. In order to work seamlessly between the various versions of Cadence it is advisable to use environment variables to setup the directory paths. There are three variables which are setup by the module load command:

CDS_HOME=/usr/local/packages/cadence_200X
CDS_SITE=/usr/local/packages/cadence_200X/local
CDK_DIR=/usr/local/packages/cadence_200X/local

The format is specified in Appendix A: cds.lib

.cdsplotinit This file is used to setup the plotting environment. The format is specified in Appendix B: .cdsplotinit

Note

With the new Cadence it is necessary to avoid having multiple copies of the cds.lib, .cdsinit, and .cdsenv files. If you want to have multiple starting directories then you can use symbolic links in your home directory back to the setup files in the current working directory. It is generally advisable to start Cadence from your home directory.

Starting up the Cadence Tools

Due to the complexity of maintaining numerous Electronic Design Automation (EDA) tools in the ECE Department we are requiring that everyone use module commands. These commands set up the necessary environment variables so that the tools run properly. If you have never used the module load command, the first thing you need to do is execute the resetenv command. To start Cadence for the various versions, execute one of the following command sequences:

Version 2004 (on Solaris Machines):

cd <your cadence startup directory>
module load cadence/2004
icfb &

Version 2005 (on Linux Machines):

cd <your cadence startup directory>
module load cadence/2005
icfb &

Version 2007 (on Linux Machines and Solaris Machines):

cd <your cadence startup directory>
module load cadence
virtuoso &

Command Interface Window (CIW)

When you execute the above commands you will see the CIW window open up at the bottom of your screen:

/images/it/cadence/ciw.png

Open the Library Manager

To start up the Library Manager from the CIW window select Tools -> Library Manager:

/images/it/cadence/library_manager.png

Creating Design Libraries

Open the Library Manager to create a new Design Library. The sequence of pulldowns is File -> New -> Library...

/images/it/cadence/new_library.png

The "Create New Library" dialog box will pop up:

Name: 'Enter Design Library Name'
Path: 'Enter path to Library'

Enter the new library name and the path to the Library (leave blank if you want the library created in the startup directory).

A Technology File can be attached to the new Library at this time.

Note

The selection of Technology Files that can be attached may not be complete. The next section will show how to Attach a Technology File to a Design Library.

Attach a Technology File to a Design Library

A technology file is used to describe the various features of a particular process technology (primarily for layout). In order to access these features the technology file must be "Attached" to the Design Library. In the Command Interface Window (CIW), do the following sequence:

CIW  ->  Options ->  Technology File Manager ->  Attach

The "Attach Technology Library to Design Library" popup will come up:

  • Select Design Library name using pull down menu
  • Select Technology Library name using pull down menu

Setting up Bind Keys

There are three types of bindkeys (short cuts) that can be set up to eliminate using pull down menus: schematic generation, symbol generation, and layout generation. These bind keys should be loaded by the .cdsinit file. The format is:

load "leBindKeys.il"
load "schBindKeys.il"
printf(" Bindkeys loaded x.\n")

Examples of the two files are located in Appendix C: leBindKeys.il and Appendix D: schBindKeys.il.

Finding more Documentation for Cadence Tools

To open up the Cadence help documentation select the following options:

CIW -> Help -> Documentation

CDB -> OA Database Conversion

This process is non trivial. Make a backup copy (tar file) of your CDB library before starting this process.

Step 1: Create a cds_convert.lib file

This file is used by the conversion routine to find all of the reference libraries that are used by your CDB Design Library.

In your home directory create the a file named cds_convert.lib In this file put the following lines:

DEFINE basic                    /local/packages/cadence_2005/local/lib/basic
DEFINE US_8ths                  /local/packages/cadence_2005//ic/tools/dfII/etc/cdslib/sheets/US_8ths
DEFINE NCSU_Analog_Parts        /local/packages/cadence_2005/local/lib/NCSU_Analog_Parts
DEFINE NCSU_Digital_Parts       /local/packages/cadence_2005/local/lib/NCSU_Digital_Parts
DEFINE NCSU_TechLib_tsmc02      /local/packages/cadence_2005/local/lib/NCSU_TechLib_tsmc02
DEFINE NCSU_TechLib_tsmc03      /local/packages/cadence_2005/local/lib/NCSU_TechLib_tsmc03
DEFINE NCSU_TechLib_tsmc02d     /local/packages/cadence_2005/local/lib/NCSU_TechLib_tsmc02d
DEFINE NCSU_TechLib_tsmc03d     /local/packages/cadence_2005/local/lib/NCSU_TechLib_tsmc03d
DEFINE NCSU_TechLib_tsmc04_4M2P /local/packages/cadence_2005/local/lib/NCSU_TechLib_tsmc04_4M2P
DEFINE NCSU_TechLib_ami16       /local/packages/cadence_2005/local/lib/NCSU_TechLib_ami16
DEFINE NCSU_TechLib_ami06       /local/packages/cadence_2005/local/lib/NCSU_TechLib_ami06
DEFINE cdsDefTechLib            /usr/local/packages/cadence_2005/ic5141/tools/dfII/etc/cdsDefTechLib

To add you own libraries to your env add lines to the end of the file with this format:

DEFINE <CDB LIB NAME>           /path_to_your_lib_directory/<CDB LIB NAME>

Step 2: Create a directory to run the conversion

Execute the following unix commands:

mkdir oa_convert
cd oa_convert

Step 3: create a cds.lib in the oa_convert directory

In your oa_convert directory create the a file named cds.lib In this file put the following lines:

DEFINE basic                    $CDS_SITE/lib/basic
DEFINE US_8ths                  $CDS_HOME/ic/tools/dfII/etc/cdslib/sheets/US_8ths
DEFINE NCSU_Analog_Parts        $CDK_DIR/lib/NCSU_Analog_Parts
DEFINE NCSU_Digital_Parts       $CDK_DIR/lib/NCSU_Digital_Parts
DEFINE NCSU_TechLib_tsmc02      $CDK_DIR/lib/NCSU_TechLib_tsmc02
DEFINE NCSU_TechLib_tsmc03      $CDK_DIR/lib/NCSU_TechLib_tsmc03
DEFINE NCSU_TechLib_tsmc02d     $CDK_DIR/lib/NCSU_TechLib_tsmc02d
DEFINE NCSU_TechLib_tsmc03d     $CDK_DIR/lib/NCSU_TechLib_tsmc03d
DEFINE NCSU_TechLib_tsmc04_4M2P $CDK_DIR/lib/NCSU_TechLib_tsmc04_4M2P
DEFINE NCSU_TechLib_ami16       $CDK_DIR/lib/NCSU_TechLib_ami16
DEFINE NCSU_TechLib_ami06       $CDK_DIR/lib/NCSU_TechLib_ami06
DEFINE cdsDefTechLib            $CDS_HOME/ic/tools/dfII/etc/cdsDefTechLib

To add you own libraries to your env add lines to the end of the file with this format:

DEFINE <CDB LIB NAME>          ./<CDB LIB NAME>

Step 4: Run the conversion

Execute the following command:

module load cadence/2007
cdb2oa -cdslibpath ~/cds_convert.lib -lib <CDB_LIB_NAME>

This will create a Design Library of the same <CDB_LIB_NAME> in the oa_convert directory. In order to access this new Design Library, you will need to edit your cds.lib file in your home directory to point at the new library.

Appendix A: cds.lib

cds.lib file format:

# -------------------------------------------------------------------
# These library definitions provide the basic capabilities
# -------------------------------------------------------------------
DEFINE basic        $CDS_SITE/lib/basic
DEFINE US_8ths      $CDS_HOME/ic/tools/dfII/etc/cdslib/sheets/US_8ths
# -------------------------------------------------------------------
# These library definitions provide the NCSU capabilities
# -------------------------------------------------------------------
DEFINE   NCSU_Analog_Parts         $CDK_DIR/lib/NCSU_Analog_Parts
DEFINE   NCSU_Digital_Parts        $CDK_DIR/lib/NCSU_Digital_Parts
DEFINE   NCSU_TechLib_tsmc02       $CDK_DIR/lib/NCSU_TechLib_tsmc02
DEFINE   NCSU_TechLib_tsmc03       $CDK_DIR/lib/NCSU_TechLib_tsmc03
DEFINE   NCSU_TechLib_tsmc02d      $CDK_DIR/lib/NCSU_TechLib_tsmc02d
DEFINE   NCSU_TechLib_tsmc03d      $CDK_DIR/lib/NCSU_TechLib_tsmc03d
DEFINE   NCSU_TechLib_tsmc04_4M2P  $CDK_DIR/lib/NCSU_TechLib_tsmc04_4M2P
DEFINE   NCSU_TechLib_ami16        $CDK_DIR/lib/NCSU_TechLib_ami16
DEFINE   NCSU_TechLib_ami06        $CDK_DIR/lib/NCSU_TechLib_ami06
# -------------------------------------------------------------------
# These three library definitions are optional
# -------------------------------------------------------------------
DEFINE functional   $CDS_HOME/ic/tools/dfII/etc/cdslib/artist/functional
DEFINE sample       $CDS_HOME/ic/tools/dfII/samples/cdslib/sample
DEFINE analoglib    $CDS_HOME/ic/tools/dfII/etc/cdslib/artist/analogLib
# -------------------------------------------------------------------
# Put you library definitions here
# -------------------------------------------------------------------

Appendix B: .cdsplotinit

.cdsplotint file format:

############################################################################
# Cadence Design Systems                                Version 5.1.0
#
# cdsplotinit plotter models file.
#
# This file is the foundation plotter model data base for Cadence Design
# Systems plot software. This file is used to build site specific
# .cdsplotinit files.
#
# IMPORTANT****YOU MUST CREATE A SITE SPECIFIC VERSION OF THIS FILE AND
#            LOCATE IT IN EITHER <install_path>/tools/plot, your
#            working directory, or your home directory.
#
############################################################################
#
Encapsulated PostScript B Size |Encapsulated PostScript B Size: \
     :spool=lpr -Php11x17: \
     :query=lpstat -d hp8150-11x17: \
     :remove=lprm: \
     :manufacturer=Adobe: \
     :type=epsf: \
     :maximumPages#1: \
     :resolution#600: \
     :paperSize="B" 6402 10002 99 99:
HP Plotter|HP Plotter: \
     :manufacturer=Hewlett-Packard: \
     :type=hp7586roll: \
     :spool=lpr -Php755cm -o raw: \
     :query=lpstat -d hp755cm: \
     :remove=cancel $1 hp755cm: \
     :resolution#1016: \
     :maximumPages#11: \
     :white#0:black#1:red#2:yellow#4:green#3:cyan#6:blue#7:magenta#5: \
     :paperSize="34 inch" 0 35370 75 75: \
     :paperSize="36 inch" 35370 0 75 75:
Encapsulated PostScript A Size |Encapsulated PostScript A Size: \
     :spool=lpr -Php8150: \
     :query=lpstat -d hp8150: \
     :remove=lprm: \
     :manufacturer=Adobe: \
     :type=epsf: \
     :maximumPages#1: \
     :resolution#600: \
     :paperSize="A" 4810 6330:

Appendix C: leBindKeys.il

Layout Bind Keys:

;*******************************************************************************
; leBindKeys.il
;
;      This file contains the sample bindKeys that can be used with the layout
;      editor. The procedure 'leInitCommonBindKeys()' sets bindkeys that are
;      appropriate for all viewTypes.
;
;*******************************************************************************
;      $Author: udit $
;      $Revision: 1.4.2.1 $
;      $Date: 2004/09/13 06:03:58 $
;      $State: Exp $
;*******************************************************************************
;*******************************************************************************
; The following alias is used to make the bindKey definitions more readable.
;*******************************************************************************
alias bk hiSetBindKey
; Instead of doing any license checking, we insure that a base level
; le function is callable. If not, don't define the bindkeys.
;
when( isCallable('leGetEnv)
    ;***************************************************************************
    ; Standard Keys
    ;***************************************************************************
    bk("Layout" "<Key>a"             "geSingleSelectPoint()")
    bk("Layout" "Shift<Key>a"        "geSingleSelectBox()")
    bk("Layout" "Ctrl<Key>a"         "geSelectAllFig()")
    bk("Layout" "<Key>b"             "geReturnToLevel()")
    bk("Layout" "Shift<Key>b"        "geReturn()")
    bk("Layout" "<Key>c"             "leHiCopy()")
    bk("Layout" "Shift<Key>c"        "leHiChop()")
    bk("Layout" "<Key>d"             "geSubSelectPoint()")
    bk("Layout" "Shift<Key>d"        "geSubSelectBox()")
    bk("Layout" "Ctrl<Key>d"         "geDeselectAllFig()")
    bk("Layout" "<Key>e"             "leHiEditDisplayOptions()")
    bk("Layout" "Shift<Key>e"        "leHiEditEditorOptions()")
    bk("Layout" "Ctrl<Key>e"         "leToggleDrdMode()")
    bk("Layout"  "<Key>f"            "hiZoomAbsoluteScale(hiGetCurrentWindow() 0.9)")
    bk("Layout"  "Shift<Key>f"       "hiGetCurrentWindow()->stopLevel = dbGetMaxHierDepth()")
    bk("Layout"  "Ctrl<Key>f"        "hiGetCurrentWindow()->stopLevel = 0")
    bk("Layout"  "<Key>g"            "leToggleGravity()")
    bk("Layout"  "Ctrl<Key>g"        "geZoomToGrid(hiGetCurrentWindow())")
    bk("Layout"  "Shift<Key>g"       "leHiCreateGuardRing()")
    bk("Layout"  "<Key>i"            "leHiCreateInst()")
    bk("Layout"  "<Key>k"            "leHiCreateRuler()")
    bk("Layout"  "Shift<Key>k"       "leHiClearRuler()")
    bk("Layout" "<Key>l"             "leHiCreateLabel()")
    bk("Layout" "<Key>m"             "leHiMove()")
    bk("Layout" "Shift<Key>m"        "leHiMerge()")
    bk("Layout" "<Key>n"             "leSetFormSnapMode(\"diagonal\")")
    bk("Layout" "Shift<Key>n"        "leSetFormSnapMode(\"orthogonal\")")
    bk("Layout" "Ctrl<Key>n"         "leSetFormSnapMode(\"L90XFirst\")")
    bk("Layout" "<Key>o"             "leHiCreateContact()")
    bk("Layout"  "<Key>p"            "leHiCreatePath()")
    bk("Layout"  "Shift<Key>p"       "leHiCreatePolygon()")
    bk("Layout"  "Ctrl<Key>p"        "leHiCreateChoiceOfPin()")
    bk("Layout"  "<Key>q"            "leHiEditProp()")
    bk("Layout"  "Shift<Key>q"       "leEditDesignProperties()")
    bk("Layout"  "<Key>r"            "leHiCreateRect()")
    bk("Layout"  "Ctrl Shift<Key>r"  "leHiCreateRoute()")
    bk("Layout"  "Shift<Key>r"       "leHiReShape()")
    bk("Layout"  "Ctrl<Key>r"        "hiRedraw()")
    bk("Layout"  "Shift<Key>o"       "leHiRotate()")
    bk("Layout"  "<Key>s"            "leHiStretch()")
    bk("Layout"  "Shift<Key>s"       "leHiSearch()")
    bk("Layout"  "Ctrl<Key>s"        "leHiSplit()")
    bk("Layout"  "<Key>t"            "leHiLayerTap()")
    bk("Layout"  "Shift<Key>t"       "leHiTree()")
    bk("Layout"  "<Key>u"            "hiUndo()")
    bk("Layout"  "Shift<Key>u"       "hiRedo()")
    bk("Layout"  "<Key>v"            "leHiAttach()")
    bk("Layout"  "Shift<Key>v"       "hiOpenWorldView(hiGetCurrentWindow())")
    bk("Layout"  "Ctrl<Key>v"        "hiFocusToCIW(hiGetCurrentWindow())")
    bk("Layout" "<Key>w"             "hiPrevWinView(hiGetCurrentWindow())")
    bk("Layout" "Shift<Key>w"        "hiNextWinView(hiGetCurrentWindow())")
    bk("Layout" "Ctrl<Key>w"         "leCloseWindow()")
    bk("Layout" "<Key>x"             "leHiEditInPlace()")
    bk("Layout" "Shift<Key>x"        "leHiDescend()")
    bk("Layout" "Ctrl<Key>x"         "leEIPZoomAbsoluteScale(hiGetCurrentWindow() 0.9)")
    bk("Layout"  "<Key>y"            "leHiYank()")
    bk("Layout"  "Shift<Key>y"       "leHiPaste()")
    bk("Layout"  "Ctrl<Key>y"        "geCycleSelectNext()")
    bk("Layout"  "Shift<Key>F5"      "leFullSelectFigOfSelSet()")
    bk("Layout"  "<Key>z"            "hiZoomIn()")
    bk("Layout"  "Shift<Key>z"       "hiZoomRelativeScale(hiGetCurrentWindow() 0.5)")
    bk("Layout" "Ctrl<Key>z"         "hiZoomRelativeScale(hiGetCurrentWindow() 2.0)")
    bk("Layout"  "Ctrl<Key>t"        "leZoomToSelSet()")
    ;***************************************************************************
    ; Special Keys
    ;***************************************************************************
    bk("Layout" "<Key>Escape EF"     "cancelEnterFun()")
    bk("Layout" "<Key>Delete EF"     "leHiDelete()" )
    bk("Layout" "<Key>Delete"        "leHiDelete()")
    bk("Layout" "<Key>Tab"           "hiPan()")
    bk("Layout" "<Key>F2"            "geSave()")
    bk("Layout" "<Key>F5"            "deOpen()")
    bk("Layout" "<Key>F6"            "leToggleMaintainConnections()")
    bk("Layout" "<Key>F9"            "geToggleFilterSize()")
    ;***************************************************************************
    ; Numeric Key Pad (Window Panning Functions)
    ;***************************************************************************
    legRpDelta = 0.5
    bk("Layout" "<Key>R7"            "geScroll(nil \"nw\"     nil)")
    bk("Layout" "<Key>Up"            "geScroll(nil \"n\"     nil)")
    bk("Layout" "<Key>R9"            "geScroll(nil \"ne\"    nil)")
    bk("Layout" "<Key>Left"          "geScroll(nil \"w\"      nil)")
    bk("Layout" "<Key>R11"           "geScroll(nil \"\"     nil)")
    bk("Layout" "<Key>Right"         "geScroll(nil \"e\"     nil)")
    bk("Layout" "<Key>R13"           "geScroll(nil \"sw\"     nil)")
    bk("Layout" "<Key>Down"          "geScroll(nil \"s\"    nil)")
    bk("Layout" "<Key>R15"           "geScroll(nil \"se\"    nil)")
    bk("Layout" "<Key>KP_Enter"      "mouseAddPt()")
    bk("Layout" "<Key>KP_Add"        "leHiSetRefPoint()")
    bk("Layout" "<Key>KP_Subtract"   "leSetRefPointInactive(geGetEditCellView())")
    bk("Layout" "<Key>KP_Equal"      "legRpDelta = 0.5")
    bk("Layout" "<Key>KP_Divide"     "legRpDelta = 1.0")
    bk("Layout" "<Key>KP_Multiply"   "legRpDelta = 2.0")
    bk("Layout" "<Key>R4"            "legRpDelta = 0.5")
    bk("Layout" "<Key>R5"            "legRpDelta = 1.0")
    bk("Layout" "<Key>R6"            "legRpDelta = 2.0")
    bk("Layout" "Shift<Key>R7"       "leMoveCursor(-legRpDelta legRpDelta)")
    bk("Layout" "Shift<Key>Up"       "leMoveCursor(           0 legRpDelta)")
    bk("Layout" "Shift<Key>R9"       "leMoveCursor( legRpDelta legRpDelta)")
    bk("Layout" "Shift<Key>Left"     "leMoveCursor(-legRpDelta              0)")
    bk("Layout" "Shift<Key>R11"      "leMoveCursorToRefPoint()")
    bk("Layout" "Shift<Key>Right"    "leMoveCursor( legRpDelta            0)")
    bk("Layout" "Shift<Key>R13"      "leMoveCursor(-legRpDelta -legRpDelta)")
    bk("Layout" "Shift<Key>Down"     "leMoveCursor(0            -legRpDelta)")
    bk("Layout" "Shift<Key>R15"      "leMoveCursor( legRpDelta -legRpDelta)")
    bk("Layout" "Ctrl<Key>R7"        "geScroll(nil \"nw\" t)")
    bk("Layout" "Ctrl<Key>Up"        "geScroll(nil \"n\"     t)")
    bk("Layout" "Ctrl<Key>R9"        "geScroll(nil \"ne\" t)")
    bk("Layout" "Ctrl<Key>Left"      "geScroll(nil \"w\"     t)")
    bk("Layout" "Ctrl<Key>R11"       "geScroll(nil \"\"     t)")
    bk("Layout" "Ctrl<Key>Right"     "geScroll(nil \"e\"    t)")
    bk("Layout" "Ctrl<Key>R13"       "geScroll(nil \"sw\" t)")
    bk("Layout" "Ctrl<Key>Down"      "geScroll(nil \"s\"    t)")
    bk("Layout" "Ctrl<Key>R15"       "geScroll(nil \"se\" t)")
    bk("Layout" "<Key>space EF"      "leSpaceBarFunc(hiGetCurrentWindow() t)")
    bk("Layout" "Shift<Key>space EF" "leSpaceBarFunc(hiGetCurrentWindow() t t)")
)
unalias bk

Appendix D: schBindKeys.il

Schematic/Symbol Bind Keys:

;******************************************************************************
; schBindKeys.il - Copyright (C) 1997-2003 Cadence Design Systems, Inc.
;                  All Rights Reserved.
;
; This file contains example bind keys for use in Composer as follows:
;    Schematic editor - prefix "Schematics"
;    Symbol editor - prefix "Symbol"
;    Read HDL          - prefix "Read HDL" (only if SKILL context loaded)
;
; $Revision: 1.1 $
; $Date: 2003/10/06 10:56:11 $
;******************************************************************************
; The following alias is used in this file to make the bindkey definitions
; more readable. It is unaliased at the end of the file.
;
alias bk hiSetBindKey
; Instead of doing license checking, we check that a base level
; sch function is callable. If not, don't define the bindkeys.
;
when( isCallable('schGetEnv)
    ; General bindkeys (prefix "Schematics"). These bindkeys call
    ; graphics editor ("ge") and human interface ("hi") functionality.
    ;
    bk("Schematics" "<Key>F6"        "hiRedraw()")
    bk("Schematics" "<Key>Down"      "geScroll(nil \"s\" nil)")
    bk("Schematics" "<Key>Up"        "geScroll(nil \"n\" nil)")
    bk("Schematics" "<Key>Right"     "geScroll(nil \"e\" nil)")
    bk("Schematics" "<Key>Left"      "geScroll(nil \"w\" nil)")
    bk("Schematics" "<Key>a"         "geSingleSelectPoint()")
    bk("Schematics" "Ctrl<Key>a"     "schSelectAllFig()")
    bk("Schematics" "Shift<Key>a"    "schSingleSelectBox()")
    bk("Schematics" "<Key>d"         "geSubSelectPoint()")
    bk("Schematics" "Ctrl<Key>d"     "schDeselectAllFig()")
    bk("Schematics" "Shift<Key>d"    "schSubSelectBox()")
    bk("Schematics" "<Key>f"         "schZoomFit(1.0 0.9)")
    bk("Schematics" "Ctrl<Key>f"     "schSetSelectOptions()")
    bk("Schematics" "Shift<Key>f"    "hiZoomAbsoluteScale(getCurrentWindow() 0.9)")
    bk("Schematics" "<Key>o"         "schHiDisplayOptions()")
    bk("Schematics" "Shift<Key>o"    "schHiEditorOptions()")
    bk("Schematics" "<Key>q"         "schHiObjectProperty()")
    bk("Schematics" "<Key>q EF"      "schHiObjectProperty()")
    bk("Schematics" "Shift<Key>q"    "schHiCellViewProperty()")
    bk("Schematics" "Shift<Key>q EF" "schHiCellViewProperty()")
    bk("Schematics" "<Key>u"         "hiUndo()")
    bk("Schematics" "Shift<Key>u"    "hiRedo()")
    bk("Schematics" "<Key>v"         "hiVectorPan()")
    bk("Schematics" "Shift<Key>v"    "hiOpenWorldView(hiGetCurrentWindow())")
    bk("Schematics" "Ctrl<Key>v"     "hiFocusToCIW(hiGetCurrentWindow())")
    bk("Schematics" "<Key>z"         "hiZoomIn()")
    bk("Schematics" "Ctrl<Key>z"     "hiZoomOut()")
    bk("Schematics" "Shift<Key>z"    "hiPrevWinView(hiGetCurrentWindow())")
    bk("Schematics" "<Key>["         "hiZoomRelativeScale(getCurrentWindow() 0.8)")
    bk("Schematics" "<Key>]"         "hiZoomRelativeScale(getCurrentWindow() 1.25)")
    bk("Schematics" "Shift<Key>s"    "schHiSaveCellView()")
    bk("Schematics" "Ctrl<Key>s"     "geSaveAs()")
    bk("Schematics" "<Key>9"         "geAddNetProbe()")
    bk("Schematics" "Shift<Key>g"    "schHiFindMarker()")
    bk("Schematics" "Ctrl<Key>g"     "geHiDeleteMarker()")
    bk("Schematics" "<Key>g"         "schHiFindMarker()")
    ; Specific bindkeys (prefix "Schematics"). These bindkeys are bound to
    ; schematic editor ("Schematics") functionality.
    ;
    bk("Schematics" "None<Btn1Down>"       "schSingleSelectPt()")
    bk("Schematics" "Shift<Btn1Down>"      "schAddSelectPt()")
    bk("Schematics" "<DrawThru1>"          "schDirectEdit(1)")
    bk("Schematics" "Shift<DrawThru1>"     "schDirectEdit(2)")
    bk("Schematics" "Ctrl<DrawThru1>"      "schDirectEdit(3)")
    bk("Schematics" "None<Btn1Down>(2)"    "schExtendSelectPt()")
    bk("Schematics" "None<Btn1Down>(2) EF" "schMouseApplyOrFinish()")
    bk("Schematics" "None<Btn2Down>"       "schHiMousePopUp()")
    bk("Schematics" "None<Btn2Down> EF"    "schHiMousePopUp()")
    bk("Schematics" "None<Btn3Down> EF"    "schCmdOption()")
    bk("Schematics" "Shift<Btn3Down> EF"   "schShiftCmdOption()")
    bk("Schematics" "<Key>Delete"          "schHiDelete()")
    ; Uncomment following line for HP 700 delete key binding.
    ; bk("Schematics" "Shift<Key>Escape"   "schHiDelete()")
    bk("Schematics" "<Key>b"               "schHiCreateBlockInst()")
    bk("Schematics" "<Key>c"               "schHiCopy()")
    bk("Schematics" "<Key>i"               "schHiCreateInst()")
    bk("Schematics" "<Key>h"               "schHiHiliteLabel(\"wire\" \"on\")")
    bk("Schematics" "Shift<Key>h"          "schHiHiliteLabel(\"wire\" \"off\")")
    bk("Schematics" "<Key>8"               "schHiHiliteLabel(\"instance\" \"on\")")
    bk("Schematics" "Shift<Key>8"          "schHiHiliteLabel(\"instance\" \"off\")")
    bk("Schematics" "<Key>l"               "schHiCreateWireLabel()")
    bk("Schematics" "Shift<Key>n"          "schHiCreateNoteLabel()")
    bk("Schematics" "Shift<Key>l"          "schHiCreateNoteLabel()")
    bk("Schematics" "<Key>m"               "schHiStretch()")
    bk("Schematics" "Shift<Key>m"          "schHiMove()")
    bk("Schematics" "<Key>p"               "schHiCreatePin()")
    bk("Schematics" "<Key>5"               "schHiRouteFlightLine()")
    bk("Schematics" "<Key>r"               "schHiRotate(t)")
    bk("Schematics" "Ctrl<Key>r EF"        "schSetEnv(\"upsideDown\" t)")
    bk("Schematics" "Shift<Key>r EF"       "schSetEnv(\"sideways\" t)")
    bk("Schematics" "<Key>r EF"            "schSetEnv(\"rotate\" t)")
    bk("Schematics" "<Key>w"               "schHiCreateWire(0.0)")
    bk("Schematics" "Shift<Key>w"          "schHiCreateWire(schGetEnv(\"defWideWireWidth\"))")
    bk("Schematics" "<Key>x"               "schHiCheck(\"run\")")
    bk("Schematics" "Shift<Key>x"          "schHiCheckAndSave()")
    bk("Schematics" "Shift<Key>e"          "schHiDescendEdit()")
    bk("Schematics" "<Key>e"               "schHiDescendRead()")
    bk("Schematics" "Ctrl<Key>e"           "schHiReturn()")
    bk("Schematics" "<Key>n"               "schHiCreateNoteShape()")
    bk("Schematics" "<Key>s EF"            "schSnapToConn()")
       ; note: if you change the key binding for schSnapToConn()
       ;       you can also change the Add>>Wire command
       ;       prompts by setting the global skill variable
       ;       schgWirePromptToAppend =
       ;       " or snap to diamond using {your bind key}."
       ;       in your .cdsinit file.
    ; for new sun keyboard(sparc 5)
    bk("Schematics" "<Key>BackSpace"       "schHiDelete()")
    ; General bindkeys (prefix "Symbol"). These bindkeys are bound to
    ; graphics editor ("ge") and human interface ("hi") functionality.
    ;
    bk("Symbol" "<Key>F6"                  "hiRedraw()")
    bk("Symbol" "<Key>Down"                "geScroll(nil \"s\" nil)")
    bk("Symbol" "<Key>Up"                  "geScroll(nil \"n\" nil)")
    bk("Symbol" "<Key>Right"               "geScroll(nil \"e\" nil)")
    bk("Symbol" "<Key>Left"                "geScroll(nil \"w\" nil)")
    bk("Symbol" "<Key>a"                   "geSingleSelectPoint()")
    bk("Symbol" "Ctrl<Key>a"               "schSelectAllFig()")
    bk("Symbol" "Shift<Key>a"              "schSingleSelectBox()")
    bk("Symbol" "<Key>d"                   "geSubSelectPoint()")
    bk("Symbol" "Ctrl<Key>d"               "schDeselectAllFig()")
    bk("Symbol" "Shift<Key>d"              "schSubSelectBox()")
    bk("Symbol" "<Key>f"                   "schZoomFit(1.0 0.9)")
    bk("Symbol" "Ctrl<Key>f"               "schSetSelectOptions()")
    bk("Symbol" "Shift<Key>f"              "hiZoomAbsoluteScale(getCurrentWindow() 0.9)")
    bk("Symbol" "<Key>o"                   "schHiDisplayOptions()")
    bk("Symbol" "Shift<Key>o"              "schHiEditorOptions()")
    bk("Symbol" "<Key>q"                   "schHiObjectProperty()")
    bk("Symbol" "<Key>q EF"                "schHiObjectProperty()")
    bk("Symbol" "Shift<Key>q"              "schHiCellViewProperty()")
    bk("Symbol" "Shift<Key>q EF"           "schHiCellViewProperty()")
    bk("Symbol" "<Key>u"                   "hiUndo()")
    bk("Symbol" "Shift<Key>u"              "hiRedo()")
    bk("Symbol" "<Key>v"                   "hiVectorPan()")
    bk("Symbol" "Shift<Key>v"              "hiOpenWorldView(hiGetCurrentWindow())")
    bk("Symbol" "Ctrl<Key>v"               "hiFocusToCIW(hiGetCurrentWindow())")
    bk("Symbol" "<Key>z"                   "hiZoomIn()")
    bk("Symbol" "Ctrl<Key>z"               "hiZoomOut()")
    bk("Symbol" "Shift<Key>z"              "hiPrevWinView(hiGetCurrentWindow())")
    bk("Symbol" "<Key>["                   "hiZoomRelativeScale(getCurrentWindow() 0.8)")
    bk("Symbol" "<Key>]"                   "hiZoomRelativeScale(getCurrentWindow() 1.25)")
    bk("Symbol" "Shift<Key>s"              "schHiSaveCellView()")
    bk("Symbol" "Ctrl<Key>s"               "geSaveAs()")
    bk("Symbol" "<Key>9"                   "geAddNetProbe()")
    bk("Symbol" "Shift<Key>g"              "schHiFindMarker()")
    bk("Symbol" "Ctrl<Key>g"               "geHiDeleteMarker()")
    bk("Symbol" "<Key>g"                   "schHiFindMarker()")
    ; Specific bindkeys (prefix "Symbol"). These bindkeys are bound to
    ; schematic editor ("Schematics") functionality.
    ;
    bk("Symbol" "<DrawThru1>"              "schDirectEdit(1)")
    bk("Symbol" "Shift<DrawThru1>"         "schDirectEdit(2)")
    bk("Symbol" "Ctrl<DrawThru1>"          "schDirectEdit(3)")
    bk("Symbol" "None<Btn1Down>(2) EF"     "schMouseApplyOrFinish()")
    bk("Symbol" "None<Btn2Down>"           "schHiMousePopUp()")
    bk("Symbol" "None<Btn2Down> EF"        "schHiMousePopUp()")
    bk("Symbol" "None<Btn3Down>EF"         "schCmdOption()")
    bk("Symbol" "Shift<Btn3Down> EF"       "schShiftCmdOption()")
    bk("Symbol" "Ctrl<Key>r EF"            "schSetEnv(\"upsideDown\" t)")
    bk("Symbol" "Shift<Key>r EF"           "schSetEnv(\"sideways\" t)")
    bk("Symbol" "<Key>r EF"                "schSetEnv(\"rotate\" t)")
    bk("Symbol" "<Key>r"                   "schHiRotate(t)")
    bk("Symbol" "<Key>Delete"              "schHiDelete()")
    ; Uncomment following line for HP 700 delete key binding.
    ; bk("Symbol" "Shift<Key>Escape"         "schHiDelete()")
    bk("Symbol" "<Key>c"                   "schHiCopy()")
    bk("Symbol" "<Key>l"                   "schHiCreateSymbolLabel()")
    bk("Symbol" "Shift<Key>n"              "schHiCreateNoteLabel()")
    bk("Symbol" "Shift<Key>l"              "schHiCreateNoteLabel()")
    bk("Symbol" "Shift<Key>m"              "schHiMove()")
    bk("Symbol" "<Key>m"                   "schHiSymStretch()")
    bk("Symbol" "<Key>n"                   "schHiCreateNoteShape()")
    bk("Symbol" "<Key>p"                   "schHiCreateSymbolPin()")
    bk("Symbol" "Ctrl<Key>e"               "schHiReturn()")
    bk("Symbol" "<Key>x"                   "schHiVIC()")
    ; for new sun keyboard(sparc 5)
    bk("Symbol" "<Key>BackSpace"           "schHiDelete()")
    when( isCallable('schHDLReturn)
       ; General bindkeys (prefix "Read HDL").
       ;
       bk("Read HDL" "Ctrl<Key>s"          "hiSaveAsViewfile()")
       bk("Read HDL" "Ctrl<Key>e"          "schHDLReturn()")
    )
)
unalias bk