Updated 2019 01 07 (markdown)

Matthias Köfferlein 2019-01-21 00:38:00 +01:00
parent 458cb7a4c8
commit 898d7bab89
1 changed files with 36 additions and 30 deletions

@ -21,22 +21,22 @@ l2n = RBA::LayoutToNetlist::new(RBA::RecursiveShapeIterator::new(ly, tc, []))
puts "Making layers ..."
rpoly = l2n.make_polygon_layer( ly.layer(1, 0 ) ) # GDS #1 -> poly
rcont = l2n.make_polygon_layer( ly.layer(2, 0 ) ) # GDS #2 -> contact (poly or diff)
rmetal1 = l2n.make_polygon_layer( ly.layer(3, 0 ) ) # GDS #3 -> metal 1
rmetal1_lbl = l2n.make_text_layer( ly.layer(103,0 ) ) # GDS #103 -> metal 1 labels
rvia1 = l2n.make_polygon_layer( ly.layer(4, 0 ) ) # GDS #4 -> via 1
rmetal2 = l2n.make_polygon_layer( ly.layer(5, 0 ) ) # GDS #5 -> metal 2
rmetal2_lbl = l2n.make_text_layer( ly.layer(105,0 ) ) # GDS #105 -> metal 2 labels
rvia2 = l2n.make_polygon_layer( ly.layer(6, 0 ) ) # GDS #6 -> via 2
rmetal3 = l2n.make_polygon_layer( ly.layer(7, 0 ) ) # GDS #7 -> metal 3
rmetal3_lbl = l2n.make_text_layer( ly.layer(107,0 ) ) # GDS #107 -> metal 3 labels
rvia3 = l2n.make_polygon_layer( ly.layer(8, 0 ) ) # GDS #8 -> via 3
rmetal4 = l2n.make_polygon_layer( ly.layer(9, 0 ) ) # GDS #9 -> metal 4
rmetal4_lbl = l2n.make_text_layer( ly.layer(109,0 ) ) # GDS #109 -> metal 4 labels
rvia4 = l2n.make_polygon_layer( ly.layer(10, 0 ) ) # GDS #10 -> via 4
rmetal5 = l2n.make_polygon_layer( ly.layer(11, 0 ) ) # GDS #11 -> metal 5
rmetal5_lbl = l2n.make_text_layer( ly.layer(111,0 ) ) # GDS #111 -> metal 5 labels
rpoly = l2n.make_polygon_layer( ly.layer(1, 0 ), "poly" ) # GDS #1 -> poly
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 ), "metal1" ) # GDS #3 -> metal 1
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 ), "via1" ) # GDS #4 -> via 1
rmetal2 = l2n.make_polygon_layer( ly.layer(5, 0 ), "metal2" ) # GDS #5 -> metal 2
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 ), "via2" ) # GDS #6 -> via 2
rmetal3 = l2n.make_polygon_layer( ly.layer(7, 0 ), "metal3" ) # GDS #7 -> metal 3
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 ), "via3" ) # GDS #8 -> via 3
rmetal4 = l2n.make_polygon_layer( ly.layer(9, 0 ), "metal4" ) # GDS #9 -> metal 4
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 ), "via4" ) # GDS #10 -> via 4
rmetal5 = l2n.make_polygon_layer( ly.layer(11, 0 ), "metal5" ) # GDS #11 -> metal 5
rmetal5_lbl = l2n.make_text_layer( ly.layer(111,0 ), "metal5_lbl" ) # GDS #111 -> metal 5 labels
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, []))
rbulk = l2n.make_polygon_layer( ly.layer )
rnwell = l2n.make_polygon_layer( ly.layer(1, 0) )
ractive = l2n.make_polygon_layer( ly.layer(2, 0) )
rpoly = l2n.make_polygon_layer( ly.layer(3, 0) )
rpoly_lbl = l2n.make_text_layer( ly.layer(3, 1) )
rdiff_cont = l2n.make_polygon_layer( ly.layer(4, 0) )
rpoly_cont = l2n.make_polygon_layer( ly.layer(5, 0) )
rmetal1 = l2n.make_polygon_layer( ly.layer(6, 0) )
rmetal1_lbl = l2n.make_text_layer( ly.layer(6, 1) )
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0) )
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0) )
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1) )
rpplus = l2n.make_polygon_layer( ly.layer(10, 0) )
rnplus = l2n.make_polygon_layer( ly.layer(11, 0) )
rbulk = l2n.make_polygon_layer( ly.layer , "bulk" )
rnwell = l2n.make_polygon_layer( ly.layer(1, 0), "nwell" )
ractive = l2n.make_polygon_layer( ly.layer(2, 0), "active" )
rpoly = l2n.make_polygon_layer( ly.layer(3, 0), "poly" )
rpoly_lbl = l2n.make_text_layer( ly.layer(3, 1), "poly_lbl" )
rdiff_cont = l2n.make_polygon_layer( ly.layer(4, 0), "diff_cont" )
rpoly_cont = l2n.make_polygon_layer( ly.layer(5, 0), "poly_cont" )
rmetal1 = l2n.make_polygon_layer( ly.layer(6, 0), "metal1" )
rmetal1_lbl = l2n.make_text_layer( ly.layer(6, 1), "metal1_lbl" )
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0), "via1" )
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0), "metal2" )
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1), "metal2_lbl" )
rpplus = l2n.make_polygon_layer( ly.layer(10, 0), "pplus" )
rnplus = l2n.make_polygon_layer( ly.layer(11, 0), "nplus" )
ractive_in_nwell = ractive & rnwell
rpactive = ractive_in_nwell & rpplus
@ -154,12 +154,18 @@ rntie = ractive_in_nwell & rnplus
rpgate = rpactive & rpoly
rpsd = rpactive - rpgate
l2n.register(rntie, "ntie")
l2n.register(rpsd, "psd")
ractive_outside_nwell = ractive - rnwell
rnactive = ractive_outside_nwell & rnplus
rptie = ractive_outside_nwell & rpplus
rngate = rnactive & rpoly
rnsd = rnactive - rngate
l2n.register(rptie, "ptie")
l2n.register(rnsd, "nsd")
# PMOS transistor device extraction
pmos_ex = RBA::DeviceExtractorMOS4Transistor::new("PMOS")
l2n.extract_devices(pmos_ex, { "SD" => rpsd, "G" => rpgate, "P" => rpoly, "W" => rnwell })