|  | # Copyright (C) 2017-2020  The Project X-Ray Authors | 
|  | # | 
|  | # Use of this source code is governed by a ISC-style | 
|  | # license that can be found in the LICENSE file or at | 
|  | # https://opensource.org/licenses/ISC | 
|  | # | 
|  | # SPDX-License-Identifier: ISC | 
|  | set blocknb [lindex $argv 0] | 
|  | set start [expr int([lindex $argv 1])] | 
|  | set stop [expr int([lindex $argv 2])] | 
|  |  | 
|  | create_project -force -part $::env(XRAY_PART) $blocknb $blocknb | 
|  | set_property design_mode PinPlanning [current_fileset] | 
|  | open_io_design -name io_1 | 
|  |  | 
|  | #set_param tcl.collectionResultDisplayLimit 0 | 
|  | set_param messaging.disableStorage 1 | 
|  |  | 
|  | set root_fp [open "root_${blocknb}.csv" w] | 
|  | #puts $root_fp "filetype,subtype,filename" | 
|  |  | 
|  | set tiles [get_tiles] | 
|  |  | 
|  | create_pblock exclude_roi | 
|  | foreach roi "$::env(XRAY_EXCLUDE_ROI_TILEGRID)" { | 
|  | puts "ROI: $roi" | 
|  | resize_pblock [get_pblocks exclude_roi] -add "$roi" | 
|  | } | 
|  |  | 
|  | set not_allowed_sites [get_sites -of_objects [get_pblocks exclude_roi]] | 
|  | set not_allowed_tiles [get_tiles -of_objects $not_allowed_sites] | 
|  |  | 
|  | for {set j $start } { $j < $stop } { incr j } { | 
|  |  | 
|  | set tile [lindex $tiles $j] | 
|  |  | 
|  | # If tile is not allowed, skip it | 
|  | set res [lsearch $not_allowed_tiles $tile] | 
|  | if { $res != -1 } { | 
|  | set ignored 1 | 
|  | } else { | 
|  | set ignored 0 | 
|  | } | 
|  |  | 
|  | set fname tile_$tile.json5 | 
|  | set tile_type [get_property TYPE $tile] | 
|  | puts $root_fp "tile,$tile_type,$fname" | 
|  |  | 
|  | set fp [open "${fname}" w] | 
|  | puts $fp "\{" | 
|  | puts $fp "\t\"tile\": \"$tile\"," | 
|  | puts $fp "\t\"ignored\": \"$ignored\"," | 
|  | # tile properties: | 
|  | # CLASS COLUMN DEVICE_ID FIRST_SITE_ID GRID_POINT_X GRID_POINT_Y INDEX | 
|  | # INT_TILE_X INT_TILE_Y IS_CENTER_TILE IS_DCM_TILE IS_GT_CLOCK_SITE_TILE | 
|  | # IS_GT_SITE_TILE NAME NUM_ARCS NUM_SITES ROW SLR_REGION_ID | 
|  | # TILE_PATTERN_IDX TILE_TYPE TILE_TYPE_INDEX TILE_X TILE_Y TYPE | 
|  | puts $fp "\t\"type\": \"$tile_type\"," | 
|  | puts $fp "\t\"x\": [get_property GRID_POINT_X $tile]," | 
|  | puts $fp "\t\"y\": [get_property GRID_POINT_Y $tile]," | 
|  | puts $fp "\t\"sites\": \[" | 
|  | foreach site [get_sites -of_objects $tile] { | 
|  | # site properties: | 
|  | # ALTERNATE_SITE_TYPES CLASS CLOCK_REGION IS_BONDED IS_CLOCK_BUFFER | 
|  | # IS_CLOCK_PAD IS_GLOBAL_CLOCK_BUFFER IS_GLOBAL_CLOCK_PAD IS_PAD | 
|  | # IS_REGIONAL_CLOCK_BUFFER IS_REGIONAL_CLOCK_PAD IS_RESERVED IS_TEST | 
|  | # IS_USED MANUAL_ROUTING NAME NUM_ARCS NUM_BELS NUM_INPUTS NUM_OUTPUTS | 
|  | # NUM_PINS PRIMITIVE_COUNT PROHIBIT PROHIBIT_FROM_PERSIST RPM_X RPM_Y | 
|  | # SITE_PIPS SITE_TYPE | 
|  |  | 
|  | puts $fp "\t\t\{" | 
|  | puts $fp "\t\t\t\"site\":\"$site\"," | 
|  | puts $fp "\t\t\t\"type\":\"[get_property SITE_TYPE $site]\"," | 
|  | puts $fp "\t\t\t\"site_pins\": \[" | 
|  | foreach site_pin [get_site_pins -of_objects $site] { | 
|  | # site_pin properties: | 
|  | # CLASS DIRECTION INDEX INDEX_IN_BUS INDEX_IN_SITE INDEX_IN_TILE IS_BAD | 
|  | # IS_INPUT IS_OUTPUT IS_PART_OF_BUS IS_TEST IS_USED NAME SITE_ID | 
|  | # SPEED_INDEX | 
|  | puts $fp "\t\t\t\{" | 
|  | puts $fp "\t\t\t\t\"site_pin\":\"$site_pin\"," | 
|  |  | 
|  | set site_pin_speed_model_index [get_property SPEED_INDEX $site_pin] | 
|  | puts $fp "\t\t\t\t\"speed_model_index\":\"$site_pin_speed_model_index\"," | 
|  |  | 
|  | set dir [get_property DIRECTION $site_pin] | 
|  | puts $fp "\t\t\t\t\"direction\":\"$dir\"," | 
|  | set site_pin_node [get_nodes -of_objects $site_pin] | 
|  | if {[llength $site_pin_node] == 0} { | 
|  | puts $fp "\t\t\t\t\"node\":null," | 
|  | } else { | 
|  | puts $fp "\t\t\t\t\"node\":\"$site_pin_node\"," | 
|  | } | 
|  | puts $fp "\t\t\t\}," | 
|  | } | 
|  | puts $fp "\t\t\t\]," | 
|  | puts $fp "\t\t\t\"site_pips\": \[" | 
|  | foreach site_pip [get_site_pips -of_objects $site] { | 
|  | puts $fp "\t\t\t\{" | 
|  | # site_pips properties: | 
|  | # CLASS FROM_PIN IS_FIXED IS_USED NAME SITE TO_PIN | 
|  | puts $fp "\t\t\t\t\"site_pip\":\"$site_pip\"," | 
|  | puts $fp "\t\t\t\t\"to_pin\":\"[get_property TO_PIN $site_pip]\"," | 
|  | puts $fp "\t\t\t\t\"from_pin\":\"[get_property FROM_PIN $site_pip]\"," | 
|  | puts $fp "\t\t\t\}," | 
|  | } | 
|  | puts $fp "\t\t\t\]," | 
|  |  | 
|  | puts $fp "\t\t\t\"package_pins\": \[" | 
|  | foreach package_pin [get_package_pins -of_objects $site] { | 
|  | puts $fp "\t\t\t\t\{" | 
|  | puts $fp "\t\t\t\t\t\"package_pin\":\"$package_pin\"," | 
|  | puts $fp "\t\t\t\t\}," | 
|  | } | 
|  | puts $fp "\t\t\t\]," | 
|  |  | 
|  | puts $fp "\t\t\}," | 
|  | } | 
|  | puts $fp "\t\]," | 
|  | puts $fp "\t\"pips\": \[" | 
|  | foreach pip [get_pips -of_objects $tile] { | 
|  | # pip properties: | 
|  | # CAN_INVERT CLASS IS_BUFFERED_2_0 IS_BUFFERED_2_1 IS_DIRECTIONAL | 
|  | # IS_EXCLUDED_PIP IS_FIXED_INVERSION IS_INVERTED IS_PSEUDO IS_SITE_PIP | 
|  | # IS_TEST_PIP NAME SPEED_INDEX TILE | 
|  | puts $fp "\t\t\{" | 
|  | puts $fp "\t\t\t\"pip\":\"$pip\"," | 
|  |  | 
|  | set pip_speed_model_index [get_property SPEED_INDEX $pip] | 
|  | puts $fp "\t\t\t\"speed_model_index\":\"$pip_speed_model_index\"," | 
|  | puts $fp "\t\t\t\"src_wire\":\"[get_wires -uphill -of_objects $pip]\"," | 
|  | puts $fp "\t\t\t\"dst_wire\":\"[get_wires -downhill -of_objects $pip]\"," | 
|  | puts $fp "\t\t\t\"is_pseudo\":\"[get_property IS_PSEUDO $pip]\"," | 
|  | puts $fp "\t\t\t\"is_directional\":\"[get_property IS_DIRECTIONAL $pip]\"," | 
|  | puts $fp "\t\t\t\"can_invert\":\"[get_property CAN_INVERT $pip]\"," | 
|  | puts $fp "\t\t\}," | 
|  | } | 
|  | puts $fp "\t\]," | 
|  |  | 
|  | puts $fp "\t\"wires\": \[" | 
|  | foreach wire [get_wires -of_objects $tile] { | 
|  | # wire properties: | 
|  | # CLASS COST_CODE ID_IN_TILE_TYPE IS_CONNECTED IS_INPUT_PIN IS_OUTPUT_PIN | 
|  | # IS_PART_OF_BUS NAME NUM_DOWNHILL_PIPS NUM_INTERSECTS NUM_PIPS | 
|  | # NUM_TILE_PORTS NUM_UPHILL_PIPS SPEED_INDEX TILE_NAME TILE_PATTERN_OFFSET | 
|  | puts $fp "\t\t\{" | 
|  | puts $fp "\t\t\t\"wire\":\"$wire\"," | 
|  |  | 
|  | set wire_speed_model_index [get_property SPEED_INDEX $wire] | 
|  | puts $fp "\t\t\t\t\"speed_model_index\":\"$wire_speed_model_index\"," | 
|  | puts $fp "\t\t\}," | 
|  | } | 
|  | puts $fp "\t\]," | 
|  | puts $fp "\}" | 
|  | close $fp | 
|  | } | 
|  |  | 
|  | close $root_fp |