70 lines
2.4 KiB
Tcl
70 lines
2.4 KiB
Tcl
set script_dir [file dirname [file normalize [info script]]]
|
|
set fpga_dir [file normalize [file join $script_dir ../..]]
|
|
|
|
proc getenv_default {name default} {
|
|
if {[info exists ::env($name)] && $::env($name) ne ""} {
|
|
return $::env($name)
|
|
}
|
|
return $default
|
|
}
|
|
|
|
set mcs_file [file normalize [getenv_default FLASH_MCS [file join $fpga_dir out flash genesys2_rocket.mcs]]]
|
|
set cfgmem_part [getenv_default CFGMEM_PART s25fl256sxxxxxx0-spi-x1_x2_x4]
|
|
set device_pattern [getenv_default HW_DEVICE_PATTERN xc7k325t*]
|
|
set flash_verify [getenv_default FLASH_VERIFY 0]
|
|
set flash_erase [getenv_default FLASH_ERASE 1]
|
|
set flash_region_names [split [getenv_default FLASH_REGION_NAMES "combined"] ";"]
|
|
set flash_region_files_env [getenv_default FLASH_REGION_FILES ""]
|
|
if {$flash_region_files_env eq ""} {
|
|
set flash_region_files [list $mcs_file]
|
|
} else {
|
|
set flash_region_files [split $flash_region_files_env ";"]
|
|
}
|
|
|
|
if {[llength $flash_region_names] != [llength $flash_region_files]} {
|
|
error "FLASH_REGION_NAMES and FLASH_REGION_FILES length mismatch"
|
|
}
|
|
foreach region_file $flash_region_files {
|
|
if {![file exists $region_file]} {
|
|
error "MCS file not found: $region_file"
|
|
}
|
|
}
|
|
|
|
open_hw_manager
|
|
connect_hw_server
|
|
open_hw_target
|
|
set dev [lindex [get_hw_devices $device_pattern] 0]
|
|
if {$dev eq ""} {
|
|
error "No hardware device found matching $device_pattern"
|
|
}
|
|
current_hw_device $dev
|
|
refresh_hw_device $dev
|
|
|
|
set cfg_parts [get_cfgmem_parts $cfgmem_part]
|
|
if {[llength $cfg_parts] == 0} {
|
|
error "Configuration memory part not found: $cfgmem_part"
|
|
}
|
|
|
|
create_hw_cfgmem -hw_device $dev [lindex $cfg_parts 0]
|
|
set cfgmem [current_hw_cfgmem]
|
|
set_property PROGRAM.ADDRESS_RANGE {use_file} $cfgmem
|
|
set_property PROGRAM.BLANK_CHECK 0 $cfgmem
|
|
set_property PROGRAM.ERASE $flash_erase $cfgmem
|
|
set_property PROGRAM.CFG_PROGRAM 1 $cfgmem
|
|
set_property PROGRAM.VERIFY $flash_verify $cfgmem
|
|
set_property PROGRAM.UNUSED_PIN_TERMINATION {pull-none} $cfgmem
|
|
|
|
create_hw_bitstream -hw_device $dev [get_property PROGRAM.HW_CFGMEM_BITFILE $dev]
|
|
program_hw_devices $dev
|
|
refresh_hw_device $dev
|
|
|
|
for {set i 0} {$i < [llength $flash_region_files]} {incr i} {
|
|
set region_name [lindex $flash_region_names $i]
|
|
set region_file [lindex $flash_region_files $i]
|
|
puts "Programming flash region '$region_name' from $region_file"
|
|
set_property PROGRAM.FILES [list $region_file] $cfgmem
|
|
program_hw_cfgmem $cfgmem
|
|
}
|
|
puts "Programmed flash $cfgmem_part"
|
|
close_hw_manager
|