( ESNUG 390 Item 1 ) --------------------------------------------- [03/20/02]

Subject: ( ESNUG 389 #2 ) PhysOpt def2pdef Chokes On Already Routed DEF 5.3

> I have this problem while trying to convert the routed DEF (from SE-Ultra,
> after CTgen and Wroute) to PDEF with the def2pdef I get the following:
>
>    Warning: Detect syntax error near token '*' at line 415183. Continue to
>      parse until the next correct rule can be applied. (DEFIN-16)
>    Warning: Probably the special wiring continue point has incorrect
>      syntax. (DEFIN-20)
>
> Those lines in the DEF are net routing information:
>
>   - weim_lba_b ( PIN weim_lba_b ) ( z497 x )
>   + ROUTED m1 ( 4329800 574150 ) via1 ( * * 500 ) ( 4351200 *  500 ) via2
>   ( * * 550 ) ( * 576650  550 ) via3 ( * * 550 ) ( 4352600 * ) ;
>
> Any ideas anyone?  The .DEF version is 5.3
>
>     - Ofer Paperni
>       Motorola Semiconductor                     Israel


From: [ This Little Piggy Ate Roast Beef ]

John, I work at a competitor of both Cadence and Synopsys.  Please keep me
anon here because my boss doesn't like it when I tell the truth.

I am glad to see that Cadence continues to come up with variations of their
DEF syntax, despite any other EDA vendor's efforts to parse their already
ambiguous "standard".  As the guy who writes our parser, it's always amusing
to see new variations come up, and new places where Cadence directly violate
either what they say is correct DEF or alternatively make version X of DEF
incompatible with version X-1.  You can also detect deliberate attemtps to
make LEF/DEF impossible to parse with lex/yacc, although they haven't
defeated me yet!

What Ofer's problem wiring MEANS is as follows:

   "Start on metal 1 at (x1,y1) place a via to metal 2 at that position
    but a positive end extension on the track of 500 nm at that point,
    then go on metal2 to (x2,y1) and end extend that segment by 500 nm in
    the direction of travel, then put a via in up to metal 3 with an
    extension of 550nm and route to (x2,y2) with an extension of 550 nm
    then go to metal4 and route to (x3,y2)"

What I believe is barfing the PhysOpt def2pdef parser is Ofer's/SE-Ultra's
"viaM ( * * N )" syntax.  Normally you only ever have "( x * N )" or
"( * y N )" statements to say the next point has the same x but different y
as the previous point, and to overshoot the end point by N so as to satisfy
end extension rules for via coverage (due to sub-wavelength effects).
Normally you don't give a position just after a via but this is needed here
in order to extend the start of the attached track.

The PhysOpt def2pdef converter may just not cope with end extensions.  If it
CAN cope with the extensions but not with the ( * * N ) syntax, then use
your favorite language (Perl/Awk/Python/Tcl) to change each occurence to the
"NEW mP ( x y N )" syntax ( i.e. starting a new path with an extension at the
start.)  Unfortunately this is a tad tricky because you need to know which
layer you are starting on and what the current coordinate is.  I give below
the desired result, but I cannot guarantee that the script to do it is easy!

What was:

  - weim_lba_b ( PIN weim_lba_b ) ( z497 x )
  + ROUTED m1 ( 4329800 574150 )
    via1 ( * * 500 ) ( 4351200 * 500 )
    via2 ( * * 550 ) ( * 576650  550 )
    via3 ( * * 550 ) ( 4352600 * ) ;

Should become :

  - weim_lba_b ( PIN weim_lba_b ) ( z497 x )
  + ROUTED m1 ( 4329800 574150 )
    via1 NEW m2 ( 4329800 574150 500 ) ( 4351200 *  500 )
    via2 NEW m3 ( 4351200 574150 550 ) ( * 576650 550 )
    via3 NEW m4 ( 4351200 576650 550 ) ( 4352600 * ) ;

I hope this helps.  Basically it comes down to:

    1) get Synopsys to update def2pdef.  (Good luck!)
    2) get Cadence to be a little more open about the current syntax
       for LEF/DEF.  (Even harder!!)

Good luck.

    - [ This Little Piggy Ate Roast Beef ]

         ----    ----    ----    ----    ----    ----   ----

From: Michael Stabenfeldt <stabie@stabie-soft.com>

Hi, John,

I believe the PhysOpt DEF 5.3 problem is the variable extension syntax.  The

   + ROUTED m1 ( 4329800 574150 ) via1 ( * * 500 ) ( 4351200 *  500 ) via2

says extend the metal 2 500 database units before beginning and 500 database
units after 4351200 574150.  The variable extension stuff is not used that
frequently.  The reason I know this is I got bit by the same problem on the
Verilog reader in my software.  Fortunately, my database supported variable
length extensions, so it was an easy fix.   I wonder if Synopsys has that
notion...

    - Mike Stabenfeldt
      Stabie-Soft, Inc.                          Austin, TX


 Sign up for the DeepChip newsletter.
Email
 Read what EDA tool users really think.


Feedback About Wiretaps ESNUGs SIGN UP! Downloads Trip Reports Advertise

"Relax. This is a discussion. Anything said here is just one engineer's opinion. Email in your dissenting letter and it'll be published, too."
This Web Site Is Modified Every 2-3 Days
Copyright 1991-2024 John Cooley.  All Rights Reserved.
| Contact John Cooley | Webmaster | Legal | Feedback Form |

   !!!     "It's not a BUG,
  /o o\  /  it's a FEATURE!"
 (  >  )
  \ - / 
  _] [_     (jcooley 1991)