mirror of https://github.com/KLayout/klayout.git
Updated 2019 01 07 (markdown)
parent
458cb7a4c8
commit
898d7bab89
|
|
@ -21,22 +21,22 @@ l2n = RBA::LayoutToNetlist::new(RBA::RecursiveShapeIterator::new(ly, tc, []))
|
||||||
|
|
||||||
puts "Making layers ..."
|
puts "Making layers ..."
|
||||||
|
|
||||||
rpoly = l2n.make_polygon_layer( ly.layer(1, 0 ) ) # GDS #1 -> poly
|
rpoly = l2n.make_polygon_layer( ly.layer(1, 0 ), "poly" ) # GDS #1 -> poly
|
||||||
rcont = l2n.make_polygon_layer( ly.layer(2, 0 ) ) # GDS #2 -> contact (poly or diff)
|
rcont = l2n.make_polygon_layer( ly.layer(2, 0 ), "cont" ) # GDS #2 -> contact (poly or diff)
|
||||||
rmetal1 = l2n.make_polygon_layer( ly.layer(3, 0 ) ) # GDS #3 -> metal 1
|
rmetal1 = l2n.make_polygon_layer( ly.layer(3, 0 ), "metal1" ) # GDS #3 -> metal 1
|
||||||
rmetal1_lbl = l2n.make_text_layer( ly.layer(103,0 ) ) # GDS #103 -> metal 1 labels
|
rmetal1_lbl = l2n.make_text_layer( ly.layer(103,0 ), "metal1_lbl" ) # GDS #103 -> metal 1 labels
|
||||||
rvia1 = l2n.make_polygon_layer( ly.layer(4, 0 ) ) # GDS #4 -> via 1
|
rvia1 = l2n.make_polygon_layer( ly.layer(4, 0 ), "via1" ) # GDS #4 -> via 1
|
||||||
rmetal2 = l2n.make_polygon_layer( ly.layer(5, 0 ) ) # GDS #5 -> metal 2
|
rmetal2 = l2n.make_polygon_layer( ly.layer(5, 0 ), "metal2" ) # GDS #5 -> metal 2
|
||||||
rmetal2_lbl = l2n.make_text_layer( ly.layer(105,0 ) ) # GDS #105 -> metal 2 labels
|
rmetal2_lbl = l2n.make_text_layer( ly.layer(105,0 ), "metal2_lbl" ) # GDS #105 -> metal 2 labels
|
||||||
rvia2 = l2n.make_polygon_layer( ly.layer(6, 0 ) ) # GDS #6 -> via 2
|
rvia2 = l2n.make_polygon_layer( ly.layer(6, 0 ), "via2" ) # GDS #6 -> via 2
|
||||||
rmetal3 = l2n.make_polygon_layer( ly.layer(7, 0 ) ) # GDS #7 -> metal 3
|
rmetal3 = l2n.make_polygon_layer( ly.layer(7, 0 ), "metal3" ) # GDS #7 -> metal 3
|
||||||
rmetal3_lbl = l2n.make_text_layer( ly.layer(107,0 ) ) # GDS #107 -> metal 3 labels
|
rmetal3_lbl = l2n.make_text_layer( ly.layer(107,0 ), "metal3_lbl" ) # GDS #107 -> metal 3 labels
|
||||||
rvia3 = l2n.make_polygon_layer( ly.layer(8, 0 ) ) # GDS #8 -> via 3
|
rvia3 = l2n.make_polygon_layer( ly.layer(8, 0 ), "via3" ) # GDS #8 -> via 3
|
||||||
rmetal4 = l2n.make_polygon_layer( ly.layer(9, 0 ) ) # GDS #9 -> metal 4
|
rmetal4 = l2n.make_polygon_layer( ly.layer(9, 0 ), "metal4" ) # GDS #9 -> metal 4
|
||||||
rmetal4_lbl = l2n.make_text_layer( ly.layer(109,0 ) ) # GDS #109 -> metal 4 labels
|
rmetal4_lbl = l2n.make_text_layer( ly.layer(109,0 ), "metal4_lbl" ) # GDS #109 -> metal 4 labels
|
||||||
rvia4 = l2n.make_polygon_layer( ly.layer(10, 0 ) ) # GDS #10 -> via 4
|
rvia4 = l2n.make_polygon_layer( ly.layer(10, 0 ), "via4" ) # GDS #10 -> via 4
|
||||||
rmetal5 = l2n.make_polygon_layer( ly.layer(11, 0 ) ) # GDS #11 -> metal 5
|
rmetal5 = l2n.make_polygon_layer( ly.layer(11, 0 ), "metal5" ) # GDS #11 -> metal 5
|
||||||
rmetal5_lbl = l2n.make_text_layer( ly.layer(111,0 ) ) # GDS #111 -> metal 5 labels
|
rmetal5_lbl = l2n.make_text_layer( ly.layer(111,0 ), "metal5_lbl" ) # GDS #111 -> metal 5 labels
|
||||||
|
|
||||||
puts "Connecting ..."
|
puts "Connecting ..."
|
||||||
|
|
||||||
|
|
@ -133,20 +133,20 @@ ly.read(File.join("testdata", "algo", "device_extract_l3.gds"))
|
||||||
|
|
||||||
l2n = RBA::LayoutToNetlist::new(RBA::RecursiveShapeIterator::new(ly, ly.top_cell, []))
|
l2n = RBA::LayoutToNetlist::new(RBA::RecursiveShapeIterator::new(ly, ly.top_cell, []))
|
||||||
|
|
||||||
rbulk = l2n.make_polygon_layer( ly.layer )
|
rbulk = l2n.make_polygon_layer( ly.layer , "bulk" )
|
||||||
rnwell = l2n.make_polygon_layer( ly.layer(1, 0) )
|
rnwell = l2n.make_polygon_layer( ly.layer(1, 0), "nwell" )
|
||||||
ractive = l2n.make_polygon_layer( ly.layer(2, 0) )
|
ractive = l2n.make_polygon_layer( ly.layer(2, 0), "active" )
|
||||||
rpoly = l2n.make_polygon_layer( ly.layer(3, 0) )
|
rpoly = l2n.make_polygon_layer( ly.layer(3, 0), "poly" )
|
||||||
rpoly_lbl = l2n.make_text_layer( ly.layer(3, 1) )
|
rpoly_lbl = l2n.make_text_layer( ly.layer(3, 1), "poly_lbl" )
|
||||||
rdiff_cont = l2n.make_polygon_layer( ly.layer(4, 0) )
|
rdiff_cont = l2n.make_polygon_layer( ly.layer(4, 0), "diff_cont" )
|
||||||
rpoly_cont = l2n.make_polygon_layer( ly.layer(5, 0) )
|
rpoly_cont = l2n.make_polygon_layer( ly.layer(5, 0), "poly_cont" )
|
||||||
rmetal1 = l2n.make_polygon_layer( ly.layer(6, 0) )
|
rmetal1 = l2n.make_polygon_layer( ly.layer(6, 0), "metal1" )
|
||||||
rmetal1_lbl = l2n.make_text_layer( ly.layer(6, 1) )
|
rmetal1_lbl = l2n.make_text_layer( ly.layer(6, 1), "metal1_lbl" )
|
||||||
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0) )
|
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0), "via1" )
|
||||||
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0) )
|
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0), "metal2" )
|
||||||
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1) )
|
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1), "metal2_lbl" )
|
||||||
rpplus = l2n.make_polygon_layer( ly.layer(10, 0) )
|
rpplus = l2n.make_polygon_layer( ly.layer(10, 0), "pplus" )
|
||||||
rnplus = l2n.make_polygon_layer( ly.layer(11, 0) )
|
rnplus = l2n.make_polygon_layer( ly.layer(11, 0), "nplus" )
|
||||||
|
|
||||||
ractive_in_nwell = ractive & rnwell
|
ractive_in_nwell = ractive & rnwell
|
||||||
rpactive = ractive_in_nwell & rpplus
|
rpactive = ractive_in_nwell & rpplus
|
||||||
|
|
@ -154,12 +154,18 @@ rntie = ractive_in_nwell & rnplus
|
||||||
rpgate = rpactive & rpoly
|
rpgate = rpactive & rpoly
|
||||||
rpsd = rpactive - rpgate
|
rpsd = rpactive - rpgate
|
||||||
|
|
||||||
|
l2n.register(rntie, "ntie")
|
||||||
|
l2n.register(rpsd, "psd")
|
||||||
|
|
||||||
ractive_outside_nwell = ractive - rnwell
|
ractive_outside_nwell = ractive - rnwell
|
||||||
rnactive = ractive_outside_nwell & rnplus
|
rnactive = ractive_outside_nwell & rnplus
|
||||||
rptie = ractive_outside_nwell & rpplus
|
rptie = ractive_outside_nwell & rpplus
|
||||||
rngate = rnactive & rpoly
|
rngate = rnactive & rpoly
|
||||||
rnsd = rnactive - rngate
|
rnsd = rnactive - rngate
|
||||||
|
|
||||||
|
l2n.register(rptie, "ptie")
|
||||||
|
l2n.register(rnsd, "nsd")
|
||||||
|
|
||||||
# PMOS transistor device extraction
|
# PMOS transistor device extraction
|
||||||
pmos_ex = RBA::DeviceExtractorMOS4Transistor::new("PMOS")
|
pmos_ex = RBA::DeviceExtractorMOS4Transistor::new("PMOS")
|
||||||
l2n.extract_devices(pmos_ex, { "SD" => rpsd, "G" => rpgate, "P" => rpoly, "W" => rnwell })
|
l2n.extract_devices(pmos_ex, { "SD" => rpsd, "G" => rpgate, "P" => rpoly, "W" => rnwell })
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue