From c602871e0e88d3d03d229f964d847817441f8843 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 25 Apr 2020 21:08:11 +0200 Subject: [PATCH] Implemented Stefan's solution #3 for FOREIGN != MACRO in LEF --- .../lefdef/db_plugin/dbLEFImporter.cc | 22 ++++++++++++++++++ testdata/lefdef/foreigncell/au.oas.gz | Bin 811 -> 828 bytes 2 files changed, 22 insertions(+) diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc index 1f8d4b942..2d20ff902 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc @@ -729,6 +729,7 @@ LEFImporter::read_macro (Layout &layout) db::Cell &cell = layout.cell (layout.add_cell ()); db::Cell *foreign_cell = 0; db::Trans foreign_trans; + std::string foreign_name; db::Point origin; db::Vector size; @@ -837,6 +838,7 @@ LEFImporter::read_macro (Layout &layout) foreign_cell = &layout.cell (ci); foreign_trans = (db::Trans (origin - db::Point ()) * db::Trans (ft)).inverted (); + foreign_name = cn; } else if (test ("OBS")) { @@ -864,6 +866,26 @@ LEFImporter::read_macro (Layout &layout) m_macros_by_name.insert (std::make_pair (mn, std::make_pair (&cell, db::Trans ()))); + } else if (foreign_name != mn) { + + warn ("FOREIGN name differs from MACRO name in macro: " + mn); + + layout.rename_cell (cell.cell_index (), mn.c_str ()); + + // clear imported LEF geometry with a foreign cell, but provide a level of indirection so we have + // both the MACRO and the FOREIGN name + + for (unsigned int l = 0; l < layout.layers (); ++l) { + if (layout.is_valid_layer (l)) { + cell.clear (l); + } + } + + cell.clear_insts (); + + cell.insert (db::CellInstArray (db::CellInst (foreign_cell->cell_index ()), foreign_trans)); + m_macros_by_name.insert (std::make_pair (mn, std::make_pair (&cell, db::Trans ()))); + } else { // use FOREIGN cell instead of new one diff --git a/testdata/lefdef/foreigncell/au.oas.gz b/testdata/lefdef/foreigncell/au.oas.gz index fec13c35bc49f6cff4b3e934555e6673cff62a79..9c3843f9ba7da312a8f14dd2c5098f34cded1bbf 100644 GIT binary patch literal 828 zcmV-C1H=3uiwFqXiKJct19WY0E^lFT0OeFoYa3S-o%`OKFU`zTCeaWm+LW|-)DU+@ zZbJxYA;(j9s6M9B#BtK3!&Dx*0$ENZ_iN{b&{Y<$DOq$;j4&n?)xW`nVnSBhcT=)3 zT67^w>Sf52JyvX*{( 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 literal 811 zcmV+`1JwK zIqQt4$Af0IEDyWJQuy;yGClH5p=h&qtP%OFYg88NOMX3A2-!t*Y0mHEBeL!qwcwYq zkxbt{h*!T#T^gH}Ro7Su=9B63=gm<|9&(Lp{Xy7hGHoTOHA7i(jUTE(^PoVEx<mXMx+BSJ5HZUK?{&yhj{Xkl{fQ3&ZTSt2K%PF6_HbPJfroH{@XVL}rN zJ?;o8C}&}jG5x3rIcwB)@(d&O7*-^Pvzc)_%Q8?;WQxeXf~=Fb@dajdJkcPr4^fIK zp*$6+NF^%M2vw*`HA-oe4$+uC_9Z523%1ZB-fM%`f*rI5+u|15fE__M$(i4vCA@++ zcoUxEb$E?#{ekZM%74FwreCwl=eP||fYqsQr8Rho-Br8>d(t|r;uqN45O#Up1nCLP z>E9*|J;|}k_*-e2--O5fHd?{cEx6T%ZPbRTP1uKZXu+Ro9rkdSnL=bBOu8M^BjS-c zC2r_S82JY?Fa2Y88%$jM*xcXno_Vd{J=WkmqH+CI46{|7`PWq-qOamtOvU6qtEpZ; zN5i+_8NRat%lv<9GdR|Tj`$R7DAwhENAIyF$9ARNXkvtuAc|u9cm;RF#5tC5u`X(} pih~5=