====== SKILL programming references ====== [ __[[vlsi:workbook2|Back]]__ ] [ __[[vlsi:workbook2:skill:useful|Useful SKILL routines]]__ ] [ __[[vlsi:private:workbook2:skill|SKILL code repo (protected)]]__ ] [ __[[http://community.cadence.com/cadence_technology_forums/f/48|Custom IC SKILL forum]]__ ] \\ Incredibile ma vero... esiste un textbook !!! \\ //The CAD Connection// by Q. Nguyen (stesso autore di //CAD scripting languages//) Official training (where? :-( ) * //Cadence SKILL Language Programming Lecture Manual// * //Cadence SKILL Language Programming Lab Manual// * //Cadence SKILL Quick Reference (SQR)// SKILL = Cadence extension **scripting language** for Cadence tools which allows to add new capabilities and features to Cadence tools (e.g. add **custom menus** to Cadence CIW). basic syntax (LISP-derived) + large number of **built-in routines** and **functions** CDB = Cadence Database OA = Open Access Appetizer... e che appetizer !!! \\ [[http://www.fhnw.ch/technik/ime/cdnlive2010_poster.pdf]] Random: \\ [[https://vlsiwiki.soe.ucsc.edu/index.php/Useful_SKILL]] \\ [[http://atchoo.org/tools/cadence/]] \\ [[http://vlsi.ee.ccu.edu.tw/data/course/DIP/DIP_2004spring/Handouts/crcell.il]] \\ [[http://venividiwiki.ee.virginia.edu/mediawiki/images/f/ff/Ece432Schematic.il]] \\ [[http://www.eng.umd.edu/~dilli/research/layout/MITLL_3D_2006/3D_PDK2.3/ncsu_3d/skill/d3ic/d3Extract.il]] \\ [[https://svn.unity.ncsu.edu/osi/freepdk45/branches/ncsu/ncsu_basekit/skill]] Nice code repo: \\ [[https://github.com/tofguerrier/cadence-skill]] \\ [[https://github.com/decrement/dotfiles/tree/master/cds/skill]] \\ [[http://www.sfu.ca/adm/skill/]] Intro tu ROD layout objects: \\ [[http://ecad.tu-sofia.bg/edit/docs/hristov/Ex9.doc]] ====== Online resources and tutorials ======= [[http://en.wikipedia.org/wiki/Cadence_SKILL]] Basic OA access functions: \\ [[http://www.engr.uky.edu/~elias/lectures/00_SKILL_Programming.pdf]] Example of creating Schematic and Layout for an N-bit inverter chain using SKILL: \\ [[http://venividiwiki.ee.virginia.edu/mediawiki/index.php/ToolsCadenceTutorialsBasicSKILLFreePDK]] [[http://www.ece.msstate.edu/~reese/EE8273/lectures/cadence_skil/]] A short introduction to SKILL: \\ [[http://www.vtvt.ece.vt.edu/vlsidesign/tutorialCadence_skill.php]] \\ [[http://www.groupes.polymtl.ca/gbm8320/CADENCE_Manual.pdf]] (pp. 49-50) Some SKILL examples by Iowa State University: \\ A Quick Tour of SKILL Programming from Cadence (10 pages): \\ [[http://www.cadence.com/Community/CSSharedFiles/forums/storage/28/10475/CadScriptingLanguages_skill.pdf]] Another basic document (3 pages): \\ [[http://www.vtvt.ece.vt.edu/vlsidesign/skill.pdf]] Two very good pdf documents from Heidelberg University (30 + 7 slides): \\ [[http://sus.ziti.uni-heidelberg.de/Lehre/VLSIVorlesung1213/VLSI_Fischer_07_Skill.pdf]] \\ [[http://sus.ziti.uni-heidelberg.de/Lehre/VLSIVorlesung1213/VLSI_Fischer_Exercise_06_Skill.pdf]] [[http://www.skillcad.com/]] Example SKILL functions for generating PAD frame or matrix of instances (by prof. R. Reese, Texas A&M University) \\ [[http://www.ece.msstate.edu/~reese/EE8273/lectures/cadence_skil/]] \\ [[http://www.ece.msstate.edu/~reese/EE8273/lectures/cadence_skil/cadence_skil.pdf]] \\ [[http://www.ece.msstate.edu/~reese/EE8273/lectures/cadence_skil/pads.il]] \\ [[http://www.ece.msstate.edu/~reese/EE8273/lectures/cadence_skil/parray.il]] A very complete repository! (Esempi realistici! Ottimo!) \\ [[http://www.ece.umd.edu/~dilli/research/layout/MITLL_3D_2006/3D_PDK2.3/ncsu_3d/skill/]] A nice set of SKILL tutorials for Allegro PCB editor: \\ [[http://www.referencedesigner.com/tutorials/allegro/allegro_skill_71.php]] ====== Reference documentation ====== All ''*sk*.pdf'' files contained in ''$IC_DIR/doc/*sk*/'' directories are related to Cadence SKILL language! cd ~/scratch/skill mkdir doc && cd doc find /usr/cadence/IC_6.1.5/doc/ -name '*sk*.pdf' -exec ln -s {} . \; * ''skartistref.pdf'' * ''skcompref.pdf'' * ''skdevref.pdf'' * ''skdfref.pdf'' -> //Virtuoso Design Environment SKILL Reference// * ''skhelp.pdf'' * ''skillide.pdf'' -> //Cadence SKILL IDE User Guide// * ''skipcref.pdf'' * ''sklangref.pdf'' -> //Cadence SKILL Language Reference// * ''sklanguser.pdf'' * ''sklayoutref.pdf'' * ''skoopref.pdf'' * ''skpcellref.pdf'' * ''sktechfile.pdf'' * ''skuirefCompat.pdf'' * ''skuiref.pdf'' Furthermore, a lot of documentation dedicated to SKILL can be found at //Cadence Online Support// => //SKILL Information// => //Product Manuals for SKILL// ====== SKILL as a shell scripting language ====== SKILL scripts can be run just as any other ssh/csh, Python etc. shell script in batch or interactive mode. To run SKILL in interactive mode from a Unix/Linux terminal just invoke the ''skill'' standalone executable, ''$IC_DIR/tools/dfII/bin/skill'' \\ :!: **//Note//** \\ Be aware that a ''/usr/bin/skill'' executable related to UNIX/Linux processes exists too! (''man skill''...) It is a good idea to create some alias to the Cadence ''skill'' executable, e,g, alias skl '/path/to/tools/dfII/bin/skill' SKILL interactive prompt: [pacher@elt156xl skill]$ /usr/cadence/IC_6.1.5/tools/dfII/bin/skill > To run SKILL in batch mode indeed, the first line of the SKILL script (''.il'' file extension) must start with a #! /usr/cadence/IC_6.1.5/tools/dfII/bin/skill statement (similar to sh/csh, Python, TCL etc. script languages). __**Comments and hello world program**__ ''hello.il'' #! /usr/cadence/IC_6.1.5/tools/dfII/bin/skill ; SKILL comments begin with ; /* but also C-style comments are allowed */ printf("Hello world! \n") chmod +x hello.il ./hello.il Or run it with /usr/cadence/IC_6.1.5/tools/dfII/bin/skill hello.il ====== Whetting the appetite ====== [pacher@elt156xl skill]$ /usr/cadence/IC_6.1.5/tools/dfII/bin/skill > SKILL as a calculator (similar to Python, ROOT etc.) > 3 + 7 10 > 3/7 0 > 3/7. 0.4285714 SKILL built-in functions examples: > getInstallDir() ("/export/elt59xl/disk0/cds/IC_6.1.5/tools.lnx86/dfII") > getShellEnvVar("PWD") "/export/elt156xl/disk0/users/pacher/scratch/skill" > help( getShellEnvVar ) Loading skillDev.cxt Consulting cdsFinder database (may take a while) ... getShellEnvVar( t_UnixShellVariableName ) => t_value | nil Returns the value of a UNIX environment variable, if it has been set. t ====== Improving the SKILL shell performance ====== Unfotunately, neither skill and ocean support readline: \\ [[http://www.cadence.com/Community/forums/p/25399/1321055.aspx]] [[http://compgroups.net/comp.cad.cadence/how-not-to-use-ciw-but-unix-command-line/1351264]] Getting started point: the ''hofe'' C wrapper written for OCEAN, by [[http://homerreid.dyndns.org/index.shtml|Homer Reid]] [[http://homerreid.dyndns.org/misc/hofe/]] Download the ''hofe.tar.gz'' archive from homerreid.dyndns.org, mkdir hofe wget http://homerreid.dyndns.org/misc/hofe/hofe.tar.gz tar -xzf hofe.tar.gz mv hofe* hofe/ mv makefile hofe/ \\ Archive contents: * ''makefile'' * ''hofe.h'' * ''hofe.c'' * ''hofesyn.c'' * ''hofetran.c'' The wrapper is entirely based on the [[http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html|GNU Readline]], a software library that provides **line-editing** and **history** capabilities for interactive programs with a command-line interface. Make sure that ''readline'', ''history'' and ''termcap'' libraries are installed, e.g. ''/lib/libreadline.so.x'' \\ ''/usr/lib/libhistory.so.x'' \\ ''/lib/libtermcap.so.x'' yum install compat-readline yum install compat-readline.i686 sudo yum install compat-libtermcap sudo yum install compat-libtermcap.i686 You also need the ''readline-deval'' package for ''/usr/include/readline/readline.h'' and ''/usr/include/readline/history.h'' sudo yum install readline-devel The source code must be compiled with a ''-lreadline'' compiler flag passed to ''gcc'' LIBSS = -lreadline -lhistory -ltermcap ====== t/nil ====== * ''t'' -> true, ok, exit(1), etc. * ''nil'' -> otherwise ====== IO ====== [[http://www.circuitdesign.info/blog/2011/12/skill-file-io/]] ====== ====== \\ ---- Last update: ~~NOTOC~~