Postpone decision about "invalid vias are errors."

This commit is contained in:
Matthias Koefferlein 2025-05-18 22:16:13 +02:00
parent e27e24ff4f
commit a2ac8d45de
5 changed files with 126 additions and 1 deletions

View File

@ -749,7 +749,12 @@ DEFImporter::read_single_net (std::string &nondefaultrule, Layout &layout, db::C
}
std::map<std::string, ViaDesc>::const_iterator vd = m_via_desc.find (vn);
if (vd != m_via_desc.end () && ! pts.empty ()) {
if (vd == m_via_desc.end ()) {
warn (tl::to_string (tr ("Invalid via name: ")) + vn);
} else if (! pts.empty ()) {
// For the via, the masks are encoded in a three-digit number (<mask-top> <mask-cut> <mask_bottom>)
unsigned int mask_top = (mask / 100) % 10;

View File

@ -898,6 +898,21 @@ TEST(132_issue1307_pin_names)
run_test (_this, "issue-1307c", "lef:in.lef+def:in.def", "au.oas", opt, false);
}
/*
TODO: need to clarify first, if invalid via specs should be errors
TEST(133_unknown_vias_are_errors)
{
db::LEFDEFReaderOptions opt = default_options ();
try {
run_test (_this, "invalid_via", "lef:tech.lef+def:comp_invalid_via.def", "au.oas", opt, false);
EXPECT_EQ (true, false);
} catch (db::LEFDEFReaderException &ex) {
EXPECT_EQ (ex.msg ().find ("Invalid via name"), size_t (0));
}
}
*/
TEST(200_lefdef_plugin)
{
db::Layout ly;

View File

@ -0,0 +1,16 @@
VERSION 5.8 ;
DIVIDERCHAR "/" ;
BUSBITCHARS "[]" ;
DESIGN comp_invalid_via ;
UNITS DISTANCE MICRONS 1000 ;
DIEAREA ( 0 0 ) ( 10000 2000 ) ;
SPECIALNETS 2 ;
- VGND ( PIN VGND ) ( * VNB ) ( * VGND ) + USE GROUND
+ ROUTED met1 480 + SHAPE FOLLOWPIN ( 0 1000 ) ( 2000 1000 )
NEW met1 0 + SHAPE STRIPE ( 2000 1000 ) via1
+ ROUTED met2 480 + SHAPE FOLLOWPIN ( 2000 1000 ) ( 4000 1000 )
NEW met2 0 + SHAPE STRIPE ( 4000 1000 ) invalid_via ;
END SPECIALNETS
END DESIGN

89
testdata/lefdef/invalid_via/tech.lef vendored Normal file
View File

@ -0,0 +1,89 @@
VERSION 5.7 ;
BUSBITCHARS "[]" ;
DIVIDERCHAR "/" ;
USEMINSPACING OBS OFF ;
UNITS
DATABASE MICRONS 1000 ;
END UNITS
MANUFACTURINGGRID 0.005 ;
LAYER met1
TYPE ROUTING ;
DIRECTION HORIZONTAL ;
PITCH 0.34 ;
OFFSET 0.17 ;
WIDTH 0.14 ;
END met1
LAYER via
TYPE CUT ;
WIDTH 0.15 ;
SPACING 0.17 ;
END via
LAYER met2
TYPE ROUTING ;
DIRECTION VERTICAL ;
PITCH 0.46 ;
OFFSET 0.23 ;
WIDTH 0.14 ;
END met2
LAYER via2
TYPE CUT ;
WIDTH 0.2 ;
SPACING 0.2 ;
END via2
LAYER met3
TYPE ROUTING ;
DIRECTION HORIZONTAL ;
PITCH 0.68 ;
OFFSET 0.34 ;
WIDTH 0.3 ;
END met3
VIA via1 DEFAULT
LAYER via ;
RECT -0.075 -0.075 0.075 0.075 ;
LAYER met1 ;
RECT -0.16 -0.24 0.16 0.24 ;
LAYER met2 ;
RECT -0.13 -0.24 0.13 0.24 ;
END via1
VIARULE M1M2_PR GENERATE
LAYER met1 ;
ENCLOSURE 0.085 0.055 ;
LAYER met2 ;
ENCLOSURE 0.055 0.085 ;
LAYER via ;
RECT -0.075 -0.075 0.075 0.075 ;
SPACING 0.32 BY 0.32 ;
END M1M2_PR
VIA via2 DEFAULT
LAYER via2 ;
RECT -0.1 -0.1 0.1 0.1 ;
LAYER met2 ;
RECT -0.14 -0.24 0.14 0.24 ;
LAYER met3 ;
RECT -0.165 -0.165 0.165 0.165 ;
END via2
VIARULE M2M3_PR GENERATE
LAYER met2 ;
ENCLOSURE 0.04 0.085 ;
LAYER met3 ;
ENCLOSURE 0.065 0.065 ;
LAYER via2 ;
RECT -0.1 -0.1 0.1 0.1 ;
SPACING 0.4 BY 0.4 ;
END M2M3_PR
END LIBRARY

Binary file not shown.