From 751340c963156a61cdc544cbf4c126d2a1e59f31 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 1 May 2020 15:16:08 +0200 Subject: [PATCH] LEF/DEF: Fixed placement of FOREIGN cell --- .../lefdef/db_plugin/dbLEFImporter.cc | 12 +++-- testdata/lefdef/foreigncell/au.oas.gz | Bin 828 -> 800 bytes .../foreigncell/au_always_foreign.oas.gz | Bin 828 -> 800 bytes testdata/lefdef/foreigncell/au_default.oas.gz | Bin 870 -> 864 bytes .../foreigncell/au_ignore_foreign.oas.gz | Bin 872 -> 906 bytes testdata/lefdef/foreigncell/foreign.gds | Bin 3722 -> 3722 bytes testdata/lefdef/foreigncell/in.def | 2 +- testdata/lefdef/foreigncell/in.lef | 45 ++++-------------- testdata/lefdef/foreigncell/in2.lef | 37 +++++++------- 9 files changed, 34 insertions(+), 62 deletions(-) diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc index 0cb8fc40d..cbe6681f5 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc @@ -827,17 +827,19 @@ LEFImporter::read_macro (Layout &layout) layout.cell (ci).set_ghost_cell (true); } - db::Point origin; + db::Point vec; db::FTrans ft; if (! peek (";")) { - origin = get_point (1.0 / layout.dbu ()); + vec = get_point (1.0 / layout.dbu ()); ft = get_orient (true); } expect (";"); foreign_cell = &layout.cell (ci); - foreign_trans = (db::Trans (origin - db::Point ()) * db::Trans (ft)).inverted (); + // What is the definition of the FOREIGN transformation? + // Guessing: this transformation moves the lower-left origin to 0,0 + foreign_trans = db::Trans (db::Point () - vec) * db::Trans (ft); foreign_name = cn; } else if (test ("OBS")) { @@ -899,7 +901,7 @@ LEFImporter::read_macro (Layout &layout) cell.clear_insts (); - cell.insert (db::CellInstArray (db::CellInst (foreign_cell->cell_index ()), foreign_trans)); + cell.insert (db::CellInstArray (db::CellInst (foreign_cell->cell_index ()), db::Trans (db::Point () - origin) * foreign_trans)); m_macros_by_name.insert (std::make_pair (mn, std::make_pair (&cell, db::Trans ()))); } else { @@ -907,7 +909,7 @@ LEFImporter::read_macro (Layout &layout) // use FOREIGN cell instead of new one layout.delete_cell (cell.cell_index ()); - m_macros_by_name.insert (std::make_pair (mn, std::make_pair (foreign_cell, foreign_trans))); + m_macros_by_name.insert (std::make_pair (mn, std::make_pair (foreign_cell, db::Trans (db::Point () - origin) * foreign_trans))); } diff --git a/testdata/lefdef/foreigncell/au.oas.gz b/testdata/lefdef/foreigncell/au.oas.gz index 9c3843f9ba7da312a8f14dd2c5098f34cded1bbf..4aedac249c507b214180efbde321268f6487f6fb 100644 GIT binary patch literal 800 zcmV+*1K<1~iwFo+9jsme19WY0E^lFT0OeFoYZE~j-gjnpvzy(WxHgL*xk#066m^rT zh>%0IX$_{$nyj^cE^E4}fi%^me%)FTPd(Hk9y~}1rHI!40YOWVQuNZ37cb(Wc<>O4 zcoZk;HdfR>pmTYjdFFi{-Vc~Pxny5zf2J#!%BexXu>&UeIlyf_5q)RQ>FXMFa;e__ zWVe&*x0AietaCQiZJ!iLM2&1bpXvWoLPQVd96Mtpg)Adqz2@eN z<>3}l`h{QyUZLRRZ*4f5M_SBPpElD5GNReZ)gECo0EV1&tVW1NZRSbpm{ z_UG0*FAblwMX!3Uip`DK}sO!`bKgL%v;EhH0W zWn!VhZ6X=<#c+Tzev|`j$LUmm67OT=){6>}ZxEuG63SD72B=6S8l*B+s7fgf(QQ=I zJNF`@PvfUBg$LK+{2O#}U>0id6h7hwc!cNSA-*^VJtwU4x(VVW4C$w%h92cuX84mh&M&|{ zei^Y6YH+>|%V-`37T_B+DtU`$VGY-rDFj=>sP!2&h;VR74ja1c1;1nFrT?sMj)}8B zi(7}U%xem-u>!vkmGdXFolU0guam(c}WAfFI eO2Qv_PEpnHgbSf52JyvX*{( zt*ePSHy?EFd=s`KkyeA*nQGuw%AQm4uZzjg3i<2htA22$%mn9sSy&2d?PWWT**H$g za>1R>O^2OEO+M|JE7A8WncT!D<%+|`u_xrSo>^aRtpu%bDPk9$m4#rGPsoO6Hp3sH zb|&}5LA?A?_QR=Lvg(;j;bJCt?wmDg%cnfE(fT%OcUW&dY<419@yxFpVdtPgPI_jo zb33dxT8m?%d4ga9QN142zB^R3E{>V6W9HHk(>$uNW&My@Xvd88v79*EgAo?PBRg{k zw)|)3?CV#{-Xdhwz!6~--m`&7@pEL+7}}T|dlW)q)A<-=g&0gpv92KExPkL^NVWb|zio|dsKkXD)2I`4S5!rW9a7zw8&xDRA z8l?9jNiijqrveqJL}i+w3RS5_DNWK-R5zwRz(noB4!XztJ@C8m1Z}{sxP!LfiC|dd z%x};Y9>HID8y@0Kc#LlRfo}fDf4PI^AG6AbxCak_)v3><4fqv%>v#k9q)k}IzhHk$ z=<|jJ(gRp9KF^p&hGUhfXVNOa4fpw7w1(%qaAOF&s0VY~un(Kig{No}_VAF2LSo#Q z@dju_q!J5C$~2TH@d7g~G~gW>%c}Un>wX*6}0O z#o9+wbEA2VmhZvO_~sU@@^6+iSRcYb{0VDFA9BB==U5Z;A?l%jvBvBBcnuFkP1gHT zKbfB3BuFB?&vWT_8RGQ5Fc1$Qq-y8czp|gyNa|0XQ#CDhS4iCz(dyfLIPN7N2(30! G1^@uZ=%4QZ diff --git a/testdata/lefdef/foreigncell/au_always_foreign.oas.gz b/testdata/lefdef/foreigncell/au_always_foreign.oas.gz index 587178ba318161f20d69712878d7b9c40c69b051..4aedac249c507b214180efbde321268f6487f6fb 100644 GIT binary patch literal 800 zcmV+*1K<1~iwFo+9jsme19WY0E^lFT0OeFoYZE~j-gjnpvzy(WxHgL*xk#066m^rT zh>%0IX$_{$nyj^cE^E4}fi%^me%)FTPd(Hk9y~}1rHI!40YOWVQuNZ37cb(Wc<>O4 zcoZk;HdfR>pmTYjdFFi{-Vc~Pxny5zf2J#!%BexXu>&UeIlyf_5q)RQ>FXMFa;e__ zWVe&*x0AietaCQiZJ!iLM2&1bpXvWoLPQVd96Mtpg)Adqz2@eN z<>3}l`h{QyUZLRRZ*4f5M_SBPpElD5GNReZ)gECo0EV1&tVW1NZRSbpm{ z_UG0*FAblwMX!3Uip`DK}sO!`bKgL%v;EhH0W zWn!VhZ6X=<#c+Tzev|`j$LUmm67OT=){6>}ZxEuG63SD72B=6S8l*B+s7fgf(QQ=I zJNF`@PvfUBg$LK+{2O#}U>0id6h7hwc!cNSA-*^VJtwU4x(VVW4C$w%h92cuX84mh&M&|{ zei^Y6YH+>|%V-`37T_B+DtU`$VGY-rDFj=>sP!2&h;VR74ja1c1;1nFrT?sMj)}8B zi(7}U%xem-u>!vkmGdXFolU0guam(c}WAfFI eO2Qv_PEpnHgbSf52JyvX*{( zt*ePSHy?EFd=s`KkyeA*nQGuw%AQm4uZzjg3i<2htA22$%mn9sSy&2d?PWWT**H$g za>1R>O^2OEO+M|JE7A8WncT!D<%+|`u_xrSo>^aRtpu%bDPk9$m4#rGPsoO6Hp3sH zb|&}5LA?A?_QR=Lvg(;j;bJCt?wmDg%cnfE(fT%OcUW&dY<419@yxFpVdtPgPI_jo zb33dxT8m?%d4ga9QN142zB^R3E{>V6W9HHk(>$uNW&My@Xvd88v79*EgAo?PBRg{k zw)|)3?CV#{-Xdhwz!6~--m`&7@pEL+7}}T|dlW)q)A<-=g&0gpv92KExPkL^NVWb|zio|dsKkXD)2I`4S5!rW9a7zw8&xDRA z8l?9jNiijqrveqJL}i+w3RS5_DNWK-R5zwRz(noB4!XztJ@C8m1Z}{sxP!LfiC|dd z%x};Y9>HID8y@0Kc#LlRfo}fDf4PI^AG6AbxCak_)v3><4fqv%>v#k9q)k}IzhHk$ z=<|jJ(gRp9KF^p&hGUhfXVNOa4fpw7w1(%qaAOF&s0VY~un(Kig{No}_VAF2LSo#Q z@dju_q!J5C$~2TH@d7g~G~gW>%c}Un>wX*6}0O z#o9+wbEA2VmhZvO_~sU@@^6+iSRcYb{0VDFA9BB==U5Z;A?l%jvBvBBcnuFkP1gHT zKbfB3BuFB?&vWT_8RGQ5Fc1$Qq-y8czp|gyNa|0XQ#CDhS4iCz(dyfLIPN7N2(30! G1^@sf(w`jw diff --git a/testdata/lefdef/foreigncell/au_default.oas.gz b/testdata/lefdef/foreigncell/au_default.oas.gz index bc6f4204d0326bdac5f8eb5d6fd22b044126d043..6362bf9f124053c57de0cc3eb048932b3ae22b2b 100644 GIT binary patch literal 864 zcmV-m1E2gKiwFq0AFN&g19WY0E^lFT0OeFmZyQw`dCsL!LQ((&qEk zu$Z3@tKMwMoe8~C;Lf_0@Lg{vcuOE@HGO=2rSzj z!}#WF*;ljIMa8$4qQy+^!UcQM5zqNnv;Aq@>C)at)au5f>{}l+qwcUkO!-!=`%zSD zwiic4>kL5!;zlE^eRiy9zcFGyOqh!&OzWh^5%puH-bonybx}IrgAz8y12c0&TmG@L z^X%28t`lz1@S?*IG5|nE=A#kJVj|6X`LO%(Cs8LRBr%;$K$c6ult9irrO3j9Op3N& z#w=!(5t0d2voSZ|PLPa>4(2J7M42l(lfGA?7%8W)EKpp?PrC)0fpR93dHQJ-ypoG2 zsL<&|h4d3hX;>o~t8p5y37V)$nye|Bs%ctEJE!U9)XRvN8~8Td!t;+{;TLpmZVP&F z8}8#>_!jTLH~88%tg+j0z?n7~`vH2~$>kQ@MT3s7+4uL*{9Uv;Y`6)uPI(|~!uQzU zz?*O+Y{3Tp4hP%ZA#2(o+=ROMPR24b46QUC2y5&ve8uh~IzkT?`mm37U~U(lz+jSJ z(H0!xJ{1LN)R^%fq5)w@b=j~?IhOvyRLgui-8OBmJRR;4Jf>Q=@DUyG526y|ca~99 z)wsbKH+U86eYk@jW0lkU_(%AOsI2}cG1jrnNW5>X^2n;^*0FK%05Z(jD#L?$2N|mq z%;kG{_BX6DiP7h&(PRH=G$u+9_RyDXumeF44ya%I{2uymIVOoDm>}^gc@+ qO20rcqu=9xmWL3G+64Wx9;Q@UK*2gjYyaoNFny&X=oV@&Nx_d9IyivWs@S*RTm{fELc>Q6-5;aS+k5P6jfay@7Yup zin3r~Ri$Eq5YNuoO+@(v@HY3{^X@&m_q@@(SaAyO%cWe!ttbh=_Kd|G^UUd!GM=pj zh1^n5aTkiteBc&+XTd24@455-+X6``sgvuA#itddj6@~yOI~on$>(Lcw%&^BtIcZE zXtYzBEX29ZtCe73z7lxllIN8DOMLR3eC|@|q90r+QMn~wA%Bf7eg&Q85mDm!$T%#`?yXV%u68$mN%i|9prVq-R#!ABWX? zb9GEK&Ja`}s?~z(=O>ER>tp7ln0aHwG)6VHsGTq?t(dW16B8$UP{N{kU}kn`%RhFu zpT64c6+#9L4B-ah1sll7{0tgH8XbQLSoa|7-YB@%nIbpQ;IAsOQc|V zCCp+*9wUiRH4AeCZiFOMurW`WI7(c>p7Gow#YjGdC4u66ZqCWm4CFJJ#M4hB?-m_A zO@&S;3X^&aNfoO^WmQh)RY4Wiges}Bs;H`(RL`lJG5ZoC#x}kUH}TR#SpErJUfh8$ z+=lyjAHKzV@D0Aa3tQ|i+~o|5OnwhtZgjZ=chI2YI{U!^TDpTe!-g9`>*NPQ2X0|+ z8+YJH*nw^Q9rky*9&1=2+<+D1-Lz?>8Ct175VqKT_=-J5bc8M}_u&xj!QwtVhQTEF z&<-5oJ{5(;xH0V=qXD5ORwUgtq$u$hrdr06>2_&z`N?n(;StrkiI3=jzY&G#zp#v~ zDEc){zs4&_>oY%~M_A#sKH5XSV};fJARYE+Br!k2gucn6=R4?6as>KSdFEGgkDc6P zc(}!0C;H|zvxVsa&MXe|FlBp?1 wfF#m-ER%YUB1Y?R$NUh2UY(|Y*IrV=S|5)2uQA&CKOctq8@ve(w0;Hv0P$9-dH?_b diff --git a/testdata/lefdef/foreigncell/au_ignore_foreign.oas.gz b/testdata/lefdef/foreigncell/au_ignore_foreign.oas.gz index 44831e8e56939afe244ce6ca4d300d6263bd7106..c9dd21723297b02c121d520c30bd1668a62c76a4 100644 GIT binary patch literal 906 zcmV;519ki#iwFo$Ago>h19WY0E^lFT0Oe9kZyQw&52@B6_f5TP4%JmdWR3xw+hRT8o{! z({A@7VVPg5)w|0{iUNKnaSq1?wPI&yE4EoKnVGV6LkPW_Pv0nAx9n>r`jM(7jvB=M znDAp#6!W>6)J(0{s*9IRW5xM$C7PO?E0r^J#Kffdf@w6DJ1cglw&c)6Z>3?o_eoJV zjdtxTryEUu;KjG!NW7l7CCa9;R9lRuu3U*t$Hhyg(dvBebbGY6S!?$kQ8JB>TD6`h z5JRR>?|o9Mw>pbsqJ4p&4V-4vu75G=7<+5XeC#t<&zSa^CN73YOrz^Fu{Xuw=pB@Z zQS4fr@@)CXo8!-aTJje1Zo$iOWZj5k>&Ga8!TDU;?tS`Mt?Qugw;vOJOpfD)AI!mm z#1>*^2{~lsF_Ku?FowL#ogs-7;wVtYj}l*qPn)?S#Y8@br2xhG^h_pCZy;Z|Ndn!B ze6E$r{+tBe4r_zR~!n(|g(;ls!521-ou zCm^2C7(z;`4q*eMo_auZZFPz{#JPuI)COu-hY)2vwSJGd>bXPA zK12l~Pa&kD%Bq~otAZL(MK!2Os;nxis)p1{YFJOcN?3gp@4`A(pTNQca&vwg`fwM1 z$6fdy2k;%<+<`T22Zp>JV<&!wK7W?nhWo^=_?G){k5uoIEwA7XP@ViZumwM&xrtkF z6xfDM`~j^U{(#eC5V!*k{k^E6M;WTr9tYOAUHFFErxsQFuy6wVWB~KK@D$uhek0p( zgeSBq1jmI@^O(4V7HmkGp-WEiFQmQnXVdM_;_|cMp1>*XwT?%0z&}`p@twI$otgMo zXONZqut&b;tN~bk7}5vs3wz|hWrY|%5Dr3-NhSax59ze*kit?sVt gK}f;y3EU&6s8A(kHju3SpAWM0Hv;)eW%QT^? z2M*OVO&k#7OXFs(7?&Nv2fxqzeDCx4eP3ICwdxez*UR~;TU8Q3>?sQ!@aW`~GG43( z#r%9wb!SV?OyHJ$XV$3%7u*^DeSt|Ssp0YY(z6OuMxq+{WiL4A6biCjUuj2;rB*F! zHajUz=9a@+dnHSe5TDp5aE4c_!R$;m@G51`srVQ9np9*pcO7h^q{l47!2|W(eTV> z_;u7y=RP`$@4lINBYRntJ##r+O6Sg=wWe(GjAu4lUq+uVNpC- zaqeg>|Cl-R?9nop2{RB7Zg79aCZpAlkWCVEZa(OI{zcf1NWAYjX5yF~#Zxbsg$0Qz zT3(s31j!>LG1Sl^+<-eq5-!?=r%W6ru4qqrZi!+npTLqpaUnnL6lezWsZ8SOmr-y_ z4w3hhe=_@^Uy-MNWA3x#Ylw$i z>@`MTn?&p60YOONokm#(oN@8bD8wDKm|hU-A< zYgiy$hehMVv}vRft<)b1>+BAE%kJSDWWEOrhp>mY zVQvSWz$WzIKHh|Va!5@fF%qV|13Vz~#G<5|h7=|KBGk)x+T9ivSDrTa2p&_f8)Tn0 z_&cMZcok!G732T93d|TA