blob: 4eb7d3d113390b00ad55bcdd20c0efc49ea0dc9f [file] [log] [blame]
# 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