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
|
#
# Copyright 2014 Ettus Research
#
# ---------------------------------------
# Gather all external parameters
# ---------------------------------------
set simulator $::env(VIV_SIMULATOR)
set design_srcs $::env(VIV_DESIGN_SRCS)
set sim_srcs $::env(VIV_SIM_SRCS)
set sim_top $::env(VIV_SIM_TOP)
set part_name $::env(VIV_PART_NAME)
set sim_runtime $::env(VIV_SIM_RUNTIME)
set sim_fast $::env(VIV_SIM_FAST)
set vivado_mode $::env(VIV_MODE)
set working_dir [pwd]
set sim_fileset "sim_1"
set project_name "[string tolower $simulator]_proj"
if [info exists ::env(VIV_SIM_COMPLIBDIR) ] {
set sim_complibdir $::env(VIV_SIM_COMPLIBDIR)
if [expr [file isdirectory $sim_complibdir] == 0] {
set sim_complibdir ""
}
} else {
set sim_complibdir ""
}
if [expr ([string equal $simulator "XSim"] == 0) && ([string length $sim_complibdir] == 0)] {
puts "BUILDER: \[ERROR\]: Could not resolve the location for the compiled simulation libraries."
puts " Please build libraries for chosen simulator and set the env or"
puts " makefile variable SIM_COMPLIBDIR to point to the location."
exit 1
}
# ---------------------------------------
# Vivado Commands
# ---------------------------------------
puts "BUILDER: Creating Vivado simulation project part $part_name"
create_project -part $part_name -force $project_name/$project_name
foreach src_file $design_srcs {
set src_ext [file extension $src_file ]
if [expr [lsearch {.vhd .vhdl} $src_ext] >= 0] {
puts "BUILDER: Adding VHDL : $src_file"
read_vhdl -library work $src_file
} elseif [expr [lsearch {.v .vh} $src_ext] >= 0] {
puts "BUILDER: Adding Verilog : $src_file"
read_verilog $src_file
} elseif [expr [lsearch {.sv} $src_ext] >= 0] {
puts "BUILDER: Adding SVerilog: $src_file"
read_verilog -sv $src_file
} elseif [expr [lsearch {.xdc} $src_ext] >= 0] {
puts "BUILDER: Adding XDC : $src_file"
read_xdc $src_file
} elseif [expr [lsearch {.xci} $src_ext] >= 0] {
puts "BUILDER: Adding IP : $src_file"
read_ip $src_file
} elseif [expr [lsearch {.ngc .edif} $src_ext] >= 0] {
puts "BUILDER: Adding Netlist : $src_file"
read_edif $src_file
} else {
puts "BUILDER: \[WARNING\] File ignored!!!: $src_file"
}
}
foreach sim_src $sim_srcs {
puts "BUILDER: Adding Sim Src : $sim_src"
add_files -fileset $sim_fileset -norecurse $sim_src
}
# Simulator independent config
set_property top $sim_top [get_filesets $sim_fileset]
set_property default_lib work [current_project]
# Select the simulator
# WARNING: Do this first before setting simulator specific properties!
set_property target_simulator $simulator [current_project]
# Vivado quirk when passing options to external simulators
if [expr [string equal $simulator "XSim"] == 1] {
set_property verilog_define "SIM_RUNTIME_US=$sim_runtime WORKING_DIR=\"$working_dir\"" [get_filesets $sim_fileset]
} else {
set_property verilog_define "SIM_RUNTIME_US=$sim_runtime WORKING_DIR=$working_dir" [get_filesets $sim_fileset]
}
# XSim specific settings
set_property xsim.simulate.runtime "${sim_runtime}us" -objects [get_filesets $sim_fileset]
set_property xsim.elaborate.debug_level "all" -objects [get_filesets $sim_fileset]
set_property xsim.elaborate.unifast $sim_fast -objects [get_filesets $sim_fileset]
# Modelsim specific settings
if [expr [string equal $simulator "Modelsim"] == 1] {
set sim_64bit $::env(VIV_SIM_64BIT)
set_property compxlib.compiled_library_dir $sim_complibdir [current_project]
# Does not work yet (as of Vivado 2015.2), but will be useful for 32-bit support
# See: http://www.xilinx.com/support/answers/62210.html
set_property modelsim.64bit $sim_64bit -objects [get_filesets $sim_fileset]
set_property modelsim.simulate.runtime "${sim_runtime}ns" -objects [get_filesets $sim_fileset]
set_property modelsim.elaborate.acc "true" -objects [get_filesets $sim_fileset]
set_property modelsim.simulate.log_all_signals "true" -objects [get_filesets $sim_fileset]
set_property modelsim.simulate.vsim.more_options -value "-c" -objects [get_filesets $sim_fileset]
set_property modelsim.elaborate.unifast $sim_fast -objects [get_filesets $sim_fileset]
if [info exists ::env(VIV_SIM_USER_DO) ] {
set_property modelsim.simulate.custom_udo -value "$::env(VIV_SIM_USER_DO)" -objects [get_filesets $sim_fileset]
}
}
# Launch simulation
launch_simulation
if [string equal $vivado_mode "batch"] {
puts "BUILDER: Closing project"
close_project
} else {
puts "BUILDER: In GUI mode. Leaving project open."
}
|