Table of Contents

Name

place - place the cells of a net list

Origin

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

Synopsys

#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;

Parameters

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

Description

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).

Example

#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)); }

See Also

mbkfree(1) , loins(1) , lofig(1) , scr(1) apr(3)

Bug Report

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.