Issue #489 (Pin names as shape properties) (#507)

* Fixed #489 (LEF/DEF reader provides pin names as properties)

* Removed vi swap file

* #489 fixed (LEF pins also get properties, added tests)
This commit is contained in:
Matthias Köfferlein
2020-02-23 00:29:12 +01:00
committed by GitHub
parent e99d3a1893
commit 1992fc762a
17 changed files with 788 additions and 289 deletions
Binary file not shown.
+34
View File
@@ -0,0 +1,34 @@
VERSION 5.7 ;
DIVIDERCHAR "/" ;
BUSBITCHARS "[]" ;
DESIGN test ;
UNITS DISTANCE MICRONS 2000 ;
DIEAREA ( 0 0 ) ( 37520 7840 ) ;
PINS 12 ;
- VDD + NET VDD + SPECIAL + DIRECTION INOUT + USE POWER
+ LAYER M2 ( -320 0 ) ( 320 37520 )
+ FIXED ( 37520 3920 ) W ;
- VSS + NET VSS + SPECIAL + DIRECTION INOUT + USE GROUND
+ PORT
+ LAYER M2 ( -18760 0 ) ( 18760 640 )
+ FIXED ( 18760 -320 ) N
+ PORT
+ LAYER M2 ( -18760 0 ) ( 18760 640 )
+ FIXED ( 18760 8160 ) S
;
END PINS
SPECIALNETS 4 ;
- VSS ( * VSS )
+ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 0 ) ( 37520 * )
NEW M2 640 + SHAPE FOLLOWPIN ( 0 7840 ) ( 37520 * )
+ USE GROUND
;
- VDD ( * VDD )
+ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 3920 ) ( 37520 * )
+ USE POWER
;
END SPECIALNETS
END DESIGN
+63
View File
@@ -0,0 +1,63 @@
VERSION 5.7 ;
BUSBITCHARS "[]" ;
DIVIDERCHAR "/" ;
UNITS
DATABASE MICRONS 1000 ;
END UNITS
MANUFACTURINGGRID 0.002 ;
USEMINSPACING OBS OFF ;
LAYER overlap
TYPE OVERLAP ;
END overlap
LAYER contact
TYPE CUT ;
END contact
LAYER metal1
TYPE ROUTING ;
DIRECTION HORIZONTAL ;
END metal1
LAYER via1
TYPE CUT ;
END via1
LAYER metal2
TYPE ROUTING ;
DIRECTION VERTICAL ;
END metal2
LAYER via2
TYPE CUT ;
END via2
LAYER metal3
TYPE ROUTING ;
DIRECTION HORIZONTAL ;
END metal3
LAYER via3
TYPE CUT ;
END via3
LAYER metal4
TYPE ROUTING ;
DIRECTION VERTICAL ;
END metal4
LAYER via4
TYPE CUT ;
END via4
LAYER metal5
TYPE ROUTING ;
DIRECTION HORIZONTAL ;
END metal5
END LIBRARY
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
MACRO dummy
CLASS CORE ;
FOREIGN dummy 0.000 0.000 ;
ORIGIN 0.000 0.000 ;
SIZE 0.384 BY 0.480 ;
SYMMETRY X Y ;
SITE BLABLA ;
PROPERTY LEF58_EDGETYPE "
EDGETYPE LEFT L ;
EDGETYPE RIGHT R ;
" ;
PIN Z
ANTENNADIFFAREA 0.009048 ;
DIRECTION OUTPUT ;
PORT
LAYER M1 ;
RECT 0.306 0.357 0.318 0.403 ;
RECT 0.318 0.115 0.352 0.403 ;
VIA 0.336 0.167 square ;
VIA 0.336 0.351 square ;
END
END Z
END dummy
+36
View File
@@ -0,0 +1,36 @@
LAYER OD
TYPE IMPLANT ;
END OD
LAYER VTS_N
TYPE IMPLANT ;
END VTS_N
LAYER VTS_P
TYPE IMPLANT ;
END VTS_P
LAYER M0OD
TYPE IMPLANT ;
END M0OD
LAYER M0PO
TYPE MASTERSLICE ;
END M0PO
LAYER VIA0
TYPE CUT ;
END VIA0
LAYER M1
TYPE MASTERSLICE ;
END M1
LAYER VIA1
TYPE CUT ;
END VIA1
LAYER M2
TYPE MASTERSLICE ;
END M2
VIA square
LAYER M0PO ;
RECT -0.006 -0.006 0.006 0.006 ;
LAYER VIA0 ;
RECT -0.006 -0.006 0.006 0.006 ;
LAYER M1 ;
RECT -0.006 -0.006 0.006 0.006 ;
END square
+141
View File
@@ -178,6 +178,147 @@ class DBReaders_TestClass < TestBase
end
# LEF/DEF Options
def test_lefdef_options
conf = RBA::LEFDEFReaderConfiguration::new
lm = RBA::LayerMap::new
lm.map(RBA::LayerInfo::new(1, 0), 2, RBA::LayerInfo::new(42, 17))
conf.layer_map = lm
opt = RBA::LoadLayoutOptions::new
opt.lefdef_config = conf
assert_equal(opt.lefdef_config.layer_map.to_string, "1/0 : 42/17\n")
assert_equal(opt.dup.lefdef_config.layer_map.to_string, "1/0 : 42/17\n")
assert_equal(conf.layer_map.to_string, "1/0 : 42/17\n")
conf.create_other_layers = false
assert_equal(conf.create_other_layers, false)
conf.create_other_layers = true
assert_equal(conf.create_other_layers, true)
conf.dbu = 2.5
assert_equal(conf.dbu, 2.5)
assert_equal(conf.net_property_name, 1)
conf.net_property_name = "x"
assert_equal(conf.net_property_name, "x")
conf.net_property_name = 2
assert_equal(conf.net_property_name, 2)
conf.net_property_name = nil
assert_equal(conf.net_property_name, nil)
assert_equal(conf.pin_property_name, nil)
conf.pin_property_name = "y"
assert_equal(conf.pin_property_name, "y")
conf.pin_property_name = 3
assert_equal(conf.pin_property_name, 3)
conf.pin_property_name = nil
assert_equal(conf.pin_property_name, nil)
assert_equal(conf.instance_property_name, 1)
conf.instance_property_name = "z"
assert_equal(conf.instance_property_name, "z")
conf.instance_property_name = 4
assert_equal(conf.instance_property_name, 4)
conf.instance_property_name = nil
assert_equal(conf.instance_property_name, nil)
assert_equal(conf.produce_cell_outlines, true)
conf.produce_cell_outlines = false
assert_equal(conf.produce_cell_outlines, false)
assert_equal(conf.cell_outline_layer, "OUTLINE")
conf.cell_outline_layer = "17/1"
assert_equal(conf.cell_outline_layer, "17/1")
assert_equal(conf.produce_placement_blockages, true)
conf.produce_placement_blockages = false
assert_equal(conf.produce_placement_blockages, false)
assert_equal(conf.placement_blockage_layer, "PLACEMENT_BLK")
conf.placement_blockage_layer = "17/2"
assert_equal(conf.placement_blockage_layer, "17/2")
assert_equal(conf.produce_via_geometry, true)
conf.produce_via_geometry = false
assert_equal(conf.produce_via_geometry, false)
assert_equal(conf.via_geometry_suffix, "")
conf.via_geometry_suffix = "XVIA"
assert_equal(conf.via_geometry_suffix, "XVIA")
assert_equal(conf.via_geometry_datatype, 0)
conf.via_geometry_datatype = 17
assert_equal(conf.via_geometry_datatype, 17)
assert_equal(conf.produce_pins, true)
conf.produce_pins = false
assert_equal(conf.produce_pins, false)
assert_equal(conf.pins_suffix, ".PIN")
conf.pins_suffix = "XPIN"
assert_equal(conf.pins_suffix, "XPIN")
assert_equal(conf.pins_datatype, 2)
conf.pins_datatype = 18
assert_equal(conf.pins_datatype, 18)
assert_equal(conf.produce_obstructions, true)
conf.produce_obstructions = false
assert_equal(conf.produce_obstructions, false)
assert_equal(conf.obstructions_suffix, ".OBS")
conf.obstructions_suffix = "XOBS"
assert_equal(conf.obstructions_suffix, "XOBS")
assert_equal(conf.obstructions_datatype, 3)
conf.obstructions_datatype = 19
assert_equal(conf.obstructions_datatype, 19)
assert_equal(conf.produce_blockages, true)
conf.produce_blockages = false
assert_equal(conf.produce_blockages, false)
assert_equal(conf.blockages_suffix, ".BLK")
conf.blockages_suffix = "XBLK"
assert_equal(conf.blockages_suffix, "XBLK")
assert_equal(conf.blockages_datatype, 4)
conf.blockages_datatype = 20
assert_equal(conf.blockages_datatype, 20)
assert_equal(conf.produce_labels, true)
conf.produce_labels = false
assert_equal(conf.produce_labels, false)
assert_equal(conf.labels_suffix, ".LABEL")
conf.labels_suffix = "XLABEL"
assert_equal(conf.labels_suffix, "XLABEL")
assert_equal(conf.labels_datatype, 1)
conf.labels_datatype = 21
assert_equal(conf.labels_datatype, 21)
assert_equal(conf.produce_routing, true)
conf.produce_routing = false
assert_equal(conf.produce_routing, false)
assert_equal(conf.routing_suffix, "")
conf.routing_suffix = "XROUT"
assert_equal(conf.routing_suffix, "XROUT")
assert_equal(conf.routing_datatype, 0)
conf.routing_datatype = 22
assert_equal(conf.routing_datatype, 22)
assert_equal(conf.lef_files.join(","), "")
conf.lef_files = [ "u.lef", "v.lef" ]
assert_equal(conf.lef_files.join(","), "u.lef,v.lef")
end
# MAG Options
def test_mag_options