
proc route_via {net nodes} {
	set net [get_nets $net]
	set fixed_route [get_nodes -of_objects [get_site_pins -filter {DIRECTION == OUT} -of_objects $net]]
	lappend nodes [get_nodes -of_objects [get_site_pins -filter {DIRECTION == IN} -of_objects $net]]

	puts ""
	puts "Routing net $net:"

	foreach to_node $nodes {
		set to_node [get_nodes -of_objects [get_wires $to_node]]
		set from_node [lindex $fixed_route end]
		set route [find_routing_path -quiet -from $from_node -to $to_node]
		if {$route == ""} {
			puts "  $from_node -> $to_node: no route found - assuming direct PIP"
			lappend fixed_route $to_node
		} {
			puts "  $from_node -> $to_node: $route"
			set fixed_route [concat $fixed_route [lrange $route 1 end]]
		}
		set_property -quiet FIXED_ROUTE $fixed_route $net
	}

	set_property -quiet FIXED_ROUTE $fixed_route $net
	puts ""
}

proc tile_wire_pairs {tile1 tile2} {
	set tile1 [get_tiles $tile1]
	set tile2 [get_tiles $tile2]

	foreach wire1 [lsort [get_wires -of_objects $tile1]] {
		set wire2 [get_wires -quiet -filter "TILE_NAME == $tile2" -of_objects [get_nodes -quiet -of_objects $wire1]]
		if {$wire2 != ""} {puts "$wire1 $wire2"}
	}
}

proc randsample_list {num lst} {
	set rlst {}
	for {set i 0} {$i<$num} {incr i} {
		set j [expr {int(rand()*[llength $lst])}]
		lappend rlst [lindex $lst $j]
		set lst [lreplace $lst $j $j]
	}
	return $rlst
}

proc randplace_pblock {num pblock} {
	set sites [randsample_list $num [get_sites -filter {SITE_TYPE == SLICEL || SITE_TYPE == SLICEM} -of_objects [get_pblocks $pblock]]]
	set cells [randsample_list $num [get_cells -hierarchical -filter "PBLOCK == [get_pblocks $pblock] && REF_NAME == LUT6"]]
	for {set i 0} {$i<$num} {incr i} {
		set site [lindex $sites $i]
		set cell [lindex $cells $i]
		set_property LOC $site $cell
	}
}

proc roi_tiles {} {
	return [get_tiles -filter "GRID_POINT_X >= $::env(XRAY_ROI_GRID_X1) && \
			GRID_POINT_X < $::env(XRAY_ROI_GRID_X2) && \
			GRID_POINT_Y >= $::env(XRAY_ROI_GRID_Y1) && \
			GRID_POINT_Y < $::env(XRAY_ROI_GRID_Y2)"]
}

proc pblock_tiles {pblock} {
	set clb_tiles [get_tiles -of_objects [get_sites -of_objects [get_pblocks $pblock]]]
	set int_tiles [get_tiles [regsub -all {CLBL[LM]} $clb_tiles INT]]
	return [get_tiles "$clb_tiles $int_tiles"]
}

proc lintersect {lst1 lst2} {
	set rlst {}
	foreach el $lst1 {
		set idx [lsearch $lst2 $el]
		if {$idx >= 0} {lappend rlst $el}
	}
	return $rlst
}

proc putl {lst} {
	foreach line $lst {puts $line}
}

