( 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
|
|