1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
#
# Copyright 2015 Ettus Research
#
if [expr $argc < 2] {
error "ERROR: Invalid number of arguments"
exit
}
set cmd [lindex $argv 0]
set part_name [lindex $argv 1]
# Only create an in-memory roject when not using bdtcl commands.
if [expr [string first "_bdtcl" $cmd] == -1] {
create_project -in_memory -ip -name inmem_ip_proj -part $part_name
# Otherwise, set the system's TMP directory.
} else {
set sys_tmpdir [pwd]
if {[file exists "/tmp"]} {set sys_tmpdir "/tmp"}
catch {set sys_tmpdir $::env(TRASH_FOLDER)} ;# very old Macintosh. Mac OS X doesn't have this.
catch {set sys_tmpdir $::env(TMP)}
catch {set sys_tmpdir $::env(TEMP)}
}
if { [string compare $cmd "create"] == 0 } {
if [expr $argc < 5] {
error "ERROR: Invalid number of arguments for the create operation"
exit
}
set ip_name [lindex $argv 2]
set ip_dir [lindex $argv 3]
set ip_vlnv [lindex $argv 4]
create_ip -vlnv $ip_vlnv -module_name $ip_name -dir $ip_dir
} elseif { [string compare $cmd "modify"] == 0 } {
if [expr $argc < 3] {
error "ERROR: Invalid number of arguments for the modify operation"
exit
}
set src_file [lindex $argv 2]
set src_ext [file extension $src_file ]
if [expr [lsearch {.xci} $src_ext] >= 0] {
read_ip $src_file
} elseif [expr [lsearch {.bd} $src_ext] >= 0] {
add_files -norecurse $src_file
export_ip_user_files -of_objects [get_files $src_file] -force -quiet
open_bd_design $src_file
} else {
puts "ERROR: Invalid file extension: $src_ext"
}
} elseif { [string compare $cmd "list"] == 0 } {
puts "Supported IP for device ${part_name}:"
foreach ip [lsort [get_ipdefs]] {
puts "- $ip"
}
} elseif { [string compare $cmd "upgrade"] == 0 } {
if [expr $argc < 3] {
error "ERROR: Invalid number of arguments for the upgrade operation"
exit
}
set src_file [lindex $argv 2]
read_ip $src_file
upgrade_ip [get_ips *]
} elseif { [string compare $cmd "modify_bdtcl"] == 0 } {
if [expr $argc < 4] {
error "ERROR: Invalid number of arguments for the modify operation"
exit
}
set src_file [lindex $argv 2]
set src_rootname [file rootname [file tail $src_file]]
set src_ext [file extension $src_file ]
set ip_repos [lindex $argv 3]
set hdl_sources "[file dirname $src_file]/hdl_sources.tcl"
if [expr [lsearch {.tcl} $src_ext] >= 0] {
# Create a temporary project to work on.
set tmp_bddir "${sys_tmpdir}/.viv_${src_rootname}"
file mkdir $tmp_bddir
cd $tmp_bddir
# Create temporary project to store user changes.
create_project tmp_bd $tmp_bddir -part $part_name -force
set_property ip_repo_paths "{$ip_repos}" [current_project]
update_ip_catalog
# Add any supporting HDL first
if {[file exists $hdl_sources] == 1} {
source $hdl_sources
} else {
puts "hdl_sources.tcl not found in IP directory. Skipping HDL import for BD design"
}
# Recreate BD design from source file (.tcl)
source $src_file
regenerate_bd_layout
validate_bd_design
save_bd_design
} else {
puts "ERROR: Invalid file extension: $src_ext"
}
} elseif { [string compare $cmd "write_bdtcl"] == 0 } {
if [expr $argc < 3] {
error "ERROR: Invalid number of arguments for the create operation"
exit
}
# When regenerating a TCL file from a BD design, there should be a tmp project
# created by this tool ($cmd = modify_bdtcl).
set src_file [lindex $argv 2]
set src_rootname [file rootname [file tail $src_file]]
set src_ext [file extension $src_file ]
set src_dir [file dirname $src_file]
# Make sure a BD or TCL files is passed
if [expr [lsearch {.tcl} $src_ext] >= 0] {
# Validate that a previously created BD project exists.
set tmp_bddir "${sys_tmpdir}/.viv_${src_rootname}"
if {[file exists "$tmp_bddir/tmp_bd.xpr"] == 1} {
puts "INFO: Generating TCL file from BD design..."
# Open project and BD design
open_project "$tmp_bddir/tmp_bd.xpr"
open_bd_design [get_files "$src_rootname.bd"]
# Rewrite TCL BD file
write_bd_tcl -make_local -include_layout -force "$src_dir/$src_rootname.tcl"
puts "INFO: BD TCL source updated: $src_dir/$src_rootname.tcl"
# Close and delete tmp_bd project, not needed anymore.
close_project
puts "INFO: Deleting temp Vivado BD project..."
file delete -force -- $tmp_bddir
exit
} else {
puts "ERROR: No BD temp project found in: $tmp_bddir"
exit
}
} else {
puts "ERROR: Invalid file extension: $src_ext"
exit
}
} else {
error "ERROR: Invalid command: $cmd"
}
|