From 841740d37516761c086bc41a3b6a3517379acc1e Mon Sep 17 00:00:00 2001 From: "yu.dongliang" <18588496441@163.com> Date: Tue, 31 Oct 2023 15:14:46 +0800 Subject: [PATCH] ses_layout_function() --- ses_layout.c | 109 +++++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 46 deletions(-) diff --git a/ses_layout.c b/ses_layout.c index af6da6d..c724502 100644 --- a/ses_layout.c +++ b/ses_layout.c @@ -716,7 +716,6 @@ static inline void __ses_flip_pos(ScfEcomponent* c) } } - static void __ses_de_cross(ScfEfunction* f, int d) { ScfEcomponent* c0; @@ -836,13 +835,14 @@ next: } } -static void __ses_set_cx(ScfEfunction* f, int d) +static void __ses_setc_xy(ScfEfunction* f, int d) { ScfEcomponent* c; ScfEpin* p0; ScfEpin* p1; size_t i; + size_t j; for (i = 0; i < f->n_components; i++) { c = f->components[i]; @@ -852,6 +852,15 @@ static void __ses_set_cx(ScfEfunction* f, int d) c->x = (p0->x + p1->x) / 2; c->y = (p0->y + p1->y) / 2; + + p0->x = c->x; + p1->x = c->x; + + for (j = 2; j < c->n_pins; j++) { + p0 = c->pins[j]; + + p0->x = (p0->x + 3 * c->x) / 4; + } } } @@ -1013,7 +1022,7 @@ static void __ses_layout_cx(ScfEfunction* f, int d) qsort(f->components, f->n_components, sizeof(ScfEcomponent*), ecomponent_cmp_id); } -static void __ses_xchg_npn_ce(ScfEfunction* f, int d) +static void __ses_xchg_ce(ScfEfunction* f, int d) { ScfEcomponent* c; ScfEpin* pb; @@ -1032,7 +1041,7 @@ static void __ses_xchg_npn_ce(ScfEfunction* f, int d) pc = c->pins[SCF_EDA_NPN_C]; pe = c->pins[SCF_EDA_NPN_E]; - pc->x = (pc->x + c->x * 3) / 4; +// pc->x = (pc->x + c->x * 3) / 4; if (pc->y > pe->y) SCF_XCHG(pc, pe); @@ -1056,41 +1065,13 @@ static void __ses_xchg_npn_ce(ScfEfunction* f, int d) } } -int ses_layout_function(ScfEfunction* f, int d) +static void __ses_mov_pos(ScfEfunction* f, int d) { ScfEcomponent* c; - ScfEcomponent* c2; - ScfEline* el; - ScfEline* el2; - ScfEpin* p0; - ScfEpin* p1; + ScfEpin* p; size_t i; size_t j; - size_t k; - - f->x = 0; - f->y = 0; - f->w = 0; - f->h = 0; - - int ret = __ses_layout_lines(f, d); - if (ret < 0) - return ret; - - __ses_layout_components(f, d); - __ses_xchg_components(f, d); - - qsort(f->elines, f->n_elines, sizeof(ScfEline*), eline_cmp_id); - - __ses_de_cross(f, d); - - __ses_set_cx (f, d); - __ses_xchg_cx(f, d); - - __ses_xchg_npn_ce(f, d); - - __ses_layout_cx(f, d); int mx = 0; int nx = INT_MIN; @@ -1100,18 +1081,18 @@ int ses_layout_function(ScfEfunction* f, int d) c = f->components[i]; for (j = 0; j < c->n_pins; j++) { - p0 = c->pins[j]; + p = c->pins[j]; - if (p0->x < 0) { - if (mx > p0->x) - mx = p0->x; + if (p->x < 0) { + if (mx > p->x) + mx = p->x; - if (nx < p0->x) - nx = p0->x; + if (nx < p->x) + nx = p->x; } else { - if (px > p0->x) - px = p0->x; + if (px > p->x) + px = p->x; } } } @@ -1128,12 +1109,12 @@ int ses_layout_function(ScfEfunction* f, int d) c = f->components[i]; for (j = 0; j < c->n_pins; j++) { - p0 = c->pins[j]; + p = c->pins[j]; - if (p0->x > 0) - p0->x -= px - nx - d; + if (p->x > 0) + p->x -= px - nx - d; - p0->x -= mx - d; + p->x -= mx - d; } if (c->x > 0) @@ -1141,6 +1122,42 @@ int ses_layout_function(ScfEfunction* f, int d) c->x -= mx - d; } +} + +int ses_layout_function(ScfEfunction* f, int d) +{ + ScfEcomponent* c; + ScfEcomponent* c2; + ScfEline* el; + ScfEline* el2; + ScfEpin* p0; + ScfEpin* p1; + + size_t i; + size_t j; + size_t k; + + f->x = 0; + f->y = 0; + f->w = 0; + f->h = 0; + + int ret = __ses_layout_lines(f, d); + if (ret < 0) + return ret; + + __ses_layout_components(f, d); + __ses_xchg_components(f, d); + + qsort(f->elines, f->n_elines, sizeof(ScfEline*), eline_cmp_id); + + __ses_de_cross(f, d); + + __ses_setc_xy(f, d); + __ses_xchg_cx(f, d); + __ses_xchg_ce(f, d); + __ses_mov_pos(f, d); +// __ses_layout_cx(f, d); int tx0 = INT_MAX; int tx1 = 0; -- 2.25.1