aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/tools/scripts/viv_generate_bd.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'fpga/usrp3/tools/scripts/viv_generate_bd.tcl')
-rw-r--r--fpga/usrp3/tools/scripts/viv_generate_bd.tcl78
1 files changed, 78 insertions, 0 deletions
diff --git a/fpga/usrp3/tools/scripts/viv_generate_bd.tcl b/fpga/usrp3/tools/scripts/viv_generate_bd.tcl
new file mode 100644
index 000000000..546a190b1
--- /dev/null
+++ b/fpga/usrp3/tools/scripts/viv_generate_bd.tcl
@@ -0,0 +1,78 @@
+#
+# Copyright 2016 Ettus Research
+#
+
+# ---------------------------------------
+# Gather all external parameters
+# ---------------------------------------
+set bd_file $::env(BD_FILE) ;# Absolute path to BD/Tcl file from src dir
+set src_ext [file extension $bd_file] ;# BD or Tcl file?
+set part_name $::env(PART_NAME) ;# Full Xilinx part name
+set bd_name [file rootname [file tail $bd_file]] ;# Extract IP name
+if {[info exists env(BD_IP_REPOS)]} {
+ set ip_repos $::env(BD_IP_REPOS);# Any supporting IP repos
+} else {
+ set ip_repos {}
+}
+if {[info exists env(BD_HDL_SRCS)]} {
+ set hdl_sources $::env(BD_HDL_SRCS);# Any supporting HDL files
+} else {
+ set hdl_sources {}
+}
+
+# Delete any previous output cookie file
+file delete -force "$bd_file.out"
+# ---------------------------------------
+# Vivado Commands
+# ---------------------------------------
+create_project -part $part_name -in_memory
+# In non-project mode, the hierarchy must be updated for the HDL source files to be
+# correctly applied to the BD. See AR:
+# https://www.xilinx.com/support/answers/63488.html
+set_property source_mgmt_mode All [current_project]
+set_property ip_repo_paths "{$ip_repos}" [current_project]
+update_ip_catalog
+# Add supplementary HDL sources, if they exist.
+foreach src_file $hdl_sources {
+ set hdl_ext [file extension $src_file ]
+ if [expr [lsearch {.vhd .vhdl} $hdl_ext] >= 0] {
+ puts "BUILDER: Adding VHDL : $src_file"
+ read_vhdl -library work $src_file
+ } elseif [expr [lsearch {.v .sv .vh .svh} $hdl_ext] >= 0] {
+ puts "BUILDER: Adding Verilog : $src_file"
+ read_verilog $src_file
+ } else {
+ puts "BUILDER: \[WARNING\] File ignored!!!: $src_file"
+ }
+}
+# Open .tcl or .bd design directly.
+if [expr [lsearch {.tcl} $src_ext] >= 0] {
+ puts "BUILDER: Generating Block Diagram from script: $bd_file"
+ create_bd_design -dir . $bd_name
+ source $bd_file
+ report_ip_status
+ puts "BUILDER: Report_ip_status done"
+ set bd_file $bd_name.bd
+} else {
+ puts "BUILDER: Adding Block Diagram: $bd_file"
+ add_files -norecurse $bd_file
+ puts "BUILDER: Generating BD Target first pass..."
+ generate_target all [get_files $bd_file] -force
+ report_ip_status
+ puts "BUILDER: Report_ip_status done"
+ open_bd_design $bd_file
+}
+# Generate outputs.
+puts "BUILDER: Generating BD Target..."
+generate_target all [get_files $bd_file]
+puts "BUILDER: Generate all done"
+
+if { [get_msg_config -count -severity ERROR] == 0 } {
+ # Write output cookie file
+ set outfile [open "$bd_file.out" w]
+ puts $outfile "This file was auto-generated by viv_generate_bd.tcl and signifies that BD generation is done."
+ close $outfile
+} else {
+ exit 1
+}
+