2018-08-24 03:18:36 +02:00
proc pin_info { pin } {
set cell [ get_cells - of_objects $pin ]
set bel [ get_bels - of_objects $cell ]
set site [ get_sites - of_objects $bel ]
return " $ s i t e $ b e l "
}
proc pin_bel { pin } {
set cell [ get_cells - of_objects $pin ]
set bel [ get_bels - of_objects $cell ]
return $bel
}
proc build_design_full { } {
create_project - force - part $::env ( XRAY_PART ) design design
read_verilog ../ top.v
2018-09-11 20:51:11 +02:00
read_verilog ../ ../ src/ picorv32.v
2018-08-24 03:18:36 +02:00
synth_design - top top
2018-09-11 20:51:11 +02:00
# set_property LOCK_PINS {I0:A1 I1:A2 I2:A3 I3:A4 I4:A5 I5:A6} \
# [get_cells -quiet -filter {REF_NAME == LUT6} -hierarchical]
2018-08-24 03:18:36 +02:00
set_property - dict " P A C K A G E _ P I N $ : : e n v ( X R A Y _ P I N _ 0 0 ) I O S T A N D A R D L V C M O S 3 3 " [ get_ports clk]
set_property - dict " P A C K A G E _ P I N $ : : e n v ( X R A Y _ P I N _ 0 1 ) I O S T A N D A R D L V C M O S 3 3 " [ get_ports stb]
set_property - dict " P A C K A G E _ P I N $ : : e n v ( X R A Y _ P I N _ 0 2 ) I O S T A N D A R D L V C M O S 3 3 " [ get_ports di]
set_property - dict " P A C K A G E _ P I N $ : : e n v ( X R A Y _ P I N _ 0 3 ) I O S T A N D A R D L V C M O S 3 3 " [ get_ports do]
set_property CFGBVS VCCO [ current_design ]
set_property CONFIG_VOLTAGE 3.3 [ current_design ]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [ current_design ]
set_property CLOCK_DEDICATED_ROUTE FALSE [ get_nets clk_IBUF]
place_design
route_design
write_checkpoint - force design.dcp
write_bitstream - force design.bit
}
proc build_design_synth { } {
create_project - force - part $::env ( XRAY_PART ) design design
read_verilog ../ top.v
read_verilog ../ picorv32.v
synth_design - top top
}
# WARNING: [Common 17-673] Cannot get value of property 'FORWARD' because this property is not valid in conjunction with other property setting on this object.
# WARNING: [Common 17-673] Cannot get value of property 'REVERSE' because this property is not valid in conjunction with other property setting on this object.
proc speed_models1 { } {
set outdir " . "
set fp [ open " $ o u t d i r / s p e e d _ m o d e l . t x t " w]
# list_property [lindex [get_speed_models] 0]
set speed_models [ get_speed_models ]
set properties [ list_property [ lindex $speed_models 0 ] ]
# "CLASS DELAY FAST_MAX FAST_MIN IS_INSTANCE_SPECIFIC NAME NAME_LOGICAL SLOW_MAX SLOW_MIN SPEED_INDEX TYPE"
puts $fp $properties
set needspace 0
foreach speed_model $speed_models {
foreach property $properties {
if $needspace {
puts - nonewline $fp " "
}
puts - nonewline $fp [ get_property $property $speed_model ]
set needspace 1
}
puts $fp " "
}
close $fp
}
proc speed_models2 { } {
set outdir " . "
set fp [ open " $ o u t d i r / s p e e d _ m o d e l . t x t " w]
# list_property [lindex [get_speed_models] 0]
set speed_models [ get_speed_models ]
puts " I t e m s : [ l l e n g t h $ s p e e d _ m o d e l s ] "
set needspace 0
# Not all objects have the same properties
# But they do seem to have the same list
set properties [ list_property [ lindex $speed_models 0 ] ]
foreach speed_model $speed_models {
set needspace 0
foreach property $properties {
set val [ get_property $property $speed_model ]
if { " $ v a l " ne " " } {
if $needspace {
puts - nonewline $fp " "
}
puts - nonewline $fp " $ p r o p e r t y : $ v a l "
set needspace 1
}
}
puts $fp " "
}
close $fp
}
# For cost codes
# Items: 2663055s
# Hmm too much
# Lets filter out items we really want
proc nodes_all { } {
set outdir " . "
set fp [ open " $ o u t d i r / n o d e _ a l l . t x t " w]
set items [ get_nodes ]
puts " I t e m s : [ l l e n g t h $ i t e m s ] "
set needspace 0
set properties [ list_property [ lindex $items 0 ] ]
foreach item $items {
set needspace 0
foreach property $properties {
set val [ get_property $property $item ]
if { " $ v a l " ne " " } {
if $needspace {
puts - nonewline $fp " "
}
puts - nonewline $fp " $ p r o p e r t y : $ v a l "
set needspace 1
}
}
puts $fp " "
}
close $fp
}
# Only writes out items with unique cost codes
# (much faster)
proc nodes_unique_cc { } {
set outdir " . "
set fp [ open " $ o u t d i r / n o d e . t x t " w]
set items [ get_nodes ]
2018-09-11 20:51:11 +02:00
puts " C o m p u t i n g c o s t c o d e s w i t h [ l l e n g t h $ i t e m s ] i t e m s "
2018-08-24 03:18:36 +02:00
set needspace 0
set properties [ list_property [ lindex $items 0 ] ]
set cost_codes_known [ dict create]
set itemi 0
foreach item $items {
incr itemi
set cost_code [ get_property COST_CODE $item ]
if { [ dict exists $cost_codes_known $cost_code ] } {
continue
}
2018-09-11 20:51:11 +02:00
puts " A d d i n g c o s t c o d e $ c o s t _ c o d e @ i t e m $ i t e m i "
2018-08-24 03:18:36 +02:00
dict set cost_codes_known $cost_code 1
set needspace 0
foreach property $properties {
set val [ get_property $property $item ]
if { " $ v a l " ne " " } {
if $needspace {
puts - nonewline $fp " "
}
puts - nonewline $fp " $ p r o p e r t y : $ v a l "
set needspace 1
}
}
puts $fp " "
}
close $fp
}
build_design_full
speed_models2
nodes_unique_cc