Files
b210-k7-fpga/tools/scripts/viv_hardware_utils.tcl
Wade Fife 6dad16ccab fpga: Fix Vivado version check in viv_hardware_utils
Original-commit: b5f324f1df7ac3a30c7669efa73e58aaf02e1f78
2022-09-08 11:53:44 -05:00

102 lines
3.2 KiB
Tcl

# Function definitions
proc ::connect_server { {hostname localhost} {port 3121} } {
if { [string compare [current_hw_server -quiet] ""] != 0 } {
disconnect_server
}
connect_hw_server -url $hostname:$port
}
proc ::disconnect_server { } {
disconnect_hw_server [current_hw_server]
}
proc ::jtag_list {} {
# Iterate through all hardware targets
set hw_targets [get_hw_targets -of_objects [current_hw_server -quiet] -quiet]
set idx_t 0
foreach hw_target $hw_targets {
puts "== Target${idx_t}: $hw_target =="
open_hw_target $hw_target -quiet
# Iterate through all hardware devices
set hw_devices [get_hw_devices]
set idx_d 0
foreach hw_device $hw_devices {
puts "--- Device${idx_d}: $hw_device (Address = ${idx_t}:${idx_d})"
set idx_d [expr $idx_d + 1]
}
close_hw_target -quiet
set idx_t [expr $idx_t + 1]
}
}
proc ::jtag_program { filepath {serial "."} {address "0:0"} } {
set idx_t [lindex [split $address :] 0]
set idx_d [lindex [split $address :] 1]
set hw_targets [get_hw_targets -of_objects [current_hw_server]]
set hw_targets_regexp {}
foreach target $hw_targets {
if { [regexp $serial $target] } {
set hw_targets_regexp [concat $hw_targets_regexp $target]
}
}
set hw_target [lindex $hw_targets_regexp $idx_t]
if { [string compare $hw_target ""] == 0 } {
error "ERROR: Could not open hw_target $idx_t. Either the address $address is incorrect or the device is not connected."
} else {
open_hw_target $hw_target -quiet
}
set hw_device [lindex [get_hw_devices] $idx_d]
if { [string compare $hw_device ""] == 0 } {
close_hw_target -quiet
error "ERROR: Could not open hw_device $idx_d. Either the address $address is incorrect or the device is not connected."
} else {
puts "- Target: $hw_target"
puts "- Device: $hw_device"
puts "- Filename: $filepath"
puts "Programming..."
current_hw_device $hw_device
set_property PROBES.FILE {} [current_hw_device]
set_property PROGRAM.FILE $filepath [current_hw_device]
program_hw_devices [current_hw_device]
close_hw_target -quiet
puts "Programming DONE"
}
}
# Work around Vivado 2021.1 bug where patches aren't included in Vivado version
# string check. See AR 76681.
set_param labtools.override_cs_server_version_check 1
# Initialization sequence
open_hw_manager
connect_server
if [expr $argc > 0] {
#Execute a command and exit
set cmd [lindex $argv 0]
if { [string compare $cmd "list"] == 0 } {
jtag_list
} elseif { [string compare $cmd "program"] == 0 } {
set filepath [lindex $argv 1]
if [expr $argc == 3] {
set serial [lindex $argv 2]
jtag_program $filepath $serial
} elseif [expr $argc > 3] {
set serial [lindex $argv 2]
set devaddr [lindex $argv 3]
jtag_program $filepath $serial $devaddr
} else {
jtag_program $filepath
}
} else {
error "Invalid command: $cmd"
}
disconnect_server
exit
}