54 int maxConnections = 1;
61 bool incremental =
false;
68 if (!g_place_qpProb) {
70 g_place_qpProb->
area = NULL;
71 g_place_qpProb->
x = NULL;
72 g_place_qpProb->
y = NULL;
73 g_place_qpProb->
fixed = NULL;
88 p = ++cell_numTerms[c];
90 cell_terms[c][p-1] = net;
95 printf(
"QMAN-10 : \t\t%d large nets ignored\n", ignoreNum);
105 sizeof(
float)*maxConnections);
107 sizeof(
int)*maxConnections);
109 sizeof(
int)*g_place_numCells);
112 if (g_place_qpProb->
x != NULL && g_place_qpProb->
y != NULL) {
113 printf(
"QMAN-10 :\tperforming incremental placement\n");
127 g_place_qpProb->
x[c] = cell->
m_x;
128 g_place_qpProb->
y[c] = cell->
m_y;
129 g_place_qpProb->
fixed[c] = 1;
135 g_place_qpProb->
fixed[c] = 0;
139 last_index = nextIndex;
140 for(n=0; n<cell_numTerms[c]; n++) {
141 net = cell_terms[c][n];
145 if (c2 == c)
continue;
146 if (seen[c2] < last_index) {
148 g_place_qpProb->
connect[nextIndex-1] = c2;
150 seen[c2] = nextIndex;
158 g_place_qpProb->
connect[nextIndex-1] = -1;
163 g_place_qpProb->
connect[nextIndex-1] = -1;
187 int numConstraints = 0;
193 int next_index = 0, last_constraint = 0;
194 bool isTrueConstraint =
false;
201 while(stackPtr >= 0) {
202 p = stack[stackPtr--];
207 stack[++stackPtr] = p->
m_sub1;
208 stack[++stackPtr] = p->
m_sub2;
220 COG_rev[cogRevNum].
x = cgx;
221 COG_rev[cogRevNum].
y = cgy;
222 COG_rev[cogRevNum].
part =
p;
223 COG_rev[cogRevNum].
delta = 0;
234 g_place_qpProb->
cog_x[numConstraints] = COG_rev[i].
x;
235 g_place_qpProb->
cog_y[numConstraints] = COG_rev[i].
y;
242 isTrueConstraint =
true;
250 if (totarea == 0.0) {
251 isTrueConstraint =
false;
253 if (isTrueConstraint) {
255 g_place_qpProb->
cog_list[next_index++] = -1;
256 last_constraint = next_index;
259 next_index = last_constraint;
265 return --numConstraints;
281 g_place_qpProb->
cog_x =
malloc(
sizeof(
float)*g_place_numPartitions);
282 g_place_qpProb->
cog_y =
malloc(
sizeof(
float)*g_place_numPartitions);
struct Partition * m_sub1
void qps_solve(qps_problem_t *p)
ABC_NAMESPACE_IMPL_START int g_place_numPartitions
void qps_clean(qps_problem_t *p)
ConcreteNet ** g_place_concreteNets
Partition * g_place_rootPartition
float splitPenalty(int pins)
Returns a weight for all of the edges in the clique for a multipin net.
void constructQuadraticProblem()
Constructs the matrices necessary to do analytical placement.
ConcreteCell ** g_place_concreteCells
struct Partition * m_sub2
float getCellArea(const ConcreteCell *cell)
#define ABC_NAMESPACE_IMPL_END
int generateCoGConstraints(reverseCOG COG_rev[])
Generates center of gravity constraints.
ConcreteCell ** m_members
qps_float_t * edge_weight
#define ABC_NAMESPACE_IMPL_START
ABC_NAMESPACE_IMPL_START qps_problem_t * g_place_qpProb
struct reverseCOG reverseCOG
void qps_init(qps_problem_t *p)
ABC_NAMESPACE_IMPL_START int g_place_numCells
void solveQuadraticProblem(bool useCOG)
Calls quadratic solver.