Home > Community > Blogs > Industry Insights > ten things you probably didn t know about skill
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more conveniennt.

Register | Membership benefits
Get email delivery of the Industry Insights blog (individual posts).


* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

Ten Things You (Probably) Didn’t Know About SKILL

Comments(1)Filed under: Industry Insights, Virtuoso, Analog, Allegro, PDK, SKILL, PCells, Lisp, PDKs, custom

The Cadence SKILL language has received some press lately as part of an ongoing debate over process design kit (PDK) standards. This post isn't about that. Rather, it's about the story behind SKILL, a venerable language that's far more than just a format for describing PCells in custom IC design.

Following are some interesting things I learned from a recent conversation with Jim Newton, senior services manager at Cadence and a SKILL programmer and passionate advocate.

  1. SKILL pre-dates Cadence. It was originally developed by SDA Systems, which merged with ECAD to form Cadence in 1988. SKILL is a dialect of Lisp and was based on Franz Lisp, written at U.C. Berkeley in the 1970s.
  1. SKILL pre-dates standard Lisp, which came with ANSI Common Lisp in 1994. There were many "Lisp like" languages and dialects before the standardization.
  1. Lisp is popularly associated with artificial intelligence because it was invented by AI researchers at MIT in 1958. It grew to serve many other applications, and today, it is the second-oldest high-level programming language in widespread use (Fortran is the oldest).
  1. When Jim first came across SKILL in 1988, as a newly-hired engineer at Cypress Semiconductor, SKILL was presented as a unifying language for Cadence tools. "As a small design center without a lot of resources we saw this as extremely useful, because we could customize Cadence tools to do exactly what we wanted," he said.
  1. SKILL is not only for analog/custom design. It is also used in the Cadence Allegro PCB and system-in-package (SiP) product lines. Users employ the language to add menu items, create interfaces, write scripts, and develop custom constraints, among other uses.
  1. In analog/custom design, SKILL is used to create and modify PCells, but it can do much more than that. It can also be used to extend and customize the tools, implement proprietary algorithms, and integrate in-house and third-party tools. You could, for example, write a SKILL program to look for corresponding pairs of devices that are topologically connected but different in size, or a program that checks for a path to ground for every source or drain in the schematic.
  1. SKILL has object-oriented capabilities through SKILL++, and supports polymorphism in a traditional object-oriented sense. It also allows applications to extend the concept of polymorphism in domain-specific ways. In order to better express attributes of PCells, Jim extended SKILL++ so that a function can exhibit different behavior depending on the database type and PCell-specific types of objects that are passed to it.
  1. SKILL, however, does not require object-oriented programming. "Java forces the programmer to treat every problem as object-oriented, but SKILL is a multi-paradigm language," Jim said. "If an algorithm is more easily expressed in a declarative or functional style, you can do that."
  1. SKILL allows the programmer to modify the language itself so as to express a problem in the simplest and most elegant way. "Languages like Python do not have this capability," Jim said.
  1. Despite its flexibility, SKILL is fairly easy to learn and use. "People who don't know much about programming at all can still get huge benefit out of SKILL," Jim said. "It lets you be very sloppy if that's what you want to do. It's forgiving of the things a beginner might do."

From the Cadence point of view, SKILL is not just a non-differentiating "format" for describing PCells. It is part of the added value that Cadence provides with its Virtuoso, Allegro, and SiP tools. It's also a rich programming language with a 20-plus-year history, a tremendous amount of legacy code, thousands of users, and a lot of interesting features. As Jim said, SKILL is a "fully capable programming language that lets you develop anything you have the patience, inclination or budget to develop."

Richard Goering



By Dave Gee on August 10, 2010
Skill has many uses.

As a mild dyslexic I wanted a spell checked to the check the documenting text that I added to my schematics.

This ran on 1995 vintage Sun Unix and HP-UX. Even 15 years later I still like it for it's simplicity at solving a user's problem.

It used the old unix  "spell -b" command to check the text against a UK English dictionary, (via writing to a file in /tmp to send to "spell -b"). Unknown words get listed back to the CIW.


; Schematic notes "spell checker".

; ________________________________


; For those of us who add copious notes to our

; schematics, but are also prone to making typing

; errors or spelling mistakes.


; It lists all notes in current schematic to a

; file and runs the unix spelling checker on them,

; output of spell is returned to the CIW.


; Written by: Dave Gee 2/June/95

;             for Sun OS

; Modified by: Dave Gee 29/November/95

;             for HP-UX

; Now runs under HP unix where fmt is not supported.


; Filename:   spell.skill

; Method:

;  1. Bring up schematic window.

;      e.g. via Read from Library Browser.

;  2. type

;      load("thisfile")

;     into the CIW.


; Limitation:

;     Looks for the "current window" so to avoid

;     confusion with multiple schematic windows open

;     execute a "Window Fit" or similar command in

;     the window you are interested in prior to

;     running script.




  return(error("Cannot open output file %s" outFile))

  ) ; unless


  return(error("Cannot open cell in current window\nClick on schematic window and try again."))

  ) ; unless

shapes = cellViewId~>shapes

while(car(shapes) != nil

  when(((car(shapes)~>objType == "label") &&

        (car(shapes)~>layerName == "text"))

fprintf(notePort "%s\n" car(shapes)~>theLabel)

  ) ; when


) ; while


; with the commented out lines below

; the output goes to the unix window from which you started up dfII.

; csh("echo 'spell -b /tmp/schematicnotes.txt'")

; csh("spell -b /tmp/schematicnotes.txt")

; csh("echo ''")

; reading the results into the CIW at 80 characters per line.


; hp unix does not support fmt so fmt now done in skill

;csh("spell -b /tmp/schematicnotes.txt | fmt -80 -c > /tmp/spelling.errors")

csh("spell -b /tmp/schematicnotes.txt > /tmp/spelling.errors")


when( inPort


  while( gets( nextLine inPort)

; remove all carriage returns from input strings


    lastC=substring(nextLine len len)

    if(lastC == "\n" then

      nextLine=substring(nextLine 1 (len-1))


; decide if time to wrap output


    if((i > 80) then

      printf("\n ")



      printf(" ")


    printf("%s" nextLine)





; locate the errors on the screen with "search" for the Property Name

; of "theLabel" == value "*word*"


; end of skill


Leave a Comment

E-mail (will not be published)
 I have read and agree to the Terms of use and Community Guidelines.
Community Guidelines
The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.