adi_project_xilinx.tcl: Add matlab env variables

The ADI_EXTRACT_PORTS variable is used to extract all the ports and nets properties of the desired IPS for the TransceiverToolbox and HighSpeedConverterToolbox to be later used for generating the json files automatically.

The ADI_SKIP_SYNTHESIS variable is used to stop the building process before the synthesis when used with Matlab support as it is not necessary at this point.

The ADI_MATLAB variable is used to choose the correct paths when building the design when using the HWA workflow.
main
Stanca Pop 2022-09-21 17:09:13 +03:00 committed by StancaPop
parent d152ad1e9d
commit 1c8f210baf
1 changed files with 81 additions and 5 deletions

View File

@ -188,9 +188,22 @@ proc adi_project_create {project_name mode parameter_list device {board "not-app
}
}
if {[info exists ::env(ADI_MATLAB)]} {
set ADI_MATLAB 1
set actual_project_name "$ad_hdl_dir/vivado_prj"
if {$mode != 0} {
puts -nonewline "MATLAB builds do not support mode 2"
exit 2
}
} else {
set ADI_MATLAB 0
}
if {$mode == 0} {
set project_system_dir "${actual_project_name}.srcs/sources_1/bd/system"
create_project ${actual_project_name} . -part $p_device -force
set project_system_dir "${actual_project_name}.srcs/sources_1/bd/system"
if {$ADI_MATLAB == 0} {
create_project ${actual_project_name} . -part $p_device -force
}
} else {
set project_system_dir "${actual_project_name}.srcs/sources_1/bd/system"
create_project -in_memory -part $p_device
@ -204,13 +217,16 @@ proc adi_project_create {project_name mode parameter_list device {board "not-app
set_property board_part $p_board [current_project]
}
set lib_dirs $ad_hdl_dir/library
if {$ADI_MATLAB == 0} {
set lib_dirs $ad_hdl_dir/library
} else {
set lib_dirs [get_property ip_repo_paths [current_fileset]]
lappend lib_dirs $ad_hdl_dir/library
}
if {[info exists ::env(ADI_GHDL_DIR)]} {
if {$ad_hdl_dir ne $ad_ghdl_dir} {
lappend lib_dirs $ad_ghdl_dir/library
}
} else {
# puts -nonew-line "INFO: ADI_GHDL_DIR not defined.\n"
}
# Set a common IP cache for all projects
@ -316,6 +332,10 @@ proc adi_project_run {project_name} {
set actual_project_name "$::env(ADI_PROJECT_DIR)${project_name}"
set ad_project_dir "$::env(ADI_PROJECT_DIR)"
}
if {[info exists ::env(ADI_SKIP_SYNTHESIS)]} {
puts "Skipping synthesis"
return
}
if {$ADI_USE_OOC_SYNTHESIS == 1} {
launch_runs -jobs $ADI_MAX_OOC_JOBS system_*_synth_1 synth_1
@ -395,6 +415,62 @@ proc adi_project_run {project_name} {
puts "GENERATE_REPORTS: Resource utilization files won't be generated because ADI_GENERATE_UTILIZATION env var is not set"
}
## Extract IP ports and their properties
if {[info exists ::env(ADI_EXTRACT_PORTS)]} {
set p_output_file ports_properties.txt
# Define a list of IPs for which to generate the ports properties and nets report
set P_IP_list {
util_wfifo
util_rfifo
util_cpack2
util_upack2
ad_ip_jesd204_tpl_adc
ad_ip_jesd204_tpl_dac
rx_fir_decimator
tx_fir_interpolator
axi_ad9361
axi_adrv9009
}
set fileWrite [open $p_output_file w]
foreach P_IP_name $P_IP_list {
foreach P_IP_instance [ get_cells -quiet -hierarchical -filter " ORIG_REF_NAME =~ $P_IP_name || REF_NAME =~ $P_IP_name " ] {
set P_IP_instance_name [regsub -all {i_system_wrapper\/system_i\/} $P_IP_instance {}]
if { [regexp {adc_tpl_core} $P_IP_instance_name] } {
set P_IP_INST [regsub -all {\/adc_tpl_core/inst} $P_IP_instance_name {}]
puts "$P_IP_INST\n"
} elseif { [regexp {dac_tpl_core} $P_IP_instance_name] } {
set P_IP_INST [regsub -all {\/dac_tpl_core/inst} $P_IP_instance_name {}]
puts "$P_IP_INST\n"
} else {
set P_IP_INST [regsub -all {\/inst} $P_IP_instance_name {}]
puts "$P_IP_INST\n"
}
puts $fileWrite "\n$P_IP_INST properties: \n"
set list_of_IP_ports [ get_bd_pins -of_objects [get_bd_cells $P_IP_INST]]
foreach IP_port $list_of_IP_ports {
set pin_direction [get_property DIR [get_bd_pins $IP_port]]
set pin_path [get_property PATH [get_bd_pins $IP_port]]
set pin_path_name [regsub {\/} $pin_path {}]
set left [get_property LEFT [get_bd_pins $IP_port]]
set right [get_property RIGHT [get_bd_pins $IP_port]]
puts $fileWrite "direction $pin_direction \nMSB $left \nLSB $right \nname $pin_path_name"
set net_info [get_bd_nets -of_objects [get_bd_pins $IP_port]]
set net_name [regsub -all {\/} $net_info {}]
puts $fileWrite "net $net_name\n"
}
}
}
close $fileWrite
} else {
puts "GENERATE_PORTS_REPORTS: IP ports properties and nets report files won't be generated because ADI_EXTRACT_PORTS env var is not set"
}
if {[info exists ::env(ADI_GENERATE_XPA)]} {
set csv_file ${ad_project_dir}power_analysis.csv
set Layers "8to11"