Table of Contents
place - place the cells of a net list
This software belongs to the ALLIANCE CAD system from the CAO-VLSI team at
ASIM/LIP6/UPMC laboratory.
LIP6/ASIM
University P. et M. Curie
4, place Jussieu
75252 PARIS Cedex 05
FRANCE
Fax : {33/0} 1.44.27.62.86
E-mail support : alliance-support@asim.lip6.fr
#include aprnnn.h"
placement_fig *place(ptlofig,
nbmodif,
nbrow,
weightx,
weighty,
weightrows,
weightcon,
connectors)
- lofig_list
- *ptlofig;
unsigned long nbmodif;
unsigned long nbrow;
unsigned long weightx;
unsigned long weighty;
unsigned long weightrows;
- long
- weightcon;
PlaceConList *connectors;
- ptlofig
- logical view to place
- nbmodif
- how many times the placer must try for a better placement
- nbrow
- number of rows the figure must have
- weightx
- weight of horizontal distances in the cost function
- weighty
- weight of vertical distances in the cost function
- weightrows
- weight of the length disparities in the cost function
- weightcon
- weight of the distances to the external connectors in the
cost function
- connectors
- constraints on the external connectors placement
place tries to place the instances of the logical view, in order to minimize
the cost function.
- ptlofig
- logical view to place
- nbmodif
- The greater nbmodif, the better the placement (that is, the
smallest the circuit will be after routing). The time used
to place the view is proportionnal to nbmodif, it also
depends on the number of instances contained in the logical
view. With nbmodif = 1000 :
80 instances(cells) -> 25 s
450 instances(cells) -> 40 s
If nbmodif is lesser than the number of cells, it is set to
that number, in order to avoid very bad placement.
- nbrow
- Number of rows on which the cells must be placed. If it
equals 0, the program computes a value which will, hopefully,
give a square shape.
Here is the cost function used, in order to help you understand the use of
the weight parameters:
TotalCost = SignalsCost + (RowsCost*2)^weightrows
SignalsCost = HorizontalCost*2^weightx + VerticalCost*2^weighty + ConnectorsCost*2^weightcon
HorizontalCost
is an estimation to the total length of all the signals
on the x axis (in lambdas).
VerticalCost
is an estimation to the total length of all the signals
on the y axis (in lambdas).
RowsCost represents the inequality of the Rows width (in lambdas).
ConnectorsCost
represents the total length of all the signals which
are connected to a connector.
- weightx, weight
- All the cost coefficients are used as power of 2. So
take care not to give a too big value to these parameters
: neither weightx, nor weighty should be greater
than 10(2^10 = 1024), because on big circuits it could
result in an overflow during the TotalCost computing.
In case of overflow, the area improvement will be low
(<30%) wathever value of nbmodif.
- weightrows
- must not be larger than 3, larger values, will result
in a very, very, bad placement.
- connectors
- Describe where some connectors shall be placed. If it
is NULL, the weightcon parameter isn't taken in
account.
The PlaceConList structure contains the connectors placement constraints :
typedef struct {
CaracConList *NEXT;
- char
- *NAME;
- long
- USER;
} CaracConList;
- NEXT
- Pointer to the next connector placed on the same face.
- NAME
- Name of the connector; it must be present in the
lofig_list.
- USER
- Row on which the connector must be placed. Take care that
if you don't set the number of rows(nbrow), you may place a
connector on a row which doesn't exist (because if nbrow =
0, the placer compute a value for nbrow which may be too
small).
typedef struct {
CaracConList *NORTH_CON;
CaracConList *SOUTH_CON;
CaracConList *WEST_CON;
CaracConList *EAST_CON;
- long
- VER_FEED;
- long
- HOR_FEED;
} PlaceConList
- NORTH_CON, SOUTH_CON, WEST_CON, EAST_CON
-
All these fields point to a CaracConList which tells the
placer on which face the connectors of the concerned list
are placed. One or all of these fields may be NULL.
- VER_FEED, HOR_FEED
-
These fields are ignored by the placer.
The placement_fig structure contains the cell placement given by the optimization
procedure:
typedef struct {
row_elt *Rows;
- long
- NbRow;
cell_list *Cells;
- long
- NbCells;
} placement_fig
- Rows, NbRow
- Pointer to an array of NbRow(=nbrow if it wasn't null)
row_elt elements. Don't forget to free this array, allocated
by place, with a call to mbkfree.
Cells,NbCells Pointer to an array of NbCells cell_list elements. The main
purpose of the field is to allow you to free this array,
allocated by place, with a call to mbkfree. The head and
tail fields of the row_elt structure point to an element of
these array. All the elements of this array are chained
together. So it cannot be freed until you have used it.
typedef struct {
cell_list *head;
cell_list *tail;
- long
- width;
} row_elt;
- head, tail
- Pointer to the first and the last cells of the row.
- width
- width of the row
typedef struct {
cell_list *next;
cell_list *prev;
- long
- width;
- long
- x;
- long
- y;
- long
- row;
loins_list *ins;
- void
- *first;
} cell_list
next, prev
These fields hold a pointer to the next and the previous cell in
the row row.
- width
- width of the cell (in lambda).
- x, y
- Position of the center of the cell. Do not rely on these values,
as they aren't really the coordinates of the instance (they are
only used to speed-up the placement processing).
- row
- In which row the cell is in.
- ins
- Pointer to the loins_list associated to the cell (taken from the
lofig_list).
- first
- Undocumented. Width of the row (it is this value which determines
the RowsCost).
#include aprnnn.h"
phfig_list *place_the_fig(ptlofig)
lofig_list *ptlofig;
{
return (Placer2scr(ptlofig->NAME,
Place(ptlofig,1000,4,0,7,5,5,LeadPlaceConList));
}
mbkfree(1)
, loins(1)
, lofig(1)
, scr(1)
apr(3)
This tool is under development at the ASIM/LIP6/UPMC laboratory, cao-vlsi
research team.
We need your feedbak to improve documentation and tools.
If you find bugs, please fill-in the form at
http://asim.lip6.fr/alliance/support/bug-report/
Thanks for doing this.
Table of Contents
Alliance Web Site © 1997, 2002 ASIM/LIP6/UPMC,
page maintained by Czo [Olivier Sirol]
, last updated on 26 May 2000.