From 2c60338ae855870f725d9bedc8da2d0c864cf924 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 31 Mar 2020 21:56:13 +0200 Subject: [PATCH] Added DO .. BY .. STEP to vias in SPECIALNETS in DEF reader, added one more private testcase --- .../lefdef/db_plugin/dbDEFImporter.cc | 29 +++++++++++++++++- ...LEFDEFImport.cc => dbLEFDEFImportTests.cc} | 15 +++++++-- .../lefdef/unit_tests/unit_tests.pro | 2 +- testdata/lefdef/doxy_vias/.test.def.swp | Bin 0 -> 12288 bytes testdata/lefdef/doxy_vias/au.oas.gz | Bin 0 -> 254 bytes testdata/lefdef/doxy_vias/test.def | 19 ++++++++++++ 6 files changed, 60 insertions(+), 5 deletions(-) rename src/plugins/streamers/lefdef/unit_tests/{dbLEFDEFImport.cc => dbLEFDEFImportTests.cc} (96%) create mode 100644 testdata/lefdef/doxy_vias/.test.def.swp create mode 100644 testdata/lefdef/doxy_vias/au.oas.gz create mode 100644 testdata/lefdef/doxy_vias/test.def diff --git a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc index cc2010c58..842b3287a 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc @@ -727,9 +727,36 @@ DEFImporter::do_read (db::Layout &layout) std::string vn = get (); db::FTrans ft = get_orient (true /*optional*/); + db::Coord dx = 0, dy = 0; + long nx = 1, ny = 1; + + if (specialnets && test ("DO")) { + + nx = std::max (0l, get_long ()); + test ("BY"); + ny = std::max (0l, get_long ()); + test ("STEP"); + dx = db::coord_traits::rounded (get_double () * scale); + dy = db::coord_traits::rounded (get_double () * scale); + + if (nx < 0) { + dx = -dx; + nx = -nx; + } + if (ny < 0) { + dy = -dy; + ny = -ny; + } + + } + std::map::const_iterator vd = via_desc.find (vn); if (vd != via_desc.end () && ! pts.empty ()) { - design.insert (db::CellInstArray (db::CellInst (vd->second.cell->cell_index ()), db::Trans (ft.rot (), db::Vector (pts.back ())))); + if (nx <= 1 && ny <= 1) { + design.insert (db::CellInstArray (db::CellInst (vd->second.cell->cell_index ()), db::Trans (ft.rot (), db::Vector (pts.back ())))); + } else { + design.insert (db::CellInstArray (db::CellInst (vd->second.cell->cell_index ()), db::Trans (ft.rot (), db::Vector (pts.back ())), db::Vector (dx, 0), db::Vector (0, dy), (unsigned long) nx, (unsigned long) ny)); + } if (ln == vd->second.m1) { ln = vd->second.m2; } else if (ln == vd->second.m2) { diff --git a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImport.cc b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc similarity index 96% rename from src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImport.cc rename to src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc index 367802008..14cc6fcac 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImport.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -240,11 +240,16 @@ TEST(19) } TEST(20) +{ + run_test (_this, "def11", "lef:test.lef+def:test.def", "au.oas.gz", default_options ()); +} + +TEST(100) { run_test (_this, "issue-172", "lef:in.lef+def:in.def", "au.oas.gz", default_options (), false); } -TEST(21) +TEST(101) { db::LEFDEFReaderOptions opt = default_options (); opt.set_produce_pin_names (true); @@ -252,7 +257,7 @@ TEST(21) run_test (_this, "issue-489", "lef:in.lef+def:in.def", "au.oas", opt, false); } -TEST(22) +TEST(102) { db::LEFDEFReaderOptions opt = default_options (); opt.set_produce_pin_names (true); @@ -260,8 +265,12 @@ TEST(22) run_test (_this, "issue-489b", "lef:in_tech.lef+lef:in.lef", "au.oas.gz", opt, false); } -TEST(23) +TEST(103) { run_test (_this, "issue-517", "def:in.def", "au.oas.gz", default_options (), false); } +TEST(104) +{ + run_test (_this, "doxy_vias", "def:test.def", "au.oas.gz", default_options (), false); +} diff --git a/src/plugins/streamers/lefdef/unit_tests/unit_tests.pro b/src/plugins/streamers/lefdef/unit_tests/unit_tests.pro index 93529fc7f..3958da4b2 100644 --- a/src/plugins/streamers/lefdef/unit_tests/unit_tests.pro +++ b/src/plugins/streamers/lefdef/unit_tests/unit_tests.pro @@ -6,7 +6,7 @@ TARGET = lefdef_tests include($$PWD/../../../../lib_ut.pri) SOURCES = \ - dbLEFDEFImport.cc + dbLEFDEFImportTests.cc INCLUDEPATH += $$LAY_INC $$TL_INC $$DB_INC $$GSI_INC $$PWD/../db_plugin $$PWD/../../../common DEPENDPATH += $$LAY_INC $$TL_INC $$DB_INC $$GSI_INC $$PWD/../db_plugin $$PWD/../../../common diff --git a/testdata/lefdef/doxy_vias/.test.def.swp b/testdata/lefdef/doxy_vias/.test.def.swp new file mode 100644 index 0000000000000000000000000000000000000000..fcf20729c47ae24ef815046334aa97146874bc6f GIT binary patch literal 12288 zcmeI2&yEs75XK9SCacDMff6sf*$guSyGp`oU^;FmGT_XBS^tqyAdrPH%3$Q8F}{LF z6W_y=M-M)LH{->-PoQ59kPr`ec2k{vJyX?RS9Sjq4g{V$UESnr$svquM8l8oo*cb> zRCu2eO_MAejgz@q+BHV0HA&KJmhLiP?e(UheLhK+vqff4lX*6HVP}JR)=#p;o(zWl z!O-r{UM+hs(K%l!A@z^SvMdCIz)k{-Y-m;Ys8V+GkNVBx4c@=r*||j)g@6zc0zyCt z2mv7=1cZPPxL5?Tv_NlgrAzB;?XRDOzn<$*9zs9}2mv7=1cZPP5CTF#2nYcoAOwWK ze@Gzd6aCyH3a;Sr`2BzL{r~q>qF>N==qvOI`T#wLM$iMO0$qlFVDC5R3-lQ}hsMwu zWa{37WC#HvAOwVf5D)@FKnMr{As_^Vzy%JUCcncx52cp?=sD$cS;^XP(%FM#dz=O=;X7V*;W&{dCX&~Q- znF-7X)7&f|Q<#~7B5)Qjqo_3_10&N0mIZ7RnP)PIS~4**Jz(Czd6VTMqo^e_Bhv)t z3Ct%MPcrf{2>xJf_{g%rg6Ut)9#)ZR7KRIl9