| ||
//////////////////////////////////////////////
// Loigc Operation //
//////////////////////////////////////////////
//*Form Bulk layer
DRC:1 = EXTENT
BULK = SIZE DRC:1 BY 1.0
AA = iAA NOT DCTY
GT = iGT NOT DCTY
rpoly_m = RESP1 OR HRPDMY
rpoly = GT INTERACT rpoly_m
poly = GT NOT (rpoly OR AA)
rdiff = AA INTERACT RESAA
rpoly_T = rpoly NOT rpoly_m
rdiff_T = rdiff NOT RESAA
gate = AA AND GT
diff_a = AA NOT (GT OR rdiff)
diff = diff_a NOT SAB
//METAL_OPTION 62
//MIM_LOCATION 56
rmetal0_T = M0 NOT RESM0
rmetal0 = M0 AND RESM0
metal1 = M1 NOT MOMMK1
metal2 = M2 NOT MOMMK2
metal3 = M3 NOT MOMMK3
metal4 = M4 NOT MOMMK4
metal5 = M5 NOT (MOMMK5 OR MIM)
metal6 = COPY TM2
metal1_m = M1 AND MOMMK1
metal2_m = M2 AND MOMMK2
metal3_m = M3 AND MOMMK3
metal4_m = M4 AND MOMMK4
metal5_m = M5 AND (MOMMK5 OR MIM)
cont = COPY CT
via0 = COPY V0
via1 = COPY V1
via2 = COPY V2
via3 = COPY V3
via4 = COPY V4
via5 = COPY TV1
via5a = via5 AND MIM
via5b = via5 NOT MIM
//connection
//CONNECT metal0 metal0_r
CONNECT metal1 metal1_m
CONNECT metal2 metal2_m
CONNECT metal3 metal3_m
CONNECT metal4 metal4_m
CONNECT metal5 metal5_m
CONNECT poly gate
CONNECT metal1 poly BY cont
CONNECT metal1 diff BY cont
CONNECT metal1 rpoly_T BY cont
CONNECT metal1 rdiff_T BY cont
CONNECT metal1 rmetal0_T BY via0
CONNECT metal2 metal1 BY via1
CONNECT metal3 metal2 BY via2
CONNECT metal4 metal3 BY via3
CONNECT metal5 metal4 BY via4
CONNECT metal6 metal5 BY via5b
CONNECT metal6 MIM BY via5a
//check metals not connect to AA gate res mom
float_M1{
metal_no = NET AREA RATIO metal1 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
float_M2{
metal_no = NET AREA RATIO metal2 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
float_M3{
metal_no = NET AREA RATIO metal3 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
float_M4{
metal_no = NET AREA RATIO metal4 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
float_M5{
metal_no = NET AREA RATIO metal5 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
float_M6{
metal_no = NET AREA RATIO metal6 diff gate metal1_m metal2_m metal3_m metal4_m metal5_m rdiff_T rpoly_T rmetal0_T == 0 [!!AREA(diff)+!!AREA(gate)+!!AREA(metal1_m)+!!AREA(metal2_m)+!!AREA(metal3_m)+!!AREA(metal4_m)+!!AREA(metal5_m)+!!AREA(rdiff_T)+!!AREA(rpoly_T)+!!AREA(rmetal0_T)]
copy metal_no
}
//check via between top and bottom metal// jin jian cha xiang lin metal de kong //
check_ct{
via_all = copy cont
ct_co = (metal1 AND diff CONNECTED) OR (metal1 AND poly CONNECTED)
ct_co1 = ct_co INTERACT via_all
ct_co1a = ct_co NOT ct_co1
ct_co2 = ct_co1 NOT (via_all SIZE BY 0.21)
ct_co3= (ct_co2 SIZE BY -0.09) SIZE BY 0.09
error = ct_co3 OR ct_co1a
copy error
}
check_via1{
via_all = copy via1
via_co = metal2 AND metal1 CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.28)
via_co3 = (via_co2 SIZE BY -0.11) SIZE BY 0.11
error = via_co1a OR via_co3
copy error
}
check_via2{
via_all = copy via2
via_co = metal3 AND metal2 CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.28)
via_co3 = (via_co2 SIZE BY -0.11) SIZE BY 0.11
error = via_co1a OR via_co3
copy error
}
check_via3{
via_all = copy via3
via_co = metal4 AND metal3 CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.28)
via_co3 = (via_co2 SIZE BY -0.11) SIZE BY 0.11
error = via_co1a OR via_co3
copy error
}
check_via4{
via_all = copy via4
via_co = metal5 AND metal4 CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.28)
via_co3 = (via_co2 SIZE BY -0.11) SIZE BY 0.11
error = via_co1a OR via_co3
copy error
}
check_via5a{
via_all = copy via5a
via_co = metal6 AND MIM CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.35)
via_co3 = (via_co2 SIZE BY -0.18) SIZE BY 0.18
error = via_co1a OR via_co3
copy error
}
check_via5b{
via_all = copy via5b
via_co = metal6 AND metal5 CONNECTED
via_co1 = via_co INTERACT via_all
via_co1a = via_co NOT via_co1
via_co2 = via_co1 NOT (via_all SIZE BY 0.35)
via_co3 = (via_co2 SIZE BY -0.18) SIZE BY 0.18
error = via_co1a OR via_co3
copy error
}
check_single_CT{
via_all = copy cont
check_area = (metal1 AND diff) OR (metal1 AND poly)
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via1{
via_all = copy via1
check_area = metal1 AND metal2
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via2{
via_all = copy via2
check_area = metal2 AND metal3
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via3{
via_all = copy via3
check_area = metal3 AND metal4
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via4{
via_all = copy via4
check_area = metal4 AND metal5
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via5a{
via_all = copy via5a
check_area = metal5 AND MIM
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}
check_single_via5b{
via_all = copy via5b
check_area = metal5 AND metal6
check_via = via_all INSIDE check_area
check_area INTERACT check_via < 2
}