( ESNUG 381 Item 1 ) -------------------------------------------- [11/08/01]

From: "Gregg Lahti" <gregg.lahti@corrent.com>
Subject: How We Get Around DC's Crazy Naming Styles For Our PhysOpt Runs

Hi, John,

We've experienced some oddities with DC 2000.11 and 2001.08-1 when going
into our PhysOpt flow (gates-to-placed-gates).  DC appears to keep multiple
names (or references) of particular items within the database for nets and
ports and may write out a different name to a Verilog file vs a .db file.

What may be called port "foo" in Verilog could be referenced as "nm156"
in the .db file.  Your chances of finding the right one is about as lucky
as hitting a home run into the right-field pool off Schilling or Johnson.

Case in point: our flow does some heavy grouping so that we can clusterize
chunks of logic (100-150K gates in size) that PhysOpt can handle.  Steps
go as follows:

  1) Once we clusterize the netlist, we then write out the entire
     netlist and the clusters into separate .db and .v files.
  2) We run the full netlist through PrimeTime to apply our budget
     constraints and then write out a constraints script for each cluster.
  3) Then we go back into DC for the individual clusters, source the
     constraint script, and then write out an annotated .db for PhysOpt.

If we use the .db's created from the step (1) clustering, PrimeTime will
apply the constraints and produce a constraint script that is completely
different if we had used the Verilog netlist.  The resultant constraint
script will cause copious errors (incorrect port names, incorrect net names)
if I apply it against the .db file in DC.  If I use the Verilog netlist in
the PrimeTime step (1) and the DC step before PhysOpt, things are fine and
I can write out a properly constrained .db file for my PhysOpt run.

Apparently, this is a known issue by Synopsys R&D.  Our AE wrote a Solvit
article (MISC-323 I think) which had the following to get the port names
written out correctly:

   set change_name_solve_bus_members false
   define_name_rules eq -equal_ports_nets
   report_names -rules eq
   change_names -rules eq
   report_names -rules verilog
   change_names -rules verilog

Unfortunately, it didn't solve all of the issues of using the .db file, but
it did save us on name changes through the grouping phase.  We wound up
adding these variables in our *dc.setup file to make the grouping easier
to swallow:

   set hdlout_internal_busses true;
   set change_names_dont_change_bus_members true;
   set verilogout_no_negative_index true;

That last variable is odd.  In DC 2000.11-SP2 and later the default value was
set to false which resulted in Verilog arrays containing negative numbers
(i.e. foo[1:-3]).  Why anyone would want this feature is beyond me.

End result for us was to use the Verilog generated netlist for the grouping
and everything else when going into the PhysOpt run.  This makes it painful
for carrying around constraints and more work to get a timing budget through
PrimeTime, but it works.

    - Gregg Lahti
      Corrent Corp                               Tempe, AZ


 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)