[comp.lsi.cad] Looking for references to a circuit-drawing program

sergio@techunix.BITNET (Sergio Fogel) (11/02/90)

I am looking for references to a program (or algorithms) that receives
the description of a logic circuit (purely combinatorial, with no cycles,
if this helps) and produces a drawing of the circuit. What I need is a
drawing easy for humans to read.

Any help will be greatly appreciated.
Sergio

--
 Sergio Fogel
 sergio@techunix.BITNET

ejmag@aplcen.apl.jhu.edu (Eric Magnusson) (11/03/90)

In article <9812@discus.technion.ac.il> sergio%techunix.bitnet@lilac.berkeley.edu (Sergio Fogel) writes:
>I am looking for references to a program (or algorithms) that receives
>the description of a logic circuit (purely combinatorial, with no cycles,
>if this helps) and produces a drawing of the circuit. What I need is a
>drawing easy for humans to read.
>

The Design Compiler by Synopsys Inc. (Mountain View, Calif.) will read
a netlist, logic equations, state diagrams, or a hardware description
language representation (like Verilog or VHDL) of a circuit.  It can
then map the circuit onto a generic or specific technology (like
LSILogic or your own cell library).  If you want you may optimize the
circuit according to what specs you specify.  Finally, you can output
the design in any of the above formats, including a PostScript
schematic of the circuit.  The tool is pricey, but the only real way to
do ASIC design.  It can handle designs with combinatorial or sequential
constructs.

I know GenRad (UK & Mass.) just announced a tool which integrates with
their cad environment and has similar capabilities, but I only have
experience with the Synopsys tools.

"The statements above represent the opinions and experiences of the
author and may not necessarily represent the views of Synopsys Inc. or
GenRad.  Prices may vary. Batteries not included."

Good Luck!
-- 
Eric Magnusson
ejmag@aplcen.apl.jhu.edu

I was Bourne, Bourne, Bourne .... Bourne to be alive!!!!

hagerman@ece.cmu.edu (John Hagerman) (11/03/90)

sergio@techunix.BITNET (Sergio Fogel) writes:

   From: sergio@techunix.BITNET (Sergio Fogel)
   Reply-To: sergio%techunix.bitnet@lilac.berkeley.edu (Sergio Fogel)

   I am looking for references to a program (or algorithms) that receives
   the description of a logic circuit (purely combinatorial, with no cycles,
   if this helps) and produces a drawing of the circuit. What I need is a
   drawing easy for humans to read.

I've used the following algorithm for circuits containing a few dozen
parts (restricted to rectangles with pins on left and right sides):

1: "Levelize" the components for placement in columns.  The simplest
   way to do this is to start from each input and traverse the netlist
   to find the shortest path to each component from an input.  More
   sophisticated and pleasing levelizations are easy to think of.

2: Order the components in each column for placement in rows.  Doing
   this well is difficult.  The goal is to minimize the number of nets
   that have to run vertically.  I have used a recursive mincut method
   that works OK.  A force-directed method might also be used.

3: Order the column of inputs (on the left) and the column of outputs
   (on the right) to minimize net crossings.

4: Draw the components in rows and columns, leaving space for routing
   tracks.  It's easiest to leave a fixed amount of space, although
   you will probably have to leave more space than you'd like to.  I
   draw pins on the components, and also for inputs and outputs.

5: Draw horizontal "stubs" from the pins of the components and the
   input and output pins.  The main task here is to assign nets to
   routing tracks running vertically between columns of components.
   The stubs "connect" pins to the routing tracks.

6: Draw horzontal routing segments between rows of components.  Again,
   nets are assigned to routing tracks running horizontally between
   rows of components.  The horizontal segments are used to connect
   the vertical routing tracks.

7: Draw vertical segments from the stubs to the horizontal segments.
   This completes the routing.

Another thing to deal with is crossing versus connected intersections
of segments.  It's easiest to just draw dots for connections and not
to worry about fancy symbolism for unconnected crossings.

Brute-force data structures and algorithms are sufficient (if you have
a reasonably fast machine).  For example, when assigning a net to a
horizontal track, I first compute the necessary extent, and then try
horizontal tracks until I find one that no other net is using on the
desired extent.  This is a gross method, since all nets are examined
for each track tried, but it's still fast enough.

- John
--
hagerman@ece.cmu.edu

christos@batcomputer.tn.cornell.edu (Christos S. Zoulas) (11/03/90)

In article <9812@discus.technion.ac.il> sergio%techunix.bitnet@lilac.berkeley.edu (Sergio Fogel) writes:
>I am looking for references to a program (or algorithms) that receives
>the description of a logic circuit (purely combinatorial, with no cycles,
>if this helps) and produces a drawing of the circuit. What I need is a
>drawing easy for humans to read.

I wrote something like that a while ago. I did not want to distribute
it before I was done, but since there seems to be a demand for it I'll
put a copy on tesla.ee.cornell.edu, in /pub/biz.tar.Z. 

It is not production quality code, and there are some more things I'd 
like to implement, but I will make it public now...

My program is a type of lint(1), for .sim format files and 
it produces plotting information that can be translated to tgif, or
directly plotted on X. We use it here at Cornell to reverse-engineer 
and debug magic layouts.

If you do get a copy, I would appreciate it if you'd drop me a line
and give me your e-mail address, so I can keep track of things and
notify you about updates.

christos
-- 
   /------------------------------------------------------------------------\
   | Christos Zoulas         | 409 Phillips Hall, Electrical Engineering,   |
   | christos@ee.cornell.edu | Cornell University, Ithaca NY 14853.         |
   | christos@crnlee         | Phone: (607) 255 4323  | Fax: (607) 254 4565 |