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
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.
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.
pre-dates standard Lisp, which came with ANSI Common Lisp in
1994. There were many "Lisp like" languages and dialects before the
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
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.
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.
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.
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.
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."
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.
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."