Coyote/hw/scripts/shell.tcl.in

313 lines
12 KiB
Tcl

if {[catch {
########################################################################################################
source "${CMAKE_BINARY_DIR}/base.tcl"
########################################################################################################
# Project
########################################################################################################
set proj_dir "$build_dir/$project"
# Check iprepo
if { [file isdirectory $iprepo_dir] } {
set lib_dir "$iprepo_dir"
} else {
puts "iprepo directory could not be found."
#exit 1
}
# Create project
create_project $project $proj_dir -part $part -force
set proj [current_project]
set_property IP_REPO_PATHS $lib_dir [current_fileset]
update_ip_catalog
puts "**** Project created"
puts "****"
########################################################################################################
# Set project properties
########################################################################################################
#set_property "board_part" $board_part $proj
set_property "default_lib" "xil_defaultlib" $proj
set_property "ip_cache_permissions" "read write" $proj
set_property "ip_output_repo" "$proj_dir/$project.cache/ip" $proj
set_property "sim.ip.auto_export_scripts" "1" $proj
set_property "target_language" "Verilog" $proj
set_property "simulator_language" "Mixed" $proj
set_property "xpm_libraries" "XPM_CDC XPM_MEMORY" $proj
if {$cfg(en_pr) eq 1} {
set_property "pr_flow" "1" $proj
}
puts "**** Project properties set"
puts "****"
########################################################################################################
# Create and add source files
########################################################################################################
file mkdir "$proj_dir/hdl/wrappers"
file mkdir "$proj_dir/hdl/wrappers/common"
for {set i 0} {$i < $cfg(n_config)} {incr i} {
file mkdir "$proj_dir/hdl/wrappers/config_$i"
file mkdir "$proj_dir/hdl/config_$i"
}
# Call write HDL scripts
unset ::env(PYTHONPATH)
unset ::env(PYTHONHOME)
proc call_write_hdl {r_path} {
set output [exec /usr/bin/python3 "$r_path/write_hdl.py" 0 0]
puts $output
}
call_write_hdl $build_dir
puts "**** Source files created"
puts "****"
# Add source files
add_files "$hw_dir/hdl/mmu"
add_files "$hw_dir/hdl/pkg"
add_files "$hw_dir/hdl/slave"
add_files "$hw_dir/hdl/common"
add_files "$hw_dir/hdl/cdma_u"
#add_files "$hw_dir/hdl/cdma_a"
add_files "$hw_dir/hdl/stripe"
if {$cfg(en_net) eq 1} {
add_files "$hw_dir/hdl/network/cmac"
add_files "$hw_dir/hdl/network/stack"
if {$cfg(en_rdma) eq 1} {
add_files "$hw_dir/hdl/network/rdma"
}
if {$cfg(en_tcp) eq 1} {
add_files "$hw_dir/hdl/network/tcp"
}
}
if {$cfg(fdev) eq "enzian"} {
add_files "$hw_dir/hdl/eci"
}
# Add wrappers and user logic
add_files "$proj_dir/hdl/wrappers/common"
add_files "$proj_dir/hdl/wrappers/config_0"
add_files "$proj_dir/hdl/config_0"
# Top level
set_property "top" "cyt_top" [current_fileset]
# Constraints
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_base.xdc"
if {$cfg(fdev) != "enzian"} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_pcie.xdc"
}
if {$cfg(ddr_0) eq 1} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_ddr_0.xdc"
}
if {$cfg(ddr_1) eq 1} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_ddr_1.xdc"
}
if {$cfg(ddr_2) eq 1} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_ddr_2.xdc"
}
if {$cfg(ddr_3) eq 1} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_ddr_3.xdc"
}
if {$cfg(en_net_0)} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_net_0.xdc"
}
if {$cfg(en_net_1)} {
add_files -norecurse -fileset [get_filesets constrs_1] "$hw_dir/constraints/$cfg(fdev)/$cfg(fdev)_net_1.xdc"
}
# Create a project-local constraint file to take debugging constraints that we
# don't want to propagate to the repository.
file mkdir "$proj_dir/$project.srcs/constrs_1"
close [ open "$proj_dir/$project.srcs/constrs_1/local.xdc" w ]
set_property target_constrs_file "$proj_dir/$project.srcs/constrs_1/local.xdc" [current_fileset -constrset]
puts "**** Source files and constraints added"
puts "****"
########################################################################################################
# IPs
########################################################################################################
set_msg_config -id {IP_Flow 19-4832} -suppress
source "$scripts_dir/ip_inst/base_infrastructure.tcl" -notrace
puts "**** Base infrastructure"
puts "****"
########################################################################################################
# NETWORK
########################################################################################################
if {$cfg(en_net) eq 1} {
add_files $ip_dir/SmartCamCtl.dcp
source "$scripts_dir/ip_inst/network_stack.tcl"
}
puts "**** Network infrastructure"
puts "****"
########################################################################################################
# STATIC LAYER
########################################################################################################
if {$cfg(fdev) eq "enzian"} {
source "$scripts_dir/bd/cr_eci.tcl" -notrace
cr_bd_design_static ""
set_property SYNTH_CHECKPOINT_MODE "Hierarchical" [get_files design_static.bd ]
source "$scripts_dir/util_scripts/enzian_core.tcl"
} else {
source "$scripts_dir/bd/cr_static.tcl" -notrace
cr_bd_design_static ""
set_property SYNTH_CHECKPOINT_MODE "Hierarchical" [get_files design_static.bd ]
}
if {$cfg(en_dcard) eq 1} {
source "$scripts_dir/bd/cr_ddr.tcl" -notrace
cr_bd_design_ddr ""
set_property SYNTH_CHECKPOINT_MODE "Hierarchical" [get_files design_ddr.bd ]
}
if {$cfg(en_hcard) eq 1} {
if {$cfg(hbm_split) eq 1} {
source "$scripts_dir/bd/cr_hbm_split.tcl" -notrace
} else {
source "$scripts_dir/bd/cr_hbm.tcl" -notrace
}
cr_bd_design_hbm ""
set_property SYNTH_CHECKPOINT_MODE "Hierarchical" [get_files design_hbm.bd ]
}
puts "**** Static layer created"
puts "****"
########################################################################################################
# DYNAMIC LAYER
########################################################################################################
# Create dynamic regions
if {$cfg(en_pr) eq 1} {
# Default config
for {set i 0} {$i < $cfg(n_reg)} {incr i} {
create_partition_def -name "dynamic_$i" -module "design_user_wrapper_$i"
#add_files "$proj_dir/hdl/config_0"
#add_files "$proj_dir/hdl/wrappers/config_0"
set cmd "set files \[list \ "
#append cmd "\[file normalize \"\$proj_dir/hdl/wrappers/config_$i/user_wrapper_c0\_$i.sv\"] \ "
#append cmd "\[file normalize \"\$proj_dir/hdl/config_$i/user_logic_c0\_$i.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/axi_intf.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/lynx_intf.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/axi_macros.svh\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/lynx_macros.svh\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axisr_reg_rtl.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_rtl.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_rd.v\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_wr.v\"] \ "
append cmd "\[file normalize \"\$proj_dir/hdl/wrappers/common/lynx_pkg.sv\"] \ "
append cmd "]"
eval $cmd
# Create pr region
create_reconfig_module -name "design_user_wrapper_c0_$i" -partition_def [get_partition_defs "dynamic_$i" ] -define_from "design_user_wrapper_$i"
add_files -norecurse -scan_for_includes $files -of_objects [get_reconfig_modules "design_user_wrapper_c0\_$i"]
set obj [get_partition_defs "dynamic_$i"]
set_property -name "name" -value "dynamic_$i" -objects $obj
set_property -name "use_blackbox_stub" -value "1" -objects $obj
}
set cmd "create_pr_configuration -name config_0 -partitions \[list \ "
for {set i 0} {$i < $cfg(n_reg)} {incr i} {
append cmd "inst_dynamic/inst_user_wrapper_$i:design_user_wrapper_c0_$i "
}
append cmd "]"
eval $cmd
set_property PR_CONFIGURATION config_0 [get_runs impl_1]
set_property STEPS.WRITE_BITSTREAM.ARGS.BIN_FILE true [get_runs impl_1]
# Additional configs
for {set i 1} {$i < $cfg(n_config)} {incr i} {
#add_files "$proj_dir/hdl/config_$i"
#add_files "$proj_dir/hdl/wrappers/config_$i"
for {set j 0} {$j < $cfg(n_reg)} {incr j} {
# Sources
set cmd "set files \[list \ "
append cmd "\[file normalize \"\$proj_dir/hdl/wrappers/config_$i/user_wrapper_c$i\_$j.sv\"] \ "
append cmd "\[file normalize \"\$proj_dir/hdl/config_$i/user_logic_c$i\_$j.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/axi_intf.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/lynx_intf.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/axi_macros.svh\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/pkg/lynx_macros.svh\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axisr_reg_rtl.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_rtl.sv\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_rd.v\"] \ "
append cmd "\[file normalize \"\$hw_dir/hdl/common/regs/axil_reg_wr.v\"] \ "
append cmd "\[file normalize \"\$proj_dir/hdl/wrappers/common/lynx_pkg.sv\"] \ "
append cmd "]"
eval $cmd
# Create pr region
create_reconfig_module -name "design_user_wrapper_c$i\_$j" -partition_def [get_partition_defs "dynamic_$j" ] -top "design_user_wrapper_$j"
add_files -norecurse -scan_for_includes $files -of_objects [get_reconfig_modules "design_user_wrapper_c$i\_$j"]
}
set cmd "create_pr_configuration -name config_$i -partitions \[list \ "
for {set j 0} {$j < $cfg(n_reg)} {incr j} {
append cmd "inst_dynamic/inst_user_wrapper_$j:design_user_wrapper_c$i\_$j "
}
append cmd "]"
eval $cmd
set n [expr {$i + 1}]
set cmd "create_run impl_$n -parent_run impl_1 -flow {Vivado Implementation 2018} -pr_config config_$i"
eval $cmd
set cmd "set_property STEPS.WRITE_BITSTREAM.ARGS.BIN_FILE true \[get_runs impl_$n]"
eval $cmd
}
}
puts "**** Dynamic layer created"
puts "****"
########################################################################################################
# CUSTOM EXAMPLES
########################################################################################################
source "${CMAKE_BINARY_DIR}/example.tcl" -notrace
puts "**** Example check"
puts "****"
########################################################################################################
# CUSTOM SCRIPTS
########################################################################################################
if {$cfg(shl_path) != "0"} {
source "${SHL_SCR_PATH}" -notrace
puts "**** Custom shell script"
puts "****"
}
########################################################################################################
} errorstring]} {
puts "**** CERR: $errorstring"
puts "****"
exit 1
}
exit 0