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


2023-03-10 11:36:05人工挂载ram clock的脚本2_j_part0_connect_ram_clk.tcl走来走去116.236.47.26

# 

#set j_ram [get_cells u_rams0/u_rd_acache_prp_ram/genblk1_ENC_D_2048x128_SS14/rf_2p_1__rf_2p_hsb1024x128m2b8wm0r1 ]
#set j_ram [get_selection ]
set j_ram [all_memories ]

set j_msg ""

foreach_in_collection j_obj $j_ram {

	set j_ram_name [get_attr $j_obj full_name ]
	set j_ram_clk_pin [get_pins -of $j_ram_name -filter "is_clock_pin == true" ]
	set j_ram_clk_pin_ori [get_attr [index_collection $j_ram_clk_pin 0 ] bbox ]
	set j_ram_clk_pin_x [lindex [lindex $j_ram_clk_pin_ori 0 ] 0 ]
	set j_ram_clk_pin_y [lindex [lindex $j_ram_clk_pin_ori 0 ] 1 ]

	set j_ram_clk_pin_name [get_attr $j_ram_clk_pin full_name ]
	puts "# INFO: $j_ram_clk_pin_name "
	set j_ram_icg [filter [all_fanin -flat -only_cells -to [index_collection $j_ram_clk_pin 0 ] ] "is_integrated_clock_gating_cell == true" ]
	set j_ram_icg_name [get_attr $j_ram_icg full_name ]
#	puts "DEBUG2 $j_ram_icg_name"
	set j_icg_E_driver [index_collection [all_fanin -pin_levels 1 -flat -to ${j_ram_icg_name}/E ] 1 ]
	set j_icg_E_driver_name [get_attr $j_icg_E_driver full_name ]
#	puts "DEBUG3 $j_icg_E_driver_name $j_ram_clk_pin_x $j_ram_clk_pin_y"

	set j_search_area "{[expr $j_ram_clk_pin_x - 200 ] [expr $j_ram_clk_pin_y - 200 ]} {[expr $j_ram_clk_pin_x + 200 ] [expr $j_ram_clk_pin_y + 200 ]}"
#	puts "DEBUG4 $j_search_area"
	set j_nearby_icg [get_objects_by_location -classes cell -hier -within $j_search_area -filter "is_ram_clk_point == true" ]
	set j_nearby_icg_name [get_attr $j_nearby_icg full_name ]
#	puts "DEBUG5 $j_nearby_icg_name "

	set j_distance 1000
	foreach j_obj2 $j_nearby_icg_name {
		set j_nearby_icg_bbox [get_attr $j_obj2 bbox ]
		set j_nearby_icg_x [lindex [lindex $j_nearby_icg_bbox 0 ] 0 ]
		set j_nearby_icg_y [lindex [lindex $j_nearby_icg_bbox 0 ] 1 ]
#		puts "DEBUG6 $j_nearby_icg_x $j_nearby_icg_y"
		set j_distance_new [expr [expr abs($j_nearby_icg_x - $j_ram_clk_pin_x) ] + [expr abs($j_nearby_icg_y - $j_ram_clk_pin_y) ] ]
		if { $j_distance_new < $j_distance } {
			set j_distance $j_distance_new
			set j_nearest_icg_name $j_obj2
		}
	}
#	puts "DEBUG7 $j_nearest_icg_name"
	set j_nearest_icg_CK_driver [index_collection [all_fanin -pin_levels 1 -flat -to ${j_nearest_icg_name}/CK ] 1 ]
	set j_nearest_icg_CK_driver_name [get_attr $j_nearest_icg_CK_driver full_name ]
	set j_nearest_icg_ori [get_attr $j_nearest_icg_name origin ]
#	puts "DEBUG8 $j_nearest_icg_CK_driver_name $j_nearest_icg_ori"

	set j_new_icg_name ${j_ram_name}_icg
	append j_msg "create_cell $j_new_icg_name PREICG_X12N_A9PP84TL_C14\n"
	append j_msg "move_objects -to \{$j_nearest_icg_ori\} \[get_cells $j_new_icg_name ]\n"
	append j_msg "connect_pin -incremental -driver $j_nearest_icg_CK_driver_name ${j_new_icg_name}/CK\n"
	append j_msg "connect_pin -incremental -driver $j_icg_E_driver_name ${j_new_icg_name}/E\n"
	append j_msg "connect_pin -incremental -driver U_PORT_BUFI_testmode/Y ${j_new_icg_name}/SE\n"
	append j_msg "connect_pin -incremental -driver ${j_new_icg_name}/ECK \{ $j_ram_clk_pin_name \}\n"
	append j_msg "\n"

}

puts $j_msg
eval $j_msg


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