PhysOpt-Avanti Interface
This webpage is for those within the company
using Apollo with PhysOpt.
PhysOpt is a synthesis, optimization and placement tool.
It takes an RTL or gate level design, with logical/physical libraries and
an initial floorplan (in PDEF), and creates an optimized netlist with complete
placement that can be routed by using any detail router. This interface is
composed of three Scheme scripts that are run within the Avanti environment.
The scripts are called readPDEF3.scm, dumpPDEF3.scm, and dumpPLIB.scm.
PhysOpt - Avanti flow diagram
The following figure shows a general flow that uses DC (if
used), PhysOpt, and Avanti. PhysOpt shares the same database and environment with
DC but it also needs plib/pdb and the floorplan in IEEE PDEF as the inputs.

As you can see in the diagram, the physical library must first be extracted
from the Avanti Milkyway database and translated to the Synopsys plib format.
Next, any floorplan information must be translated into PDEF. Finally,
after PhysOpt does its thing, the placed netlist must be fed back into Apollo
and it does its magic.
Physical library translation:
PLIB is the Synopsys physical library format. Most ASIC
and library vendors, however, only provide libraries in LEF or Milkyway
formats to their customers. PhysOpt provides a LEF translator.
For Milkyway databases, use the script "dumpPLIB.scm". This script is run
in the Apollo environment and translates Milkyway library data to the plib
format directly.
This will look something like this:
load dumpPLIB.scm
define plibSiteName
"tsm3site"
dumpPLIB /home/tsmc18/avanti/tsmc18
tsmc18.plib
In this example, the physical library you want to translate
is called "tsmc18". The site name is called "tsm3site", the output plib
file name is called "tsmc18.plib" The output plib, by default, contains
both the technology section and the cell section.
Controlling cell and technology data output:
If you want to dump only the technology section, (or only the cell section,)
there is a variable to control that.
Controlling bus naming style:
In some cases, users want to have control over the bus naming style used
in the physical library for PhysOpt, which could be different than what is used
in Avanti physical library. There is a variable to control the bus naming
style and there are four options:
plibDumpBusNameRule
"[%d]" | "(%d)" | "{%d}" | "<%d>"
Example:
define plibDumpBusNameRule "[%d]"
dumpPLIB /home/tsmc18/avanti/tsmc18
tsmc18.plib
Known issues:
-
When you translate the memory block or macro library, the script cannot
create a site definition even if you specify the site name. The reason
is in Avanti system there is no site concept. A unitTile cell is created
for the standard cells and it can be used to define the site for standard
cells. For macro cells, however, there is no unitTile cell and thus the
script cannot create a site definition. To work around this problem, you
need to copy the site definition from the plib for standard cells into
the plib for macro cells by hand.
-
When you dump technology information, the script only guesses at averages
for intra layer overlap and adjaceny, so more RC tuning may be needed!
PLIB seems to support more detailed information and another script could
be written to fix this.
Floorplan translation:
For the design floorplan format PhysOpt uses
IEEE PDEF. Although Avanti supports PDEF 2.0 or 3.0, the PDEF file written
out from Apollo does not contain all the information needed to run Physical
Compiler. Hence, it is still recommended to use the Apollo script "dumpPDEF3.scm"
to translate the floorplan created in Apollo or Planet.
To output the PDEF for the floorplan
-
Bring up Apollo,
-
open library,
-
open cell (enter name of your design cell)
load dumpPDEF3.scm
dumpPDEF3 "tsm3site"
output_pdef_file.pdef
The following information in the floorplan will be translated
into IEEE PDEF.
-
Cell and core boundary
-
Cell row (site array) information
-
Wire track table
-
Layer definitions
-
VIA and VIA array definitions
-
IO Pin information
-
Location, orientation of the preplaced cells
-
Placement blockages
-
Group/Region constraints
-
Pre-routed nets with wires/vias (e.g. P/G)
Known issues:
The design cell used to translate the floorplan and placement should not
contain detailed routing. Otherwise it would take very long time to run
this script. Power or clock pre-routes are okay.
Currently this script cannot translate routing blockage that are created
by using Apollo's Route Guide due to limitation of the Milkyway database
access. You can use the TCL command 'create_obstruction'
in psyn_shell to create routing blockages.
This script dumps complete cell instance and net names from the Milkyway
database. Sometimes the names may not correspond to what are used in PhysOpt
and it creates errors when reading in the PDEF in psyn_shell. For example,
you might experience problems with escape sign (\) that is added in front
of hierarchy separators and/or bus names. A simple perl script should be
able to resolve this kind of problems.
Translation of PhysOpt's placement to Avanti
After PhysOpt run is complete, it writes out an updated IEEE
PDEF file which contains complete placement and the original floorplan.
Then, you can use the Apollo script "readPDEF3.scm" to translate PhysOpt's placement
back to Apollo.
This script converts and load PhysOpt's placement. In addition, you
need to take the output gate-level netlist from PhysOpt to Apollo, create a
new design library and a new design cell. The new cell created does not
have to have the original floorplan loaded because the output PDEF from
PhysOpt contains the original floorplan. "readPDEF3.scm" will recover the original
floorplan and then load the placement into the specified design cell.
To read the PDEF for the design back into Apollo:
-
Bring up Apollo,
-
open library,
-
open cell (enter name of your design cell)
load readPDEF3.scm.scm
readPDEF3.scm input_pdef_file.pdef
After this script is done, it updates and automatically
saves the new design cell. You can then open this design cell in Apollo
and perform global and detailed routing.
Known issues:
1. This script does not accept the PDEF which uses NAMEPREFIX
for cell instance names. However, the PDEF written out from PhysOpt uses name
prefix by default. In order for PhysOpt to write out PDEF with complete instance
names instead of using name prefix, you need to set the following variable
in psyn_shell.
set pdefin_use_nameprefix
false
2. You might experience the same name mapping problem
as in the floorplan translation step for the escape sign used in front
of the hierarchy separators and/or bus names. Apollo may report unfounded
cell instances in this case. Again, you should be able to resolve this
by using a simple perl script.
3. Although some users prefer to use Avanti's ECO capability
to update a design library and design cell, it is still recommended to
create a new design library and cell for PhysOpt's output.
Passing timing constraints to Avanti:
As of release 2000.3 Apollo now supports SDC (1.1) format.
You can write out SDC from PhysOpt/DC and load it into the design cell in order
to perform CTS or timing-driven routing. There are, however, still many
constraints that are not supported by Avanti yet. If you experience problems
in loading SDC to Avanti, as an alternative you can use the following DC/PhysOpt
commands to write a timing requirement file and load it into the design
cell in Apollo.
set filename "design.req"
report_clock -skew
> $filename
report_clock >>
$filename
report_port -verbose
>> $filename
report_timing_requirements
-attributes >> $filename
report_design >>
$filename
Using PhysOpt for post-CTS incremental optimization:
Designs need to have clock buffer trees. PhysOpt
does not have this capability (although Synopsys claims to be working
on it) so clock trees need to be created in the back end by using Apollo's
CTS or another tool. Since Apollo automatically performs ECO placement
after clock buffers are inserted, it may introduce post-CTS congestion
or worsen the timing QoR of the design due to placement disturbance. Therefore,
it is sometimes necessary to take the post-CTS design back to PhysOpt to perform
legalization of clock buffer placement and/or incremental optimization.
To do that you need to perform the following steps.
(1) Run CTS for each clock net with ECO placement
button turned off.
(2) Save the design cell.
(3) Dump out Verilog/VHDL from the cell with CTS
(4) Run "dumpPDEF3.scm" to get the IEEE PDEF with
placement information.
(5) Start PhysOpt and run 'legalize_placement' or 'physopt
-inc'.
(6) Push the improved design back to Apollo for detailed
route
Using PhysOpt for post-route incremental optimization:
After detailed routing, if there is a need, you can also
take the design back to PhysOpt to run post-route incremental
optimization. To do this you need not only the post-route netlist and the
PDEF with complete placement, you also need SDF and set_load/set_resistance
files for back annotation. Please note although PhysOpt can perform port route
optimization, it does not read in the complete detail routing information.