布局布线和时序分析
笔记本


2024-08-07 23:36:34CHECK ESD VIA in ICC2走来走去223.167.127.88

if { [get_drc_error_data -quiet esd_pg_via ] != "" } { remove_drc_error_data -force esd_pg_via }
create_drc_error_data -name esd_pg_via -checker_name third_party
create_drc_error_type -name esd -error_data esd_pg_via -error_class basic -brief_info "check esd miss via"

set via_flag 0
echo "" > miss_via.rpt
echo "" > clamp_check_via_summary.rpt
echo "" > clamp_check_density_summary.rpt

foreach_in_coll j_obj [get_cells -hier -filter "ref_name == PESDCORE4LV_08_08_NT_EE_V" ] {

	set j_inst_name [get_attr $j_obj full_name ]
	set j_inst_boundary [get_attr $j_obj boundary ]
	set j_inst_area [get_attr $j_obj area ]
	set j_p_name [get_attr [get_nets -of $j_inst_name/VDD ] name ]
	set j_g_name [get_attr [get_nets -of $j_inst_name/VSS ] name ]

# REPORT DENSITY
	puts ""
    puts "###############################################"
	puts "#INST:$j_inst_name"
	foreach j_layer { C7 K1 K2 G1 G2 } {
		set j_area_total 0
		foreach j_pg " $j_p_name $j_g_name " {
			set j_shapes [get_shapes -quiet -filter "layer_name == $j_layer && net == [get_nets $j_pg]" -intersect $j_inst_boundary ]
			set j_shapes [add_to_collection $j_shapes [get_shapes -quiet -filter "layer_name == $j_layer && net == [get_nets $j_pg]" -within $j_inst_boundary ] ]
			foreach_in_coll j_s $j_shapes {
				set j_s_bbox [get_attr $j_s bbox ]
				set j_area [compute_area -objects [compute_polygons -objects1 $j_s_bbox -objects2 $j_inst_boundary -operation AND ] ]
				set j_area_total [expr $j_area_total + $j_area ]
			}
		}
		set j_den [format %.2f [expr $j_area_total / $j_inst_area * 100 ] ]
		puts "#density_$j_layer: $j_den%"
		eval "set den_$j_layer $j_den%"
	}
    puts "###############################################"
    set now [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]
    echo "[get_attr [current_design ] name] $j_inst_name $den_K1 $den_K2 $den_G1 $den_G2 $now" >> clamp_check_density_summary.rpt

# CHECK VIA
	foreach j_pg " $j_p_name $j_g_name " {
		foreach {j_layer_b j_cut j_layer_u} { C7 CK K1 K1 U1 K2 K2 KG G1 G1 T1 G2 } {
			set j_shapes_b [get_shapes -quiet -filter "layer_name == $j_layer_b && net == [get_nets $j_pg ]" -intersect $j_inst_boundary ]
			set j_shapes_b [add_to_collection $j_shapes_b [get_shapes -quiet -filter "layer_name == $j_layer_b && net == [get_nets $j_pg ]" -within $j_inst_boundary ] ]
			set j_boundary_b [get_attr $j_shapes_b boundary ]
			set j_shapes_u [get_shapes -quiet -filter "layer_name == $j_layer_u && net == [get_nets $j_pg ]" -intersect $j_inst_boundary ]
			set j_shapes_u [add_to_collection $j_shapes_u [get_shapes -quiet -filter "layer_name == $j_layer_u && net == [get_nets $j_pg ]" -within $j_inst_boundary ] ]
			set j_boundary_u [get_attr $j_shapes_u boundary ]
			foreach j_b $j_boundary_b {
				foreach j_u $j_boundary_u {
					set j_c [compute_polygons -objects1 $j_b -objects2 $j_u -operation AND ]
					set j_c_bbox [get_attr -quiet $j_c bbox ]
					if { $j_c_bbox == {**INVALID**} } { continue }
					if { [get_vias -quiet -filter "cut_layer_names == $j_cut && net == [get_nets $j_pg ]" -within $j_c_bbox ] == "" } {
						echo "miss via $j_cut $j_pg $j_c_bbox" >> miss_via.rpt
						create_drc_error -error_data esd_pg_via -error_type esd -layers $j_cut -polygons "$j_c_bbox"
						set via_flag 1
					}
				}
			}
		}
	}
	puts ""
    if {$via_flag == "1"} {
        puts "###############################################"
        puts "#INST:$j_inst_name"
        puts "#MISS VIA PLEASE CHECK miss_via.rpt and open \"esd_pg_via\" in Error Browser"
        puts "###############################################"
        set now [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]
        echo "[get_attr [current_design ] name] $j_inst_name CLAMP VIA MISS $now" >> clamp_check_via_summary.rpt
    } else {
        puts "###############################################"
        puts "#INST:$j_inst_name"
        puts "check VIA PASS"
        puts "###############################################"

    }
}

puts ""
puts "###############################################"
puts "#DETAILS IN:"
puts "#[pwd]/miss_via.rpt"
puts "#[pwd]/clamp_check_via_summary.rpt"
puts "#[pwd]/clamp_check_density_summary.rpt"
puts "###############################################"
puts ""



回到首页时钟 , 联系信箱:yzbox#163.com(把#换成@) 粤ICP备18155639号