Usenet.com

www.Usenet.com

Group Index

Comp Thread Archive from Usenet.com

<-- __Chronological__ --> <-- __Thread__ -->

Re: Skill-C interface



Andrew,
    Thank you for the example code. I'm using an older version of Cadence
(4.4.6), so it has the slow hashtables. As for the bitmaps, I think all of
the time is spent in the dbCreateRect() call, so it should be better to
create the bitmap once and just change the pixels. However, if I save a
layout with many of these bitmaps the file size is huge. I can save space by
calling leMergeShapes() on the rectangles, which combines them into
polygons. Since there are typically only 2-4 colors used, there are many
large groups of rectangles in the same layer. LeMergeShapes() can actually
take longer than creating the rectangles in the first place sometimes when
several of the images overlap. Perhaps I should try to create polygons or at
least larger rectangles of several pixels in the first place, instead of a
full array of pixel-sized rectangles.

Frank

"Andrew Beckett" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Hi Frank,
>
> I thought last night after appending about something else I meant to
mention,
> which is that the underlying hash package was re-implemented by R&D for
> the IC5033 release, and it solves some bugs and is much better performing
too.
>
> I see the problem for the bitmap processing. One idea might be to create
all the
> shapes once (on a fixed layer), and then you just need to go through them
all
> and change the layer to the layer you want. Probably what I'd do is:
>
> for(x 0 127
>   for(y 0 127
>      rect=dbCreateRect(cv "y0" list(x:y x+1:y+1)
>      rect~>myCoord=x:y
>   )
> )
>
> Then when you come to use these at some later point, you might want to
build
> a hash table to speed lookup of each rectangle:
>
> shapeLookup=makeTable('shapeLookup nil)
> y0=car(exists(lpp cv~>layerPurposePairs lpp~>layerName=="y0")))
> foreach(shape y0~>shapes
>    shapeLookup[shape~>myCoord]=shape
> )
>
> And then you can go through and do things like
>
>    shapeLookup[10:15]~>layerName="y2"
>
> which would be much quicker than recreating each time.
>
> Note the above code is not tested in anyway - just pseudo-skill code.
>
> Andrew.
>
> On Tue, 25 Nov 2003 16:40:20 -0800, "gennari" <[EMAIL PROTECTED]>
wrote:
>
> >Thanks Andrew.
> >
> >I didn't know about the bitfield operators and wish I had known about
them
> >earlier. I just tried '&', '|', and '^', and similar operations which
didn't
> >work as intended and no one in my office knew how to do these types of
> >things.
> >
> >The bitmap is different. It's for visualization of shapes overlaid on the
> >gometry. I'm working in lithography, so I would like to overlay images
such
> >as simulation results of printed shapes over the original layout shapes
in
> >Virtuoso. I'm also working on image/pattern matching, so I'm overlaying
> >approximate images with complex features (pixel accurate curves) onto the
> >layout. I could probably also do this by taking a screenshot of a layout
and
> >combining that with the image in a graphics program, but then I have to
do
> >everything by hand instead of using the power of SKILL. It works in
SKILL,
> >it's just so slow to create a 128x128 image with 16,384 rectangles on
> >various layers.
> >
> >Frank
> >
> >"Andrew Beckett" <[EMAIL PROTECTED]> wrote in message
> >news:[EMAIL PROTECTED]
> >> Frank,
> >>
> >> On Tue, 25 Nov 2003 13:16:02 -0800, "gennari"
<[EMAIL PROTECTED]>
> >wrote:
> >>
> >> >A few years ago I had to write a separate C++ program to get around
some
> >of
> >> >the limitations of SKILL, and then call that program from SKILL. In
> >> >particular, SKILL/Cadence crashed when I tried to create a hash table
of
> >> >several hundred thousand x/y points. Also, I couldn't find any way of
> >> >performing bit-level operations in SKILL such as bitshifts, bit
masking,
> >> >etc. In fact I think skill uses 32 bits in all integers, even when I
only
> >> >need to store an 8-bit value, and that's 4X memory overhead. I
eventually
> >> >had to implement the layout database and gometry query functions into
my
> >C++
> >> >program to aviod writing I/O files of many MB. Now the program is
> >> >independent of Cadence, but I wonder if all that work was really worth
> >it.
> >> >
> >>
> >> functions such as bor, band - which are equivalent to operators | and
&.
> >Also
> >> bnand, bnor, bxor, bxnor (operators for each of these too).
> >> leftshift, rightshift (<< and >>).
> >> The bitfield, bitfield1 functions as well are useful. These are
> >equivalents
> >> of doing something like:
> >>
> >> a=1234
> >> a<4:2>  => 4
> >> a<4> => 1
> >> a<<1 => 2468
> >> a>>2 => 308
> >> a&10 => 2
> >> a|5 => 1239
> >> a^2 => 1232 (xor)
> >>
> >> Bet you didn't know you could do that ;-(
> >>
> >> They're all documented, and have been there for as long as I can
remember.
> >>
> >> >Oh, and as a side note, is there any way to create a small bitmap
image
> >in
> >> >Cadence other than building it from single pixel rectangles on the
> >> >multi-colored "y0" - "y9" layers in the LSW? It takes a really long
time
> >to
> >> >do this in SKILL.
> >> >
> >>
> >> Depends what you want to use the bitmap for. If it's for menu items,
icons
> >> etc in DFII, then hiStringToIcon and related functions would help. Some
of
> >the
> >> ^dl (displayList) functions can be used too (don't get used much, but
can
> >be
> >> quite handy).
> >>
> >> Andrew.
> >>
> >> >Frank
> >> >
> >> >"Andrew Beckett" <[EMAIL PROTECTED]> wrote in message
> >> >news:[EMAIL PROTECTED]
> >> >> You could use the Integrators Toolkit (ITK-DB). This allows you to
> >write
> >> >> standalone applications which access the database from C, and there
is
> >> >some
> >> >> (limited) support for invoking SKILL from this.
> >> >>
> >> >> However, I suspect this is not what you want. You can't (for
example)
> >link
> >> >in
> >> >> some C code with DFII and call that from SKILL (we don't support
that,
> >for
> >> >> a variety of reasons - one being that it is rarely necessary). What
you
> >> >can do
> >> >> however is to write your computationally intensive tasks in a
separate
> >> >program,
> >> >> which you can then invoke using the ipc function calls (e.g.
> >> >ipcBeginProcess),
> >> >> and then communicate to that external program either synchronously
or
> >> >> asynchronously. This can be quite an effective means of doing things
> >> >outside.
> >> >>
> >> >> What sort of intensive operations are you talking about? SKILL can
be
> >> >pretty
> >> >> quick provided that you do things correctly (it's byte-code
compiled,
> >> >> and runs on a virtual machine).
> >> >>
> >> >> Regards,
> >> >>
> >> >> Andrew.
> >> >>
> >> >>
> >> >> On Mon, 24 Nov 2003 15:20:13 -0700, sampath <[EMAIL PROTECTED]>
wrote:
> >> >>
> >> >> >Hi,
> >> >> >is there anyway that i can mix skill and c code,
> >> >> >I am looking for a way to do some runtime intensive operations in c
> >and
> >> >> >get the data into a skill code?
> >> >> >can somebody tell a solution?
> >> >> >sampath
> >> >>
> >> >> --
> >> >> Andrew Beckett
> >> >> Senior Technical Leader
> >> >> Custom IC Solutions
> >> >> Cadence Design Systems Ltd
> >> >
> >>
> >> --
> >> Andrew Beckett
> >> Senior Technical Leader
> >> Custom IC Solutions
> >> Cadence Design Systems Ltd
> >
>
> --
> Andrew Beckett
> Senior Technical Leader
> Custom IC Solutions
> Cadence Design Systems Ltd





<-- __Chronological__ --> <-- __Thread__ -->


Usenet.com



Please check out one of the premium Usenet Newsgroup Service Providers below for access to Usenet.