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.
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."
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
; 1. Bring up schematic window.
; e.g. via Read from Library Browser.
; 2. type
; into the CIW.
; 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."))
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")
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
; locate the errors on the screen with "search" for the Property Name
; of "theLabel" == value "*word*"
; end of skill