/*===================================================================*/ // // place_base.h // // Aaron P. Hurst, 2003-2007 // ahurst@eecs.berkeley.edu // /*===================================================================*/ #if !defined(PLACE_BASE_H_) #define ABC__phys__place__place_base_h ABC_NAMESPACE_HEADER_START // -------------------------------------------------------------------- // Data structures // // -------------------------------------------------------------------- // --- a C++ bool-like type //typedef char bool; #ifndef ABC__phys__place__place_base_h #define bool int #endif #define true 1 #define false 0 // --- Rect - rectangle typedef struct Rect { float x, y; float w, h; } Rect; // --- AbstractCell - a definition of a cell type typedef struct AbstractCell { char *m_label; // string description float m_width, m_height; // dimensions bool m_pad; // a pad (external I/O) cell? } AbstractCell; // --- ConcreteCell - a design object typedef struct ConcreteCell { int m_id; // a unique ID (see below) char *m_label; // string description AbstractCell *m_parent; // cell type bool m_fixed; // position is fixed? float m_x, m_y; // center of cell int m_data; } ConcreteCell; // --- ConcreteNet - a design net typedef struct ConcreteNet { int m_id; // a unique ID (see below) int m_numTerms; // num. of connected cells ConcreteCell **m_terms; // connected cells float m_weight; // relative weight int m_data; } ConcreteNet; // A note about IDs - the IDs are non-nonegative integers. They need not // be contiguous, but this is certainly a good idea, as they are stored // in a non-sparse array. // Cells and nets have separate ID spaces. // -------------------------------------------------------------------- // Global variable prototypes // // -------------------------------------------------------------------- // NOTE: None of these need to be managed externally. extern int g_place_numCells; // number of cells extern int g_place_numNets; // number of nets extern float g_place_rowHeight; // height of placement row extern Rect g_place_coreBounds; // border of placeable area // (x,y) = corner extern Rect g_place_padBounds; // border of total die area // (x,y) = corner extern ConcreteCell **g_place_concreteCells; // all concrete cells extern ConcreteNet **g_place_concreteNets; // all concrete nets // -------------------------------------------------------------------- // Function prototypes // // -------------------------------------------------------------------- void addConcreteNet(ConcreteNet *net); void addConcreteCell(ConcreteCell *cell); void delConcreteNet(ConcreteNet *net); void delConcreteCell(ConcreteCell *cell); void globalPreplace(float utilization); void globalPlace(); void globalIncremental(); void globalFixDensity(int numBins, float maxMovement); float fastEstimate(ConcreteCell *cell, int numNets, ConcreteNet *nets[]); float fastTopoPlace(int numCells, ConcreteCell *cells[], int numNets, ConcreteNet *nets[]); Rect getNetBBox(const ConcreteNet *net); float getNetWirelength(const ConcreteNet *net); float getTotalWirelength(); float getCellArea(const ConcreteCell *cell); void writeBookshelf(const char *filename); // comparative qsort-style functions int netSortByL(const void *a, const void *b); int netSortByR(const void *a, const void *b); int netSortByB(const void *a, const void *b); int netSortByT(const void *a, const void *b); int netSortByID(const void *a, const void *b); int cellSortByX(const void *a, const void *b); int cellSortByY(const void *a, const void *b); int cellSortByID(const void *a, const void *b); ABC_NAMESPACE_HEADER_END #endif