File: drcSimpleTests_70.drc

package info (click to toggle)
klayout 0.30.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 292,204 kB
  • sloc: cpp: 2,068,428; ruby: 47,823; xml: 26,924; python: 14,404; sh: 1,812; tcl: 212; perl: 170; makefile: 112; ansic: 42
file content (122 lines) | stat: -rw-r--r-- 4,393 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

# 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)