Added DO .. BY .. STEP to vias in SPECIALNETS in DEF reader, added one more private testcase

This commit is contained in:
Matthias Koefferlein 2020-03-31 21:56:13 +02:00
parent 0ae97279d8
commit 2c60338ae8
6 changed files with 60 additions and 5 deletions

View File

@ -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<db::Coord>::rounded (get_double () * scale);
dy = db::coord_traits<db::Coord>::rounded (get_double () * scale);
if (nx < 0) {
dx = -dx;
nx = -nx;
}
if (ny < 0) {
dy = -dy;
ny = -ny;
}
}
std::map<std::string, ViaDesc>::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) {

View File

@ -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);
}

View File

@ -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

BIN
testdata/lefdef/doxy_vias/.test.def.swp vendored Normal file

Binary file not shown.

BIN
testdata/lefdef/doxy_vias/au.oas.gz vendored Normal file

Binary file not shown.

19
testdata/lefdef/doxy_vias/test.def vendored Normal file
View File

@ -0,0 +1,19 @@
VERSION 5.8 ;
DIVIDERCHAR "/" ;
BUSBITCHARS "[]" ;
DESIGN chip_top ;
UNITS DISTANCE MICRONS 1000 ;
DIEAREA ( 30000 3000 ) ( 10000000 4000 ) ;
VIAS 1 ;
- VIA1_dummy
+ RECT M1 ( -200 -140 ) ( 200 140 )
+ RECT VIA1 ( -100 -100 ) ( 100 100 )
+ RECT M2 ( -300 -120 ) ( 300 120 ) ;
END VIAS
SPECIALNETS 1 ;
- dummy
+ ROUTED M1 150 + SHAPE IOWIRE ( 40000 3600 ) VIA1_dummy DO 16000 BY 1 STEP 700 0
;
END SPECIALNETS
END DESIGN