mirror of https://github.com/KLayout/klayout.git
Tests for RBA+pex, bug fixes
This commit is contained in:
parent
77aa729b06
commit
91005d5cb6
|
|
@ -315,7 +315,7 @@ Class<pex::RExtractorTech> decl_RExtractorTech ("pex", "RExtractorTech",
|
|||
"@brief Sets a value indicating whether to skip the simplify step\n"
|
||||
"See \\skip_simplify for a description of this attribute."
|
||||
) +
|
||||
gsi::method_ext ("each_via", &tech_begin_vias, &tech_end_vias,
|
||||
gsi::iterator_ext ("each_via", &tech_begin_vias, &tech_end_vias,
|
||||
"@brief Iterates the list of via definitions\n"
|
||||
) +
|
||||
gsi::method_ext ("clear_vias", &tech_clear_vias,
|
||||
|
|
@ -324,7 +324,7 @@ Class<pex::RExtractorTech> decl_RExtractorTech ("pex", "RExtractorTech",
|
|||
gsi::method_ext ("add_via", &tech_add_via, gsi::arg ("via"),
|
||||
"@brief Adds the given via definition to the list of vias\n"
|
||||
) +
|
||||
gsi::method_ext ("each_conductor", &tech_begin_conductors, &tech_end_conductors,
|
||||
gsi::iterator_ext ("each_conductor", &tech_begin_conductors, &tech_end_conductors,
|
||||
"@brief Iterates the list of conductor definitions\n"
|
||||
) +
|
||||
gsi::method_ext ("clear_conductors", &tech_clear_conductors,
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ class PEX_TestClass < TestBase
|
|||
a = rn.create_node(RBA::RNode::VertexPort, 1)
|
||||
b = rn.create_node(RBA::RNode::Internal, 2)
|
||||
c = rn.create_node(RBA::RNode::PolygonPort, 3)
|
||||
d = rn.create_node(RBA::RNode::PolygonPort, 3, 17)
|
||||
|
||||
assert_equal(a.type, RBA::RNode::VertexPort)
|
||||
assert_equal(a.port_index, 1)
|
||||
|
|
@ -43,6 +44,7 @@ class PEX_TestClass < TestBase
|
|||
|
||||
assert_equal(b.to_s, "$2")
|
||||
assert_equal(c.to_s, "P3")
|
||||
assert_equal(d.to_s, "P3.17")
|
||||
|
||||
rab = rn.create_element(1.0, a, b)
|
||||
assert_equal(rab.a.object_id, a.object_id)
|
||||
|
|
@ -58,7 +60,7 @@ class PEX_TestClass < TestBase
|
|||
|
||||
assert_equal(b.each_element.collect(&:to_s).sort.join(";"), "R $2 P3 1;R $2 V1 0.5")
|
||||
assert_equal(rn.each_element.collect(&:to_s).sort.join(";"), "R $2 P3 1;R $2 V1 0.5")
|
||||
assert_equal(rn.each_node.collect(&:to_s).sort.join(";"), "$2;P3;V1")
|
||||
assert_equal(rn.each_node.collect(&:to_s).sort.join(";"), "$2;P3;P3.17;V1")
|
||||
|
||||
rn.simplify
|
||||
assert_equal(rn.to_s, "R P3 V1 1.5")
|
||||
|
|
@ -121,6 +123,135 @@ class PEX_TestClass < TestBase
|
|||
|
||||
end
|
||||
|
||||
def test_4_ExtractorTech
|
||||
|
||||
l1 = 1
|
||||
l2 = 2
|
||||
l3 = 3
|
||||
|
||||
tech = RBA::RExtractorTech::new
|
||||
|
||||
tech.skip_simplify = true
|
||||
assert_equal(tech.skip_simplify, true)
|
||||
tech.skip_simplify = false
|
||||
assert_equal(tech.skip_simplify, false)
|
||||
|
||||
via1 = RBA::RExtractorTechVia::new
|
||||
via1.bottom_conductor = l1
|
||||
via1.cut_layer = l2
|
||||
via1.top_conductor = l3
|
||||
via1.resistance = 2.0
|
||||
via1.merge_distance = 0.2
|
||||
|
||||
assert_equal(via1.bottom_conductor, l1)
|
||||
assert_equal(via1.cut_layer, l2)
|
||||
assert_equal(via1.top_conductor, l3)
|
||||
assert_equal(via1.resistance, 2.0)
|
||||
assert_equal(via1.merge_distance.to_s, "0.2")
|
||||
|
||||
tech.add_via(via1)
|
||||
assert_equal(tech.each_via.collect { |v| v.cut_layer }, [ l2 ])
|
||||
|
||||
tech.clear_vias
|
||||
assert_equal(tech.each_via.collect { |v| v.cut_layer }, [])
|
||||
|
||||
tech.add_via(via1)
|
||||
assert_equal(tech.each_via.collect { |v| v.cut_layer }, [ l2 ])
|
||||
|
||||
cond1 = RBA::RExtractorTechConductor::new
|
||||
cond1.layer = l1
|
||||
cond1.resistance = 0.5
|
||||
|
||||
assert_equal(cond1.layer, l1)
|
||||
assert_equal(cond1.resistance, 0.5)
|
||||
|
||||
cond2 = RBA::RExtractorTechConductor::new
|
||||
cond2.layer = l3
|
||||
cond2.resistance = 0.25
|
||||
|
||||
tech.add_conductor(cond2)
|
||||
assert_equal(tech.each_conductor.collect { |c| c.layer }, [ l3 ])
|
||||
|
||||
tech.clear_conductors
|
||||
assert_equal(tech.each_conductor.collect { |c| c.layer }, [])
|
||||
|
||||
tech.add_conductor(cond1)
|
||||
tech.add_conductor(cond2)
|
||||
assert_equal(tech.each_conductor.collect { |c| c.layer }, [ l1, l3 ])
|
||||
|
||||
end
|
||||
|
||||
# A complete, small example for a R network extraction
|
||||
|
||||
def test_5_NetEx
|
||||
|
||||
ly = RBA::Layout::new
|
||||
ly.read(File.join($ut_testsrc, "testdata", "pex", "netex_test1.gds"))
|
||||
|
||||
rex = RBA::RNetExtractor::new(ly.dbu)
|
||||
|
||||
tc = ly.top_cell
|
||||
|
||||
l1 = ly.layer(1, 0)
|
||||
l1p = ly.layer(1, 1)
|
||||
l1v = ly.layer(1, 2)
|
||||
l2 = ly.layer(2, 0)
|
||||
l3 = ly.layer(3, 0)
|
||||
l3p = ly.layer(3, 1)
|
||||
l3v = ly.layer(3, 2)
|
||||
|
||||
# That is coincidence, but it needs to be that way for the strings to match
|
||||
assert_equal(l1, 1)
|
||||
assert_equal(l2, 0)
|
||||
assert_equal(l3, 2)
|
||||
|
||||
geo = {}
|
||||
[ l1, l2, l3 ].each do |l|
|
||||
geo[l] = RBA::Region::new(tc.begin_shapes_rec(l))
|
||||
end
|
||||
|
||||
tech = RBA::RExtractorTech::new
|
||||
|
||||
via1 = RBA::RExtractorTechVia::new
|
||||
via1.bottom_conductor = l1
|
||||
via1.cut_layer = l2
|
||||
via1.top_conductor = l3
|
||||
via1.resistance = 2.0
|
||||
via1.merge_distance = 0.2
|
||||
|
||||
tech.add_via(via1)
|
||||
|
||||
cond1 = RBA::RExtractorTechConductor::new
|
||||
cond1.layer = l1
|
||||
cond1.resistance = 0.5
|
||||
|
||||
cond2 = RBA::RExtractorTechConductor::new
|
||||
cond2.layer = l3
|
||||
cond2.resistance = 0.25
|
||||
|
||||
tech.add_conductor(cond1)
|
||||
tech.add_conductor(cond2)
|
||||
|
||||
polygon_ports = { }
|
||||
polygon_ports[l1] = RBA::Region::new(tc.begin_shapes_rec(l1p)).each_merged.to_a
|
||||
polygon_ports[l3] = RBA::Region::new(tc.begin_shapes_rec(l3p)).each_merged.to_a
|
||||
|
||||
vertex_ports = { }
|
||||
vertex_ports[l1] = RBA::Region::new(tc.begin_shapes_rec(l1v)).each_merged.collect { |p| p.bbox.center }
|
||||
vertex_ports[l3] = RBA::Region::new(tc.begin_shapes_rec(l3v)).each_merged.collect { |p| p.bbox.center }
|
||||
|
||||
network = rex.extract(tech, geo, vertex_ports, polygon_ports)
|
||||
|
||||
assert_equal(network.to_s(true) + "\n", <<"END")
|
||||
R $2.1(9.3,-5.9;9.9,-5.3) P0.1(12.9,-5.9;13.5,-5.3) 2.25
|
||||
R $8.2(10,-3.5;10,-2.7) P0.2(12.9,-3.4;13.5,-2.8) 1
|
||||
R $2.1(9.3,-5.9;9.9,-5.3) V0.2(0.3,-5.7;0.5,-5.5) 55.75
|
||||
R $2.1(9.3,-5.9;9.9,-5.3) $8.2(10,-3.5;10,-2.7) 13.2813
|
||||
R $8.2(10,-3.5;10,-2.7) V0.1(5.2,0.4;5.2,0.4) 28.7812
|
||||
R V0.1(5.2,0.4;5.2,0.4) V0.2(0.3,-5.7;0.5,-5.5) 17.375
|
||||
END
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
load("test_epilogue.rb")
|
||||
|
|
|
|||
Loading…
Reference in New Issue