summaryrefslogtreecommitdiffstats
path: root/src/phys/place/place_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/phys/place/place_base.h')
-rw-r--r--src/phys/place/place_base.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/phys/place/place_base.h b/src/phys/place/place_base.h
new file mode 100644
index 00000000..e5e7ecef
--- /dev/null
+++ b/src/phys/place/place_base.h
@@ -0,0 +1,137 @@
+/*===================================================================*/
+//
+// place_base.h
+//
+// Aaron P. Hurst, 2003-2007
+// ahurst@eecs.berkeley.edu
+//
+/*===================================================================*/
+
+#if !defined(PLACE_BASE_H_)
+#define PLACE_BASE_H_
+
+// --------------------------------------------------------------------
+// Data structures
+//
+// --------------------------------------------------------------------
+
+// --- a C++ bool-like type
+//typedef char bool;
+#ifndef bool
+#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);
+
+#endif