[comp.lsi] A Definition of Silicon Compilation

jimmc@sci.UUCP (Jim McBeath) (07/13/87)

On May 19, Bob Mayo (mayo@mustard.berkeley) suggested that we
define what a silicon compiler is.  In the interest of stimulating
discussion on the subject, I would like to give my personal view
on that topic.

(Unfortunately, we do not receive info-vlsi here, so I have not
been able to follow any discussions which may be going on there.)

Let's start with the aspects of silicon compilers which most people
agree upon, and move from there to the more controversial aspects.

"A silicon compiler is a program which accepts a user's input specification
and produces the necessary masks to fabricate an integrated circuit."
I think most people would agree that this is a necessary condition to call
something a silicon compiler, but it may not be sufficient.
One of the terms used by some people to refer to some (or all) of the
products which vendors are offering as "silicon compilers" is
"silicon assembler".  Well then, what distinguishes between a
silicon compiler and a silicon assembler?  By analogy with software,
I would say that the distinction is that the compiler's input (language
or specification) is divorced from the target output (machine architecture
or process).  This is important in software for two reasons:
1) it allows a person with no knowledge of the the target machine architecture
to write a program, and 2) the program can be run on a number of
different machines.  This is why the program which compiles C is a
compiler and not an assembler (although I've heard some people claim
otherwise :-).  We can use the same distinction to differentiate a
silicon compiler from a silicon assembler.  A silicon compiler must
satisfy similar conditions as a software compiler: 1) it allows an
engineer with no IC design knowledge to design an IC; 2) the compiler
can be made to output the design to a number of different processes
without requiring significant change to the user's input.
(Strictly speaking, it should be possible to output to a different
process with NO changes, but for reasons of efficiency it is not
uncommon to make some minor changes.  As with software compilers,
100% portability across platforms/processes is not always achieved
in practice.)

OK, given the above we can now make a definition for a silicon compiler
which distinguishes it from a silicon assembler:
"A silicon compiler is a program which accepts a user's input specification
and produces the necessary masks to fabricate an integrated circuit,
and satisfies the following conditions:
1) it allows an engineer with no IC design knowledge to design an IC;
2) the output can be targeted to a number of different processes
without requiring significant change to the user's input."
This is a usable, albeit narrow, definition for a silicon compiler,
but it is still missing something.  The problem is that what is really
needed is a silicon development system, not just a compiler.  Consider all
the tools other than the compiler used by a software developer under unix:

- a shell (sh, csh, ksh)
- an editor (vi, emacs)
- a linker (ld)
- automatic construction (make)
- a debugger (adb, dbx, cdb)
- standard libraries (clib (stream etc.), math, ...)
- user libraries (created with ar, ranlib)
- a strict type checker (lint)
- performance feedback (gprof)
- special purpose front ends or compiler-compilers (lex, yacc)
- checking and testing routines built-in to the user's program
- a revision control system (rcs, sccs)
- file management programs (ls, mv, rm, cp, mkdir)
- documentation tools (troff, draw, pagemaker)
- archiving facilities (tar, shar)

It's possible to write programs without using any of these tools
(well, perhaps the shell and linker are essential), but it would be
pretty difficult to do anything substantial.  Each of the above tools
can be used to improve some aspect of software development, whether
it is productivity, performance, or quality.  Some people choose not
to use some of these tools; they may not be interested in what that
tool provides, or they may not want to spend the time to learn about
it.  However, the system provides the tools for those who wish
to use them, and in the development of most large software systems
almost all of the above tools are generally used.

In a silicon development system *every one* of the tools listed above
as being useful for software development is also useful for silicon
development, plus some more which are specific to silicon development
systems.  Depending on how the silicon development system was designed,
some of the above unix programs may be the tools used in the silicon
development system (such as the shell or file management programs).
Some of the programs have to be silicon specific (such as performance
feedback and type checking).

I think that when most people use the term "silicon compiler", they
are referring to what I have described above as a silicon development
system which has been built around a silicon compiler.  This being
the case, we could then define a silicon compiler as being a silicon
development system which satisfies the narrow definition of a silicon
compiler given above, and which contains some reasonable set of additional
development tools from the above list of tools.  Defining silicon
compilation this way is probably of more practical use, although it
makes pinning down a precise definition much more difficult.

There is no one vendor who offers a system which has everything.  Almost
every commercially available system has at least a couple of special
tools or features which are not provided by the other vendors.  The
important question to ask is not "who sells a true silicon compiler?",
but "who has a silicon development system that meets my needs?".
The answer to this question of course depends on the individual user's
needs or goals.  This brings up another question: what are different
users' goals when developing a chip, and what features do they
require in a silicon development system?  I have my own ideas about
what I think the minimal and the optimal silicon development systems
should provide, but before moving on to that subject I would like
to see what others have to say about the definition of silicon
compilation.

-- For another definition of silicon compilation, see the article
   "Silicon Compilation Speeds Design of Complex Chips", Computer
   Design, March 1985, page 105.  The article contains a box (p. 106)
   titled "Silicon compilation defined", which gives a more rigorous
   definition than my view above; there, a "compiler" is defined more
   along the lines of what I referred to above as a "silicon
   development system".

-- The ideas and opinions expressed above are entirely my own, and do
   not necessarily represent the views of Silicon Compiler Systems
   Corporation.

Jim McBeath    {decwrl|oliveb|weitek|auspyr}!sci!jimmc
Silicon Compilers Systems Corporation   (408)371-2900
2045 Hamilton Avenue, San Jose CA 95125

spp@zion.berkeley.edu (Steve Pope) (07/17/87)

I will add just a few things to this discussion.

The term "silicon compiler" was coined 10 or more years ago
by, if I'm not mistaken, Ron Ayres.  The original intent
was quite obvious; to design a circuit layout by other than
manipulating geometries, by using something a little higher
level.  Nothing more specific was spelled out at the time.

As the term evolved, things which are called silicon compilers
are more or less of two types.

The first type, which is the less common and probably the least useful, 
involves something which compiles a transistor net-list
(or equivalent higher-level representation) into a cell layout.

The second type, which accounts for most of the silicon compliers
out there (including all the commercial products I've seen)
uses the following passes: a high-level front-end, the input to which
may be either textual or graphical; a module generator, which generally
accesses a cell library and produces two-dimensional blocks or
macrocells of circuitry; and a place-and-route program (which sometimes
is partially interactive). 

These passes correspond to the passes of a programming language
compiler.

Usually, two-dimensional module generation (as opposed to
one-dimensional as in a standard-cell system) is a requirement.
Also, to be called a compiler, the system should be able to produce
a wide variety of circuits, not just a narrow subset such as PLA's
or RAM's.  

Of course, other more restrictive definitions are possible.

steve

pi@ashoka.usc.edu (Jen-I Pi) (08/05/87)

In article <7031@sci.UUCP> jimmc@sci.UUCP (Jim McBeath) writes:
>
>(Unfortunately, we do not receive info-vlsi here, so I have not
>been able to follow any discussions which may be going on there.)

  Does anybody know hot to subscribe to info-vlsi? Thanks in advance!



Jen-I Pi :-)
-------------------------------------------------------------------------------
UUCP:  {sdcrdcf,cit-cav}!uscvax!pi	CSnet: pi@usc-cse.csnet
BITnet: pi@uscvaxq			ARPA:  pi@cse.usc.edu pi@ashoka.usc.edu
Voice: (213) 743-5530
-------------------------------------------------------------------------------

pi@ashoka.usc.edu (Jen-I Pi) (08/05/87)

In article <7031@sci.UUCP> jimmc@sci.UUCP (Jim McBeath) writes:
>
>(Unfortunately, we do not receive info-vlsi here, so I have not
>been able to follow any discussions which may be going on there.)

    Does anybody know how to subscribe to info-vlsi? Thanks in advance!


Jen-I Pi :-)
-------------------------------------------------------------------------------
UUCP:  {sdcrdcf,cit-cav}!uscvax!pi	CSnet: pi@usc-cse.csnet
BITnet: pi@uscvaxq			ARPA:  pi@cse.usc.edu pi@ashoka.usc.edu
Voice: (213) 743-5530
-------------------------------------------------------------------------------