mirror of https://github.com/KLayout/klayout.git
123 lines
4.3 KiB
Plaintext
123 lines
4.3 KiB
Plaintext
|
|
# Moved implementation
|
|
|
|
source($drc_test_source)
|
|
target($drc_test_target)
|
|
|
|
if $drc_test_deep
|
|
deep
|
|
end
|
|
|
|
# properties on input
|
|
l1 = input(1, 0)
|
|
l2 = input(2, 0)
|
|
l3_wp = input(3, 0, enable_props)
|
|
l3_wp1_input = input(3, 0, select_props(1))
|
|
l3_wp2as1_input = input(3, 0, map_props({ 2 => 1 }))
|
|
l3 = input(3, 0)
|
|
l4_wp = input(4, 0, enable_props)
|
|
l4 = input(4, 0)
|
|
|
|
# derived properties
|
|
l3_wp1 = l3_wp.select_props(1)
|
|
l3_wp2as1 = l3_wp.map_props({ 2 => 1 })
|
|
l3_nowp = l3_wp.remove_props
|
|
|
|
# dump to output
|
|
|
|
l1.output(1, 0)
|
|
l2.output(2, 0)
|
|
l3.output(3, 0)
|
|
l4.output(4, 0)
|
|
|
|
l3_wp.output(10, 0)
|
|
l3_wp1.output(11, 0)
|
|
l3_wp2as1.output(12, 0)
|
|
l3_nowp.output(13, 0)
|
|
l3_wp1_input.output(14, 0)
|
|
l3_wp2as1_input.output(15, 0)
|
|
l4_wp.output(16, 0)
|
|
|
|
# booleans with properties constraints
|
|
|
|
l3_wp.and(l4_wp, props_eq + props_copy).output(20, 0)
|
|
l3_wp1.and(l4_wp, props_eq + props_copy).output(21, 0)
|
|
l3_wp2as1.and(l4_wp, props_eq + props_copy).output(22, 0)
|
|
l3_nowp.and(l4_wp, props_eq + props_copy).output(23, 0)
|
|
|
|
l3_wp.and(l4_wp, props_ne + props_copy).output(30, 0)
|
|
l3_wp1.and(l4_wp, props_ne + props_copy).output(31, 0)
|
|
l3_wp2as1.and(l4_wp, props_ne + props_copy).output(32, 0)
|
|
l3_nowp.and(l4_wp, props_ne + props_copy).output(33, 0)
|
|
|
|
l3_wp.and(l4_wp, props_copy).output(40, 0)
|
|
l3_wp1.and(l4_wp, props_copy).output(41, 0)
|
|
l3_wp2as1.and(l4_wp, props_copy).output(42, 0)
|
|
l3_nowp.and(l4_wp, props_copy).output(43, 0)
|
|
|
|
l3_wp.and(l4_wp).output(50, 0)
|
|
l3_wp1.and(l4_wp).output(51, 0)
|
|
l3_wp2as1.and(l4_wp).output(52, 0)
|
|
l3_nowp.and(l4_wp).output(53, 0)
|
|
|
|
|
|
connect(l1, l2)
|
|
|
|
l1.nets.output(100, 0)
|
|
l1.nets(self._netter).output(101, 0)
|
|
l1.nets(prop(1)).output(102, 0)
|
|
l1.nets(prop(nil)).output(103, 0)
|
|
|
|
x1 = l1.nets("X")
|
|
x1.output(110, 0)
|
|
l1.nets("TOP", "X").output(111, 0)
|
|
l1.nets("TOP", "NOTEXIST").output(112, 0)
|
|
l1.nets("NOTEXIST", "NOTEXIST").output(113, 0)
|
|
|
|
x2 = l1.nets(*netlist.nets_by_name("X"))
|
|
(x1 ^ x2).output(114, 0)
|
|
|
|
# checks with property constraints
|
|
|
|
l1_nets = l1.nets
|
|
|
|
l1_nets.space(1.0.um, projection).polygons.output(200, 0)
|
|
l1_nets.space(1.0.um, projection, props_eq + props_copy).polygons.output(201, 0)
|
|
l1_nets.space(1.0.um, projection, props_ne + props_copy).polygons.output(202, 0)
|
|
l1_nets.space(1.0.um, projection, props_copy).polygons.output(203, 0)
|
|
l1_nets.width(1.0.um, projection).polygons.output(204, 0)
|
|
l1_nets.width(1.0.um, projection, props_copy).polygons.output(205, 0)
|
|
l1_nets.space(1.0.um, projection, props_eq).polygons.output(206, 0)
|
|
l1_nets.space(1.0.um, projection, props_ne).polygons.output(207, 0)
|
|
|
|
l1_nets.drc(space(projection) < 1.0.um).polygons.output(210, 0)
|
|
l1_nets.drc(space(projection) < 1.0.um, props_eq + props_copy).polygons.output(211, 0)
|
|
l1_nets.drc(space(projection) < 1.0.um, props_ne + props_copy).polygons.output(212, 0)
|
|
l1_nets.drc(space(projection) < 1.0.um, props_copy).polygons.output(213, 0)
|
|
l1_nets.drc(width(projection) < 1.0.um).polygons.output(214, 0)
|
|
l1_nets.drc(width(projection) < 1.0.um, props_copy).polygons.output(215, 0)
|
|
l1_nets.drc(space(projection) < 1.0.um, props_eq).polygons.output(216, 0)
|
|
l1_nets.drc(space(projection) < 1.0.um, props_ne).polygons.output(217, 0)
|
|
|
|
# edge pair to edge/polygon conversion with properties
|
|
|
|
l1_nets.space(1.0.um, projection, props_copy).output(220, 0)
|
|
l1_nets.space(1.0.um, projection, props_copy).first_edges.output(221, 0)
|
|
l1_nets.space(1.0.um, projection, props_copy).second_edges.output(222, 0)
|
|
l1_nets.space(1.0.um, projection, props_copy).edges.output(223, 0)
|
|
l1_nets.space(1.0.um, projection, props_copy).edges.extended_in(10.nm).output(224, 0)
|
|
|
|
# sizing with properties
|
|
|
|
l1_nets_sized = l1_nets.sized(0.2.um)
|
|
l1_nets_sized.and(l1_nets_sized, props_ne + props_copy).output(300, 0) # overlap of different nets, same layer
|
|
l1_nets_sized.and(l1_nets_sized, props_ne).output(301, 0)
|
|
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um)).output(310, 0)
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_ne + props_copy).output(311, 0)
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_eq + props_copy).output(312, 0)
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_copy).output(313, 0)
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_ne).output(314, 0)
|
|
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_eq).output(315, 0)
|
|
|