diff --git a/MANIFEST.in b/MANIFEST.in
index e3ee5ded3c..0f5df72cc7 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -7,3 +7,4 @@ recursive-include hls4ml *.py
recursive-include hls4ml/contrib *
global-exclude .git .gitmodules .gitlab-ci.yml *.pyc
include hls4ml/backends/vivado_accelerator/supported_boards.json
+include hls4ml/backends/vitis_unified/supported_boards.json
diff --git a/hls4ml/backends/__init__.py b/hls4ml/backends/__init__.py
index 07a089cdf8..7403519baf 100644
--- a/hls4ml/backends/__init__.py
+++ b/hls4ml/backends/__init__.py
@@ -13,11 +13,14 @@
from hls4ml.backends.vitis.vitis_backend import VitisBackend # isort: skip
+from hls4ml.backends.vitis_unified.vitis_unified_backend import VitisUnifiedBackend # isort: skip
+
def _register_builtin_backends():
register_backend('Vivado', VivadoBackend)
register_backend('VivadoAccelerator', VivadoAcceleratorBackend)
register_backend('Vitis', VitisBackend)
+ register_backend('VitisUnified', VitisUnifiedBackend)
register_backend('Quartus', QuartusBackend)
register_backend('Catapult', CatapultBackend)
register_backend('SymbolicExpression', SymbolicExpressionBackend)
diff --git a/hls4ml/backends/vitis_unified/passes/fifo_depth_optimization.py b/hls4ml/backends/vitis_unified/passes/fifo_depth_optimization.py
new file mode 100644
index 0000000000..33f25fa5f1
--- /dev/null
+++ b/hls4ml/backends/vitis_unified/passes/fifo_depth_optimization.py
@@ -0,0 +1,114 @@
+# we inherit it from vitis
+import re
+import zipfile
+
+from hls4ml.backends.vitis.passes.fifo_depth_optimization import (
+ generate_depths_file,
+ initialize_large_fifos,
+ set_optimized_fifo_depths,
+)
+from hls4ml.model.optimizer.optimizer import ConfigurableOptimizerPass, ModelOptimizerPass
+
+
+def get_vitis_optimized_fifo_depths(model, cus_hls_prj_path=None):
+ """Parse the files generated by the co-simulation to retrieve the optimized depths for the FIFOs.
+ Attention, only the FIFOs between the layers are profiled!
+
+ Args:
+ model (ModelGraph): The model to which FIFO depth optimization is applied.
+
+ Returns:
+ Dict[str, int]: A dictionary that contains the FIFO names as keys and the optimized depths as values.
+ """
+ # channel.zip is generated after the co-simulation and contains the chan_status*.csv files
+ # in the chan_status*.csv files the max depth achieved during co-simulation can be found at the last (4th) line
+
+ if cus_hls_prj_path is None:
+ cus_hls_prj_path = model.config.get_output_dir() + '/' + model.config.get_project_name() + '/_prj/solution1'
+
+ path_to_zip_file = cus_hls_prj_path + '/.autopilot/db/channel_depth_info/'
+
+ with zipfile.ZipFile(f'{path_to_zip_file}channel.zip', 'r') as zip_ref:
+ zip_ref.extractall(path_to_zip_file)
+
+ # the channel_info.csv file contains the mapping of each fifo name (i.e layer4_out_U) to the respective
+ # chan_status*.csv file
+ names_file_path = cus_hls_prj_path + '/.autopilot/db/channel_info.csv'
+
+ csv_fifo_depth_files = {}
+ with open(names_file_path) as names_file:
+ for line in names_file:
+ slitted_line = line.split(',')
+ if len(slitted_line[0]) == 0:
+ continue
+ layer_name = slitted_line[1]
+ csv_file_name = slitted_line[3][:-1]
+ csv_fifo_depth_files[layer_name] = csv_file_name
+
+ optmized_fifo_depths = {}
+ for layer_name, file_name in csv_fifo_depth_files.items():
+ with open(path_to_zip_file + file_name) as chan_status_file:
+ lines = chan_status_file.readlines()
+ cleaned_layer_name = re.sub(r'(_i)?_U$', '', layer_name)
+ optmized_fifo_depths[cleaned_layer_name] = int(
+ lines[-1]
+ ) # remove "_i_U" (axis) or "_U" (axim) from the layer name
+ # string and keep the last line of the file that contains the max depth
+
+ return optmized_fifo_depths
+
+
+def execute_cosim_to_profile_fifos(model):
+ model.write()
+ model.build(
+ reset=False,
+ csim=False,
+ synth=True,
+ cosim=False,
+ vsynth=False,
+ fifo_opt=True,
+ bitfile=False,
+ log_to_stdout=False,
+ )
+
+
+class FifoDepthOptimization(ConfigurableOptimizerPass, ModelOptimizerPass):
+ def __init__(self):
+ self.profiling_fifo_depth = 100_000
+
+ def transform(self, model):
+ """Perform FIFO depth optimization between the FIFOs of all layers to reduce resource utilization as the
+ initial FIFOs set by hls4ml might be larger than required. At the end of the optimization the FIFOs will
+ have the largest depths achieved during co-simulation without causing any deadlocks between the layers
+ (producer-consumer), thus no additional delays between the layers. In some cases, this optimization
+ might lead to bigger FIFOs than initially set by the hls4ml tool in order to prevent deadlocks.
+
+ Args:
+ model (ModelGraph): The model to which FIFO depth optimization is applied.
+
+ Raises:
+ ValueError: If the FIFO depth for profiling provided by the user is not a non-negative integer.
+ RuntimeError: If the IO type is not set to "io_stream".
+
+ Returns:
+ bool: The execution state of the Optimizer Pass
+ """
+
+ if not isinstance(self.profiling_fifo_depth, int) or self.profiling_fifo_depth <= 0:
+ raise ValueError('The FIFO depth for profiling (profiling_fifo_depth variable) must be a non-negative integer.')
+
+ # check axi-stream or io-stream
+ if not (model.config.get_config_value('IOType') == 'io_stream'):
+ raise RuntimeError('To use this optimization you have to set `IOType` field to `io_stream` in the HLS config.')
+
+ hlsPrjPath = model.config.backend.writer.get_vitis_hls_exec_dir(model)
+
+ initial_fifo_depths = initialize_large_fifos(model, self.profiling_fifo_depth)
+ execute_cosim_to_profile_fifos(model)
+ optimized_fifo_depths = get_vitis_optimized_fifo_depths(model, cus_hls_prj_path=hlsPrjPath + '/hls')
+ generate_depths_file(model, initial_fifo_depths, optimized_fifo_depths)
+ set_optimized_fifo_depths(model, optimized_fifo_depths)
+
+ print('FIFO optimization completed')
+
+ return False
diff --git a/hls4ml/backends/vitis_unified/supported_boards.json b/hls4ml/backends/vitis_unified/supported_boards.json
new file mode 100644
index 0000000000..324a845eea
--- /dev/null
+++ b/hls4ml/backends/vitis_unified/supported_boards.json
@@ -0,0 +1,33 @@
+{
+ "zcu102": {
+ "part": "xczu9eg-ffvb1156-2-e",
+ "axi_master": {
+ "platform_file": "base_platforms/xilinx_zcu102_base_202320_1/xilinx_zcu102_base_202320_1.xpfm",
+ "python_driver": "axi_master_driver.py",
+ "c_drivers": ""
+ },
+ "axi_stream": {
+ "platform_generator_tcl": "zcu102/tcl_scripts/create_xsa.tcl",
+ "platform_output": "zcu102/tcl_scripts/output/zcu102_axi_stream_platform.xsa",
+ "python_driver": "axi_stream_driver.py",
+ "c_drivers": ""
+ }
+ },
+
+ "kv260": {
+ "part": "sk-kv260-g",
+ "axi_master": {
+ "platform_generator_tcl": "kv260/tcl_scripts/create_xsa.tcl",
+ "platform_output": "kv260/tcl_scripts/output/kv260_axi_all_platform.xsa",
+ "python_driver": "axi_master_driver.py",
+ "c_drivers": ""
+ },
+ "axi_stream": {
+ "platform_generator_tcl": "kv260/tcl_scripts/create_xsa.tcl",
+ "platform_output": "kv260/tcl_scripts/output/kv260_axi_all_platform.xsa",
+ "python_driver": "axi_stream_driver.py",
+ "c_drivers": ""
+ }
+ }
+
+}
diff --git a/hls4ml/backends/vitis_unified/vitis_unified_backend.py b/hls4ml/backends/vitis_unified/vitis_unified_backend.py
new file mode 100644
index 0000000000..f67fb9c709
--- /dev/null
+++ b/hls4ml/backends/vitis_unified/vitis_unified_backend.py
@@ -0,0 +1,162 @@
+import os
+import subprocess
+import sys
+from shutil import copy2
+
+from hls4ml.backends import VitisBackend, VivadoBackend
+from hls4ml.model.flow import register_flow
+
+
+class VitisUnifiedBackend(VitisBackend):
+ def __init__(self):
+ super(VivadoBackend, self).__init__(name='VitisUnified')
+ self._register_layer_attributes()
+ self._register_flows()
+
+ def build(
+ self,
+ model,
+ reset=False,
+ csim=False,
+ synth=False,
+ cosim=False,
+ vsynth=False,
+ fifo_opt=False,
+ bitfile=False,
+ log_to_stdout=True,
+ ):
+ # it builds and return vivado reports
+ if 'linux' in sys.platform:
+ found = os.system('command -v v++ > /dev/null')
+ if found != 0:
+ raise Exception('Vitis installation not found. Make sure "vitis" is on PATH.')
+
+ found = os.system('command -v vitis-run > /dev/null')
+ if found != 0:
+ raise Exception('Vitis installation not found. Make sure "vitis-run" is on PATH.')
+
+ output_dir = model.config.get_output_dir()
+
+ hls_config_file = os.path.join(output_dir, 'hls_kernel_config.cfg')
+ # build command
+ csynth_cmd = ('v++ -c --mode hls --config {configPath} --work_dir vitis_unified_project').format(
+ configPath=hls_config_file
+ )
+ # util template (used in csim/cosim/package)
+ util_command = 'vitis-run --mode hls --{op} --config {configPath} --work_dir vitis_unified_project'
+
+ # command for each configuration
+ vitis_hls_dir = model.config.backend.writer.get_vitis_hls_dir(model)
+ package_cmd = util_command.format(op='package', configPath=hls_config_file)
+ cosim_cmd = util_command.format(op='cosim', configPath=hls_config_file)
+ csim_cmd = util_command.format(op='csim', configPath=hls_config_file)
+
+ kerlink_cmd = './link_system.sh'
+ kerlink_cwd = model.config.backend.writer.get_vitis_linker_dir(model)
+
+ commands = []
+ if synth:
+ self.prepare_sim_config_file(model, True)
+ commands.append(('csynth', csynth_cmd, vitis_hls_dir))
+ commands.append(('package', package_cmd, vitis_hls_dir))
+
+ if csim:
+ self.prepare_sim_config_file(model, True)
+ commands.append(('csim', csim_cmd, vitis_hls_dir))
+
+ if cosim or fifo_opt:
+ self.prepare_sim_config_file(model, False)
+ commands.append(('cosim', cosim_cmd, vitis_hls_dir))
+
+ if bitfile:
+ commands.append(('kerlink', kerlink_cmd, kerlink_cwd))
+
+ for task_name, command, cwd in commands:
+ stdout_log = os.path.join(output_dir, f'{task_name}_stdout.log')
+ stderr_log = os.path.join(output_dir, f'{task_name}_stderr.log')
+ stdout_target = None if log_to_stdout else open(stdout_log, 'w')
+ stderr_target = None if log_to_stdout else open(stderr_log, 'w')
+
+ try:
+ process = subprocess.Popen(
+ command, shell=True, cwd=cwd, stdout=stdout_target, stderr=stderr_target, text=True
+ )
+ process.communicate()
+
+ if process.returncode != 0:
+ raise Exception(f'Build failed for {model.config.get_project_name()} during task "{task_name}".')
+ finally:
+ if not log_to_stdout:
+ stdout_target.close()
+ stderr_target.close()
+
+ def prepare_sim_config_file(self, model, is_csim):
+ suffix = 'csim' if is_csim else 'cosim'
+ src = f'{model.config.get_output_dir()}/hls_kernel_config_{suffix}.cfg'
+ des = f'{model.config.get_output_dir()}/hls_kernel_config.cfg'
+ copy2(src, des)
+ return des
+
+ def create_initial_config(
+ self,
+ board='zcu102',
+ part=None,
+ clock_period=5,
+ clock_uncertainty='12.5%',
+ io_type='io_stream',
+ driver='python',
+ input_type='float',
+ output_type='float',
+ in_stream_buf_size=128,
+ out_stream_buf_size=128,
+ axi_mode='axi_master',
+ **_,
+ ):
+ supported_boards_path = os.path.join(os.path.dirname(__file__), 'supported_boards.json')
+ if os.path.exists(supported_boards_path):
+ import json
+
+ with open(supported_boards_path) as f:
+ supported_boards = json.load(f)
+ if board in supported_boards:
+ part = part or supported_boards[board]['part']
+ if part is None:
+ part = 'xczu9eg-ffvb1156-2-e'
+
+ config = super().create_initial_config(part, clock_period, clock_uncertainty, io_type)
+
+ config['VitisUnifiedConfig'] = {}
+ config['VitisUnifiedConfig']['Board'] = board
+ config['VitisUnifiedConfig']['axi_mode'] = axi_mode
+ config['VitisUnifiedConfig']['in_stream_buf_size'] = in_stream_buf_size
+ config['VitisUnifiedConfig']['out_stream_buf_size'] = out_stream_buf_size
+
+ config['VitisUnifiedConfig']['Driver'] = driver
+ config['VitisUnifiedConfig']['InputDtype'] = input_type # float, double or ap_fixed
+ config['VitisUnifiedConfig']['OutputDtype'] = output_type # float, double or ap_fixed
+
+ if io_type != 'io_stream':
+ raise Exception('io_type must be io_stream')
+ if input_type not in ['double', 'float']:
+ raise Exception('input_type must be float or double')
+ if output_type not in ['double', 'float']:
+ raise Exception('output_type must be float or double')
+
+ return config
+
+ def get_default_flow(self):
+ return self._default_flow
+
+ def get_writer_flow(self):
+ return self._writer_flow
+
+ def _register_flows(self):
+ vitis_ip = 'vitis:ip'
+ writer_passes = ['make_stamp', 'vitisunified:write_hls']
+ self._writer_flow = register_flow('write', writer_passes, requires=['vitis:ip'], backend=self.name)
+ self._default_flow = vitis_ip
+
+ # register fifo depth optimization
+ fifo_depth_opt_passes = ['vitisunified:fifo_depth_optimization'] + writer_passes
+
+ register_flow('fifo_depth_optimization', fifo_depth_opt_passes, requires=['vitis:ip'], backend=self.name)
diff --git a/hls4ml/backends/vitis_unified/vitis_unified_config.py b/hls4ml/backends/vitis_unified/vitis_unified_config.py
new file mode 100644
index 0000000000..f4ba068a8e
--- /dev/null
+++ b/hls4ml/backends/vitis_unified/vitis_unified_config.py
@@ -0,0 +1,163 @@
+import json
+import os
+
+
+class VitisUnifiedConfig:
+ def __init__(self, config, model_inputs, model_outputs):
+ self.config = config.config
+ self.board = self.config.get('VitisUnifiedConfig', {}).get('Board', 'zcu102')
+ self.supported_boards = self._load_supported_boards()
+
+ if self.board not in self.supported_boards:
+ raise Exception(
+ f'Board "{self.board}" does not appear in supported_boards.json. '
+ f'Available boards: {list(self.supported_boards.keys())}'
+ )
+
+ self.axi_mode = self.config['VitisUnifiedConfig']['axi_mode']
+
+ if self.axi_mode not in ['axi_stream', 'axi_master']:
+ raise Exception('AXIMode must be either axi_stream or axi_master')
+
+ # axi master buffer size
+ # before first and after last layer we have the configurable buffer
+ # [platform]<-->[in_stream_buf_size]<-->[hls]<-->[out_stream_buf_size]<-->[platform]
+ self.in_stream_buf_size = self.config['VitisUnifiedConfig']['in_stream_buf_size']
+ self.out_stream_buf_size = self.config['VitisUnifiedConfig']['out_stream_buf_size']
+ # Platform is resolved from supported_boards.json based on board + axi_mode
+ board_info = self.supported_boards.get(self.board, {})
+ mode_config = board_info.get(self.axi_mode, {})
+ if not isinstance(mode_config, dict):
+ mode_config = {}
+
+ tcl_rel = mode_config.get('platform_generator_tcl') or (
+ board_info.get('platform_generator_tcl', {}).get(self.axi_mode)
+ if isinstance(board_info.get('platform_generator_tcl'), dict)
+ else board_info.get('platform_generator_tcl')
+ )
+
+ if tcl_rel:
+ out_rel = mode_config.get('platform_output') or board_info.get('platform_output', 'output/platform.xsa')
+ output_dir = config.get_output_dir()
+ workspace_root = os.path.join(output_dir, 'vitis_workspace')
+ tcl_path = tcl_rel if os.path.isabs(tcl_rel) else os.path.join(workspace_root, tcl_rel)
+ self._platform_generator_tcl = os.path.abspath(os.path.expanduser(tcl_path))
+ if not os.path.isabs(out_rel):
+ out_path = os.path.join(workspace_root, out_rel)
+ else:
+ out_path = out_rel
+ self._platform_output_path = os.path.abspath(out_path)
+ self._platform_path = self._platform_output_path
+ elif mode_config.get('platform_file') or (
+ board_info.get('platform_file') and board_info['platform_file'].get(self.axi_mode)
+ ):
+ self._platform_path = self._get_xpfm_path_from_board()
+ self._platform_generator_tcl = None
+ self._platform_output_path = None
+ else:
+ raise Exception(f'Board "{self.board}" has no platform for axi_mode "{self.axi_mode}" in supported_boards.json.')
+
+ self.driver = self.config['VitisUnifiedConfig']['Driver']
+ assert self.driver == 'python', 'we currently only support python drivers'
+
+ # c++ type for input and output of the hls kernel it must be str (float/double)
+ self.input_type = self.config['VitisUnifiedConfig']['InputDtype']
+ self.output_type = self.config['VitisUnifiedConfig']['OutputDtype']
+
+ assert self.input_type == self.output_type, 'Input and Output data types must be the same type different'
+ assert len(model_inputs) >= 1, 'Only models with at least one input tensor are currently supported by VitisUnified'
+ assert len(model_outputs) >= 1, 'Only models with one output tensor are currently supported by VitisUnified'
+ self.inps = model_inputs.copy()
+ self.outs = model_outputs.copy()
+
+ def _load_supported_boards(self):
+ path = os.path.join(os.path.dirname(__file__), 'supported_boards.json')
+ with open(path) as f:
+ return json.load(f)
+
+ def _get_xpfm_path_from_board(self):
+ board_info = self.supported_boards[self.board]
+ mode_config = board_info.get(self.axi_mode, {})
+ if isinstance(mode_config, dict) and mode_config.get('platform_file'):
+ platform_rel = mode_config['platform_file']
+ else:
+ platform_file = board_info.get('platform_file')
+ if not platform_file:
+ raise Exception(f'No platform_file definition for board "{self.board}" in supported_boards.json')
+ platform_rel = platform_file.get(self.axi_mode) if isinstance(platform_file, dict) else platform_file
+ if not platform_rel:
+ raise Exception(
+ f'No platform file for axi_mode "{self.axi_mode}" in supported_boards.json for board "{self.board}"'
+ )
+ # Resolve relative to XILINX_VITIS if path is relative
+ if not os.path.isabs(platform_rel):
+ xilinx_vitis = os.environ.get('XILINX_VITIS', '/opt/Xilinx/Vitis/2023.2')
+ return os.path.join(xilinx_vitis, platform_rel)
+ return platform_rel
+
+ def get_board_info(self, board=None):
+ board = board or self.board
+ if board not in self.supported_boards:
+ raise Exception(f'Board "{board}" is not supported')
+ return self.supported_boards[board]
+
+ def get_part(self):
+ return self.get_board_info()['part']
+
+ # main driver generation
+ def get_driver_file(self):
+ """Return driver filename for current settings"""
+ board_info = self.get_board_info()
+ driver_file = board_info.get(self.axi_mode, {}).get('python_driver')
+ if not driver_file:
+ raise Exception(
+ f'No python_driver for axi_mode "{self.axi_mode}" in supported_boards.json for board "{self.board}"'
+ )
+ return driver_file
+
+ def get_driver_template_path(self):
+ """Return absolute path to main driver template for current board.
+ Derives path from python_drivers in supported_boards: {board}/python_drivers/{driver_file}.hls4ml
+ """
+ driver_file = self.get_driver_file()
+ template_rel = f'{self.board}/python_drivers/{driver_file}.hls4ml'
+ return os.path.join(os.path.dirname(__file__), '../../templates/vitis_unified', template_rel)
+
+ def get_corrected_types(self):
+ return self.input_type, self.output_type, self.inps, self.outs
+
+ def get_driver(self):
+ return self.driver
+
+ def get_board(self):
+ return self.board
+
+ def get_axi_mode(self):
+ return self.axi_mode
+
+ def get_input_type(self):
+ return self.input_type
+
+ def get_output_type(self):
+ return self.output_type
+
+ def get_in_stream_buf_size(self):
+ return self.in_stream_buf_size
+
+ def get_out_stream_buf_size(self):
+ return self.out_stream_buf_size
+
+ def get_XPFMPath(self):
+ return self._platform_path
+
+ def get_platform_path(self):
+ """Path to platform (.xpfm or .xsa). Alias for get_XPFMPath for backward compatibility."""
+ return self._platform_path
+
+ def get_platform_generator_tcl(self):
+ """Path to TCL script that generates platform, or None if using pre-built platform."""
+ return getattr(self, '_platform_generator_tcl', None)
+
+ def get_platform_output_path(self):
+ """Path where platform generator writes output, or None if not using generator."""
+ return getattr(self, '_platform_output_path', None)
diff --git a/hls4ml/templates/vitis_unified/build_lib.sh b/hls4ml/templates/vitis_unified/build_lib.sh
new file mode 100644
index 0000000000..2645804f90
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/build_lib.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+CC=g++
+if [[ "$OSTYPE" == "linux-gnu" ]]; then
+ CFLAGS="-O3 -fPIC -std=c++11 -fno-gnu-unique"
+elif [[ "$OSTYPE" == "darwin"* ]]; then
+ CFLAGS="-O3 -fPIC -std=c++11"
+fi
+VITIS_UNIFIED_FLAGS="VITIS_UNIFIED"
+CFLAGS="$CFLAGS -D$VITIS_UNIFIED_FLAGS"
+
+INCFLAGS="-Ifirmware/ap_types/"
+
+PROJECT=myprojectBaseName
+WRAPPER_NAME=myprojectWrapName
+LIB_STAMP=mystamp
+BASEDIR="$(cd "$(dirname "$0")" && pwd)"
+WEIGHTS_DIR="\"${BASEDIR}/firmware/weights\""
+
+echo "------------- This is build_lib.sh debug message ----------------"
+echo "Compiling for OSTYPE: $OSTYPE"
+echo "CFLAGS: $CFLAGS"
+echo "Include Flags: $INCFLAGS"
+echo "Weights directory: $WEIGHTS_DIR"
+echo "-----------------------------------------------------------------"
+
+${CC} ${CFLAGS} ${INCFLAGS} -D WEIGHTS_DIR="${WEIGHTS_DIR}" -c firmware/${PROJECT}.cpp -o ${PROJECT}.o
+${CC} ${CFLAGS} ${INCFLAGS} -D WEIGHTS_DIR="${WEIGHTS_DIR}" -c firmware/${WRAPPER_NAME}.cpp -o ${WRAPPER_NAME}.o
+${CC} ${CFLAGS} ${INCFLAGS} -D WEIGHTS_DIR="${WEIGHTS_DIR}" -c ${PROJECT}_bridge.cpp -o ${PROJECT}_bridge.o
+${CC} ${CFLAGS} ${INCFLAGS} -shared ${PROJECT}.o ${WRAPPER_NAME}.o ${PROJECT}_bridge.o -o firmware/${PROJECT}-${LIB_STAMP}.so
+rm -f *.o
diff --git a/hls4ml/templates/vitis_unified/build_lib_multigraph.sh b/hls4ml/templates/vitis_unified/build_lib_multigraph.sh
new file mode 100644
index 0000000000..9dcd85f7d1
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/build_lib_multigraph.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+set -e
+
+CC=g++
+if [[ "$OSTYPE" == "linux-gnu" ]]; then
+ CFLAGS="-O3 -fPIC -std=c++11 -fno-gnu-unique"
+elif [[ "$OSTYPE" == "darwin"* ]]; then
+ CFLAGS="-O3 -fPIC -std=c++11"
+fi
+
+graph_project_names=(mygraph_name_list)
+
+LDFLAGS=
+VITIS_UNIFIED_FLAGS="VITIS_UNIFIED"
+CFLAGS="$CFLAGS -D$VITIS_UNIFIED_FLAGS"
+
+ORIGINAL_PROJECT=myproject
+PROJECT=myproject_stitched
+LIB_STAMP=mystamp
+BASEDIR="$(cd "$(dirname "$0")" && cd .. && pwd)"
+INCFLAGS=""
+OUTPUT_DIR="${BASEDIR}/stitched/firmware"
+WEIGHTS_DIR="\"${BASEDIR}/stitched/firmware/weights\""
+
+mkdir -p "${OUTPUT_DIR}"
+
+# Compile all graphs in parallel
+OBJECT_FILES=()
+PIDS=()
+
+for g in "${graph_project_names[@]}"; do
+ SRC_FILE="${g}/firmware/${ORIGINAL_PROJECT}_${g}.cpp"
+ OBJ_FILE="${ORIGINAL_PROJECT}_${g}.o"
+ AP_TYPES_PATH="-I${BASEDIR}/${g}/firmware/ap_types/"
+ (
+ ${CC} ${CFLAGS} ${AP_TYPES_PATH} -D WEIGHTS_DIR="${WEIGHTS_DIR}" -c "${BASEDIR}/${SRC_FILE}" -o "${OBJ_FILE}"
+ ) &
+ PIDS+=($!)
+ OBJECT_FILES+=("${OBJ_FILE}")
+ INCFLAGS+="-I${BASEDIR}/${g}/ "
+done
+
+# compile axi_stream as well
+
+for g in "${graph_project_names[@]}"; do
+ SRC_FILE="${g}/firmware/${ORIGINAL_PROJECT}_${g}_axi.cpp"
+ OBJ_FILE="${ORIGINAL_PROJECT}_${g}_axi.o"
+ AP_TYPES_PATH="-I${BASEDIR}/${g}/firmware/ap_types/"
+ (
+ ${CC} ${CFLAGS} ${AP_TYPES_PATH} -D WEIGHTS_DIR="${WEIGHTS_DIR}" -c "${BASEDIR}/${SRC_FILE}" -o "${OBJ_FILE}"
+ ) &
+ PIDS+=($!)
+ OBJECT_FILES+=("${OBJ_FILE}")
+ #INCFLAGS+="-I${BASEDIR}/${g}/ "
+done
+
+
+
+for pid in "${PIDS[@]}"; do
+ wait $pid
+done
+
+AP_TYPES_PATH="-I${BASEDIR}/${graph_project_names[@]: -1}/firmware/ap_types/"
+
+${CC} ${CFLAGS} ${INCFLAGS} ${AP_TYPES_PATH} -c "${PROJECT}_bridge.cpp" -o ${PROJECT}_bridge.o
+${CC} ${CFLAGS} ${INCFLAGS} ${AP_TYPES_PATH} -shared "${OBJECT_FILES[@]}" ${PROJECT}_bridge.o -o "${OUTPUT_DIR}/${PROJECT}-${LIB_STAMP}.so"
+
+rm -f "${OBJECT_FILES[@]}"
+rm -f ${PROJECT}_bridge.o
diff --git a/hls4ml/templates/vitis_unified/hls_kernel_config.cfg b/hls4ml/templates/vitis_unified/hls_kernel_config.cfg
new file mode 100644
index 0000000000..c1d12a0c18
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/hls_kernel_config.cfg
@@ -0,0 +1,24 @@
+part={PART}
+
+[hls]
+clock={CLK}
+clock_uncertainty={CLK_UC}
+flow_target=vivado
+syn.file={OUTDIR}/firmware/{FILE_NAME_WRAP}.cpp
+syn.file={OUTDIR}/firmware/{FILE_NAME_BASE}.cpp
+syn.file_cflags={OUTDIR}/firmware/{FILE_NAME_WRAP}.cpp,-std=c++0x
+syn.file_cflags={OUTDIR}/firmware/{FILE_NAME_BASE}.cpp,-std=c++0x
+
+syn.top={TOP_NAME}
+
+tb.file={OUTDIR}/{SIM_FILE_NAME}.cpp
+tb.file={OUTDIR}/firmware/weights
+tb.file={OUTDIR}/tb_data
+tb.file_cflags={OUTDIR}/{SIM_FILE_NAME}.cpp,-std=c++0x
+tb.file_cflags={OUTDIR}/{SIM_FILE_NAME}.cpp,-DRTL_SIM
+package.ip.version=1.0.0
+package.output.format={OUTPUT_KERNEL_TYPE}
+syn.compile.name_max_length=80
+syn.schedule.enable_dsp_full_reg=0
+package.output.syn=1
+cosim.enable_fifo_sizing=true
diff --git a/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_master_driver.py.hls4ml b/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_master_driver.py.hls4ml
new file mode 100644
index 0000000000..bf18e7cd10
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_master_driver.py.hls4ml
@@ -0,0 +1,213 @@
+from datetime import datetime
+
+# import the library
+from pynq import Overlay # import the overlay
+from pynq import allocate # import for CMA (contingeous memory allocation)
+from pynq import DefaultIP # import the ip connector library for extension
+from pynq import Interrupt
+from pynq import PL
+
+import asyncio
+import numpy as np
+import os
+import subprocess
+import re
+import time
+
+class NeuralNetworkOverlay(Overlay):
+ def __init__(
+ self, bitfile_name, x_shape, y_shape, dtype=np.float32, dtbo=None, download=True, ignore_version=False, device=None
+ ):
+ super().__init__(bitfile_name, dtbo=None, download=True, ignore_version=False, device=None)
+ self.input_buffer = allocate(shape=x_shape, dtype=dtype)
+ self.output_buffer = allocate(shape=y_shape, dtype=dtype)
+
+ def calculate_performance(self, N, execution_time):
+ rate = N / execution_time if execution_time > 0 else float('inf')
+ print(
+ f"Processed elements: {N}, Execution time: {execution_time:.4f} seconds, Performance rate: {rate:.2f} inferences/second")
+ return rate
+
+
+ def predict(self, X, debug=False, profile=False, encode=None, decode=None):
+ """
+ Obtain the predictions of the NN implemented in the FPGA.
+ Parameters:
+ - X : the input vector. Should be numpy ndarray.
+ - dtype : the data type of the elements of the input/output vectors.
+ Note: it should be set depending on the interface of the accelerator; if it uses 'float'
+ types for the 'data' AXI-Stream field, 'np.float32' dtype is the correct one to use.
+ Instead if it uses 'ap_fixed', 'np.intA' is the correct one to use (note that A cannot
+ any integer value, but it can assume {..., 8, 16, 32, ...} values. Check `numpy`
+ doc for more info).
+ In this case the encoding/decoding has to be computed by the PS. For example for
+ 'ap_fixed<16,6>' type the following 2 functions are the correct one to use for encode/decode
+ 'float' -> 'ap_fixed<16,6>':
+ ```
+ def encode(xi):
+ return np.int16(round(xi * 2**10)) # note 2**10 = 2**(A-B)
+ def decode(yi):
+ return yi * 2**-10
+ encode_v = np.vectorize(encode) # to apply them element-wise
+ decode_v = np.vectorize(decode)
+ ```
+ - profile : boolean. Set it to `True` to print the performance of the algorithm in term of `inference/s`.
+ - encode/decode: function pointers. See `dtype` section for more information.
+ - return: an output array based on `np.ndarray` with a shape equal to `y_shape` and a `dtype` equal to
+ the namesake parameter.
+ """
+
+ # reset the PL
+ PL.reset()
+ # set interrupt controller
+ my_interrupt = Interrupt("/interrupt")
+ ip = self.
+
+ if encode is not None:
+ X = encode(X)
+ np.copyto(self.input_buffer, X)
+ exec_time = ip.transfer(self.input_buffer, self.output_buffer, my_interrupt, profile)
+ # exec_time will valid only when the profile is enabled
+ if decode is not None:
+ self.output_buffer = decode(self.output_buffer)
+
+ if profile:
+ performance = self.calculate_performance(len(X), exec_time)
+ return self.output_buffer, exec_time, performance
+ return self.output_buffer
+
+class HLS4ML_IP(DefaultIP):
+ def __init__(self, description):
+ super().__init__(description=description)
+
+ self.REG_ADDR_AP_CTRL = 0x00
+ self.REG_ADDR_BATCH_SIZE = VAL
+
+ self.REG_ADDR_GIE = 0x04
+ self.REG_ADDR_IER = 0x08
+ self.REG_ADDR_ISR = 0x0C
+
+ self.INP_PORT_NAMEs = [
+ # hls-driver-input-dbg-name
+ ]
+
+ self.REG_ADDR_INP_PTRs = [
+ # hls-driver-input-ptr
+ ]
+
+ self.OUT_PORT_NAMEs = [
+ # hls-driver-output-dbg-name
+ ]
+
+ self.REG_ADDR_OUT_PTRs = [
+ # hls-driver-output-ptr
+ ]
+
+ bindto = ['xilinx.com:hls::1.0']
+
+ def enable_gie(self):
+ print("global interrupt enable register")
+ self.write(self.REG_ADDR_GIE, 0x01)
+ print("enable gie successful")
+
+ def disable_gie(self):
+ print("global interrupt enable register")
+ self.write(self.REG_ADDR_GIE, 0x01)
+ print("disable gie successful")
+
+ def enable_done_intr(self):
+ print("ap_done interrupt enable register")
+ self.write(self.REG_ADDR_IER, 0x01)
+ print("enable ap_done interrupt successful")
+
+ def clear_done_status(self):
+ print("ap_done register clear")
+ self.write(self.REG_ADDR_ISR, 0x01)
+ print("clear ap_done interrupt successful")
+
+ def set_single_bit(self, addr, idx):
+ self.write(addr, 1 << idx)
+
+ def ctrl_start(self):
+ self.write(0x00, 0x01) # ap_start = 1
+
+ def wait_until_done(self):
+ while (self.read(0x00) & 0x2) == 0: # Wait for ap_done
+ time.sleep(0.001)
+
+ def set_input(self, idx, buffer):
+
+ print(
+ f"input {self.INP_PORT_NAMEs[idx]} will be set to addr: {hex(buffer.physical_address)} with elements: {buffer.size}"
+ )
+ self.write(self.REG_ADDR_INP_PTRs[idx], buffer.physical_address)
+ self.write(self.REG_ADDR_INP_PTRs[idx] + 4, 0)
+ buffer.flush()
+
+ def set_output(self, idx, buffer):
+
+ print(
+ f"output {self.OUT_PORT_NAMEs[idx]} will be set to addr: {hex(buffer.physical_address)} with elements: {buffer.size}"
+ )
+ self.write(self.REG_ADDR_OUT_PTRs[idx], buffer.physical_address)
+ self.write(self.REG_ADDR_OUT_PTRs[idx] + 4, 0)
+
+ def set_amt_query(self, val):
+ print(f"amount of queries will be set to: {val} at address: {hex(self.REG_ADDR_BATCH_SIZE)}")
+ self.write(self.REG_ADDR_BATCH_SIZE, val)
+
+ def prepare_intr(self):
+ print("prepare your interrupt")
+ self.enable_gie()
+ self.enable_done_intr()
+ self.clear_done_status()
+ print("----------------------")
+
+ def build_event_and_run(self, intr, profile):
+
+ async def wait_for_acc():
+ exec_time = 0
+ print("starting the accelerator")
+ if profile:
+ t_start = time.perf_counter()
+
+ # Start receive (PL → PS)
+ # Start send (PS → PL)
+ self.ctrl_start()
+
+ # Wait for complete
+ await intr.wait()
+
+ # print porfile data
+ if profile:
+ t_end = time.perf_counter()
+ exec_time = t_end - t_start
+ print(f"Accelerator execution time: \
+ {(exec_time) * 1e3:.3f} ms")
+
+ print("accelerator has finished")
+
+ return exec_time if profile else None
+
+ # get event loop from asyncio
+ loop = asyncio.get_event_loop()
+ # build task
+ task = loop.create_task(wait_for_acc())
+ # run and return whatever inside the wait_for_acc return
+ return loop.run_until_complete(task)
+
+ def transfer(self, input_buffer, output_buffer, intr, profile = True):
+
+ # flush the buffer first
+ input_buffer.flush()
+ # prepare the data
+ self.set_input(0, input_buffer)
+ self.set_output(0, output_buffer)
+ self.set_amt_query(input_buffer.shape[0])
+ self.prepare_intr()
+ # run and get the profile data
+ exec_time = self.build_event_and_run(intr, profile)
+ # invalidate the output buffer
+ output_buffer.invalidate()
+ # it will return 0 if the profile is not enable
+ return exec_time
diff --git a/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_stream_driver.py.hls4ml b/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_stream_driver.py.hls4ml
new file mode 100644
index 0000000000..a0a32187d2
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/kv260/python_drivers/axi_stream_driver.py.hls4ml
@@ -0,0 +1,145 @@
+from datetime import datetime
+
+# import the library
+from pynq import Overlay # import the overlay
+from pynq import allocate # import for CMA (contingeous memory allocation)
+from pynq import DefaultIP # import the ip connector library for extension
+from pynq import Interrupt
+from pynq import PL
+
+import asyncio
+import numpy as np
+import os
+import subprocess
+import re
+import time
+
+
+class NeuralNetworkOverlay(Overlay):
+ def __init__(
+ self, bitfile_name, x_shape, y_shape, dtype=np.float32, dtbo=None, download=True, ignore_version=False, device=None
+ ):
+ super().__init__(bitfile_name, dtbo=None, download=True, ignore_version=False, device=None)
+ self.input_buffer = allocate(shape=x_shape, dtype=dtype)
+ self.output_buffer = allocate(shape=y_shape, dtype=dtype)
+
+ def calculate_performance(self, N, execution_time):
+ rate = N / execution_time if execution_time > 0 else float('inf')
+ print(
+ f"Processed elements: {N}, Execution time: {execution_time:.4f} seconds, Performance rate: {rate:.2f} inferences/second")
+ return rate
+
+
+ def predict(self, X, debug=False, profile=False, encode=None, decode=None):
+ """
+ Obtain the predictions of the NN implemented in the FPGA.
+ Parameters:
+ - X : the input vector. Should be numpy ndarray.
+ - dtype : the data type of the elements of the input/output vectors.
+ Note: it should be set depending on the interface of the accelerator; if it uses 'float'
+ types for the 'data' AXI-Stream field, 'np.float32' dtype is the correct one to use.
+ Instead if it uses 'ap_fixed', 'np.intA' is the correct one to use (note that A cannot
+ any integer value, but it can assume {..., 8, 16, 32, ...} values. Check `numpy`
+ doc for more info).
+ In this case the encoding/decoding has to be computed by the PS. For example for
+ 'ap_fixed<16,6>' type the following 2 functions are the correct one to use for encode/decode
+ 'float' -> 'ap_fixed<16,6>':
+ ```
+ def encode(xi):
+ return np.int16(round(xi * 2**10)) # note 2**10 = 2**(A-B)
+ def decode(yi):
+ return yi * 2**-10
+ encode_v = np.vectorize(encode) # to apply them element-wise
+ decode_v = np.vectorize(decode)
+ ```
+ - profile : boolean. Set it to `True` to print the performance of the algorithm in term of `inference/s`.
+ - encode/decode: function pointers. See `dtype` section for more information.
+ - return: an output array based on `np.ndarray` with a shape equal to `y_shape` and a `dtype` equal to
+ the namesake parameter.
+ """
+
+ PL.reset()
+ my_interrupt = Interrupt("axi_dma_0/s2mm_introut")
+
+ dma = self.axi_dma_0
+ ip = self.
+ ip.assign_dma(dma)
+
+
+ if encode is not None:
+ X = encode(X)
+ np.copyto(self.input_buffer, X)
+ exec_time = ip.transfer(self.input_buffer, self.output_buffer, my_interrupt, profile)
+ # exec_time will valid only when the profile is enabled
+ if decode is not None:
+ self.output_buffer = decode(self.output_buffer)
+
+ if profile:
+ performance = self.calculate_performance(len(X), exec_time)
+ return self.output_buffer, exec_time, performance
+ return self.output_buffer
+
+class HLS4ML_IP(DefaultIP):
+
+ def __init__(self, description):
+ super().__init__(description)
+ self.dma = None
+ self.REG_ADDR_BATCH_SIZE = 0x10
+
+ bindto = ['xilinx.com:hls::1.0']
+
+ def assign_dma(self, dma):
+ self.dma = dma
+
+ def set_amt_query(self, val):
+ print(f"amount of queries will be set to: {val} at address: {hex(self.REG_ADDR_BATCH_SIZE)}")
+ self.write(self.REG_ADDR_BATCH_SIZE, val)
+
+ def ctrl_start(self):
+ # auto_restart + ap_start
+ self.write(0x00, 1 << 0)
+
+ def transfer(self, input_buffer, output_buffer, intr, profile = True):
+
+ # check availability of dma
+ assert self.dma is not None, "dma is not assigned"
+ # flush the buffer first
+ input_buffer.flush()
+ # initialize the batch tracker and ip control
+ self.set_amt_query(input_buffer.shape[0])
+ self.ctrl_start()
+
+ async def wait_for_acc():
+ exec_time = 0
+ print("starting the accelerator")
+ # Start receive (PL → PS)
+ if profile:
+ t_start = time.perf_counter()
+ self.dma.recvchannel.transfer(output_buffer)
+
+ # Start send (PS → PL)
+ self.dma.sendchannel.transfer(input_buffer)
+
+ # Wait for complete
+ await intr.wait()
+
+ # print porfile data
+ if profile:
+ t_end = time.perf_counter()
+ exec_time = t_end - t_start
+ print(f"Accelerator execution time: \
+ {(t_end - t_start) * 1e3:.3f} ms")
+
+
+ print("accelerator has finished")
+ return exec_time if profile else None
+
+ # get event loop from asyncio
+ loop = asyncio.get_event_loop()
+ task = loop.create_task(wait_for_acc())
+ # loop until end
+ exec_time = loop.run_until_complete(task)
+ # invalidate the output buffer
+ output_buffer.invalidate()
+ # it will return 0 if the profile is not enable
+ return exec_time
diff --git a/hls4ml/templates/vitis_unified/kv260/tcl_scripts/create_xsa.tcl b/hls4ml/templates/vitis_unified/kv260/tcl_scripts/create_xsa.tcl
new file mode 100644
index 0000000000..a43eb88684
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/kv260/tcl_scripts/create_xsa.tcl
@@ -0,0 +1,67 @@
+################################################################
+# create_xsa.tcl
+#
+# Sources kv260_axi_all_platform.tcl to build the block design, then creates
+# the HDL wrapper and exports the XSA hardware description file.
+#
+# Usage:
+# cd
+# vivado -mode batch -source create_xsa.tcl
+#
+# Output:
+# output/kv260_axi_all_platform.xsa
+#
+# Requirements:
+# Vivado 2023.2 with KV260 board files installed
+#
+# Note: For a clean run, remove the myproj/ directory first if it
+# exists from a previous run.
+################################################################
+
+set script_dir [file dirname [file normalize [info script]]]
+set output_dir [file join $script_dir "output"]
+set xsa_path [file join $output_dir "kv260_axi_all_platform.xsa"]
+
+file mkdir $output_dir
+
+# Change to script directory so kv260_axi_all_platform.tcl is found
+cd $script_dir
+
+# ----------------------------------------------------------------
+# Build block design (creates project + BD via kv260_axi_all_platform.tcl)
+# ----------------------------------------------------------------
+source [file join $script_dir "kv260_axi_all_platform.tcl"]
+
+# ----------------------------------------------------------------
+# Create HDL wrapper
+# ----------------------------------------------------------------
+set bd_file [get_files -norecurse "vitis_design.bd"]
+make_wrapper -files $bd_file -top
+
+# make_wrapper creates {bd_base_name}_wrapper.v for vitis_design.bd
+set wrapper_name "vitis_design_wrapper"
+set proj_dir [get_property directory [current_project]]
+add_files -norecurse [file join $proj_dir "project_1.gen" "sources_1" "bd" "vitis_design" "hdl" "${wrapper_name}.v"]
+set_property top $wrapper_name [current_fileset]
+update_compile_order -fileset sources_1
+
+# ----------------------------------------------------------------
+# Generate block design outputs (required before write_hw_platform)
+# ----------------------------------------------------------------
+generate_target all [get_files vitis_design.bd]
+
+# ----------------------------------------------------------------
+# Platform design intent (required for v++ accelerated platform)
+# ----------------------------------------------------------------
+set_property platform.default_output_type "sd_card" [current_project]
+set_property platform.design_intent.embedded "true" [current_project]
+set_property platform.design_intent.server_managed "false" [current_project]
+set_property platform.design_intent.external_host "false" [current_project]
+set_property platform.design_intent.datacenter "false" [current_project]
+
+# ----------------------------------------------------------------
+# Export XSA as extensible pre-synthesis platform (for v++ link)
+# ----------------------------------------------------------------
+write_hw_platform -hw -force -file $xsa_path
+
+puts "INFO: XSA written to $xsa_path"
diff --git a/hls4ml/templates/vitis_unified/kv260/tcl_scripts/kv260_axi_all_platform.tcl b/hls4ml/templates/vitis_unified/kv260/tcl_scripts/kv260_axi_all_platform.tcl
new file mode 100644
index 0000000000..d248c0a395
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/kv260/tcl_scripts/kv260_axi_all_platform.tcl
@@ -0,0 +1,1338 @@
+
+################################################################
+# This is a generated script based on design: vitis_design
+#
+# Though there are limitations about the generated script,
+# the main purpose of this utility is to make learning
+# IP Integrator Tcl commands easier.
+################################################################
+
+namespace eval _tcl {
+proc get_script_folder {} {
+ set script_path [file normalize [info script]]
+ set script_folder [file dirname $script_path]
+ return $script_folder
+}
+}
+variable script_folder
+set script_folder [_tcl::get_script_folder]
+
+################################################################
+# Check if script is running in correct Vivado version.
+################################################################
+set scripts_vivado_version 2023.2
+set current_vivado_version [version -short]
+
+if { [string first $scripts_vivado_version $current_vivado_version] == -1 } {
+ puts ""
+ if { [string compare $scripts_vivado_version $current_vivado_version] > 0 } {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2042 -severity "ERROR" " This script was generated using Vivado <$scripts_vivado_version> and is being run in <$current_vivado_version> of Vivado. Sourcing the script failed since it was created with a future version of Vivado."}
+
+ } else {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2041 -severity "ERROR" "This script was generated using Vivado <$scripts_vivado_version> and is being run in <$current_vivado_version> of Vivado. Please run the script in Vivado <$scripts_vivado_version> then open the design in Vivado <$current_vivado_version>. Upgrade the design by running \"Tools => Report => Report IP Status...\", then run write_bd_tcl to create an updated script."}
+
+ }
+
+ return 1
+}
+
+################################################################
+# START
+################################################################
+
+# To test this script, run the following commands from Vivado Tcl console:
+# source vitis_design_script.tcl
+
+# If there is no project opened, this script will create a
+# project, but make sure you do not have an existing project
+# <./myproj/project_1.xpr> in the current working folder.
+
+set list_projs [get_projects -quiet]
+if { $list_projs eq "" } {
+ create_project project_1 myproj -part xck26-sfvc784-2LV-c
+ set_property board_part xilinx.com:kv260_som:part0:1.4 [current_project]
+ set_property board_connections {som240_1_connector xilinx.com:kv260_carrier:som240_1_connector:1.3} [current_project]
+}
+set_property platform.extensible true [current_project]
+
+
+# CHANGE DESIGN NAME HERE
+variable design_name
+set design_name vitis_design
+
+# If you do not already have an existing IP Integrator design open,
+# you can create a design using the following command:
+# create_bd_design $design_name
+
+# Creating design if needed
+set errMsg ""
+set nRet 0
+
+set cur_design [current_bd_design -quiet]
+set list_cells [get_bd_cells -quiet]
+
+if { ${design_name} eq "" } {
+ # USE CASES:
+ # 1) Design_name not set
+
+ set errMsg "Please set the variable to a non-empty value."
+ set nRet 1
+
+} elseif { ${cur_design} ne "" && ${list_cells} eq "" } {
+ # USE CASES:
+ # 2): Current design opened AND is empty AND names same.
+ # 3): Current design opened AND is empty AND names diff; design_name NOT in project.
+ # 4): Current design opened AND is empty AND names diff; design_name exists in project.
+
+ if { $cur_design ne $design_name } {
+ common::send_gid_msg -ssname BD::TCL -id 2001 -severity "INFO" "Changing value of from <$design_name> to <$cur_design> since current design is empty."
+ set design_name [get_property NAME $cur_design]
+ }
+ common::send_gid_msg -ssname BD::TCL -id 2002 -severity "INFO" "Constructing design in IPI design <$cur_design>..."
+
+} elseif { ${cur_design} ne "" && $list_cells ne "" && $cur_design eq $design_name } {
+ # USE CASES:
+ # 5) Current design opened AND has components AND same names.
+
+ set errMsg "Design <$design_name> already exists in your project, please set the variable to another value."
+ set nRet 1
+} elseif { [get_files -quiet ${design_name}.bd] ne "" } {
+ # USE CASES:
+ # 6) Current opened design, has components, but diff names, design_name exists in project.
+ # 7) No opened design, design_name exists in project.
+
+ set errMsg "Design <$design_name> already exists in your project, please set the variable to another value."
+ set nRet 2
+
+} else {
+ # USE CASES:
+ # 8) No opened design, design_name not in project.
+ # 9) Current opened design, has components, but diff names, design_name not in project.
+
+ common::send_gid_msg -ssname BD::TCL -id 2003 -severity "INFO" "Currently there is no design <$design_name> in project, so creating one..."
+
+ create_bd_design $design_name
+
+ common::send_gid_msg -ssname BD::TCL -id 2004 -severity "INFO" "Making design <$design_name> as current_bd_design."
+ current_bd_design $design_name
+
+}
+
+common::send_gid_msg -ssname BD::TCL -id 2005 -severity "INFO" "Currently the variable is equal to \"$design_name\"."
+
+if { $nRet != 0 } {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2006 -severity "ERROR" $errMsg}
+ return $nRet
+}
+
+set bCheckIPsPassed 1
+##################################################################
+# CHECK IPs
+##################################################################
+set bCheckIPs 1
+if { $bCheckIPs == 1 } {
+ set list_check_ips "\
+xilinx.com:ip:axi_dma:7.1\
+xilinx.com:ip:axi_intc:4.1\
+xilinx.com:ip:smartconnect:1.0\
+xilinx.com:ip:proc_sys_reset:5.0\
+xilinx.com:ip:zynq_ultra_ps_e:3.5\
+xilinx.com:ip:xlconcat:2.1\
+"
+
+ set list_ips_missing ""
+ common::send_gid_msg -ssname BD::TCL -id 2011 -severity "INFO" "Checking if the following IPs exist in the project's IP catalog: $list_check_ips ."
+
+ foreach ip_vlnv $list_check_ips {
+ set ip_obj [get_ipdefs -all $ip_vlnv]
+ if { $ip_obj eq "" } {
+ lappend list_ips_missing $ip_vlnv
+ }
+ }
+
+ if { $list_ips_missing ne "" } {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2012 -severity "ERROR" "The following IPs are not found in the IP Catalog:\n $list_ips_missing\n\nResolution: Please add the repository containing the IP(s) to the project." }
+ set bCheckIPsPassed 0
+ }
+
+}
+
+if { $bCheckIPsPassed != 1 } {
+ common::send_gid_msg -ssname BD::TCL -id 2023 -severity "WARNING" "Will not continue with creation of design due to the error(s) above."
+ return 3
+}
+
+##################################################################
+# DESIGN PROCs
+##################################################################
+
+
+
+# Procedure to create entire design; Provide argument to make
+# procedure reusable. If parentCell is "", will use root.
+proc create_root_design { parentCell } {
+
+ variable script_folder
+ variable design_name
+
+ if { $parentCell eq "" } {
+ set parentCell [get_bd_cells /]
+ }
+
+ # Get object for parentCell
+ set parentObj [get_bd_cells $parentCell]
+ if { $parentObj == "" } {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2090 -severity "ERROR" "Unable to find parent cell <$parentCell>!"}
+ return
+ }
+
+ # Make sure parentObj is hier blk
+ set parentType [get_property TYPE $parentObj]
+ if { $parentType ne "hier" } {
+ catch {common::send_gid_msg -ssname BD::TCL -id 2091 -severity "ERROR" "Parent <$parentObj> has TYPE = <$parentType>. Expected to be ."}
+ return
+ }
+
+ # Save current instance; Restore later
+ set oldCurInst [current_bd_instance .]
+
+ # Set parent object as current
+ current_bd_instance $parentObj
+
+
+ # Create interface ports
+
+ # Create ports
+
+ # Create instance: axi_dma_0, and set properties
+ set axi_dma_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_dma:7.1 axi_dma_0 ]
+ set_property -dict [list \
+ CONFIG.c_include_sg {0} \
+ CONFIG.c_sg_length_width {26} \
+ ] $axi_dma_0
+
+
+ # Create instance: axi_intc_0, and set properties
+ set axi_intc_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_intc:4.1 axi_intc_0 ]
+ set_property CONFIG.C_IRQ_CONNECTION {1} $axi_intc_0
+
+
+ # Create instance: axi_interconnect_0, and set properties
+ set axi_interconnect_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect:2.1 axi_interconnect_0 ]
+ set_property -dict [list \
+ CONFIG.NUM_MI {2} \
+ CONFIG.NUM_SI {1} \
+ ] $axi_interconnect_0
+
+
+ # Create instance: axi_smc, and set properties
+ set axi_smc [ create_bd_cell -type ip -vlnv xilinx.com:ip:smartconnect:1.0 axi_smc ]
+ set_property CONFIG.NUM_SI {2} $axi_smc
+
+
+ # Create instance: rst_ps8_0_99M, and set properties
+ set rst_ps8_0_99M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_ps8_0_99M ]
+
+ # Create instance: zynq_ultra_ps_e_0, and set properties
+ set zynq_ultra_ps_e_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e:3.5 zynq_ultra_ps_e_0 ]
+ set_property -dict [list \
+ CONFIG.CAN0_BOARD_INTERFACE {custom} \
+ CONFIG.CAN1_BOARD_INTERFACE {custom} \
+ CONFIG.CSU_BOARD_INTERFACE {custom} \
+ CONFIG.DP_BOARD_INTERFACE {custom} \
+ CONFIG.GEM0_BOARD_INTERFACE {custom} \
+ CONFIG.GEM1_BOARD_INTERFACE {custom} \
+ CONFIG.GEM2_BOARD_INTERFACE {custom} \
+ CONFIG.GEM3_BOARD_INTERFACE {custom} \
+ CONFIG.GPIO_BOARD_INTERFACE {custom} \
+ CONFIG.IIC0_BOARD_INTERFACE {custom} \
+ CONFIG.IIC1_BOARD_INTERFACE {custom} \
+ CONFIG.NAND_BOARD_INTERFACE {custom} \
+ CONFIG.PCIE_BOARD_INTERFACE {custom} \
+ CONFIG.PJTAG_BOARD_INTERFACE {custom} \
+ CONFIG.PMU_BOARD_INTERFACE {custom} \
+ CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18} \
+ CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18} \
+ CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18} \
+ CONFIG.PSU_BANK_3_IO_STANDARD {LVCMOS18} \
+ CONFIG.PSU_DDR_RAM_HIGHADDR {0xFFFFFFFF} \
+ CONFIG.PSU_DDR_RAM_HIGHADDR_OFFSET {0x800000000} \
+ CONFIG.PSU_DDR_RAM_LOWADDR_OFFSET {0x80000000} \
+ CONFIG.PSU_IMPORT_BOARD_PRESET {} \
+ CONFIG.PSU_MIO_0_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_0_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_0_SLEW {slow} \
+ CONFIG.PSU_MIO_10_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_10_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_10_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_10_SLEW {slow} \
+ CONFIG.PSU_MIO_11_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_11_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_11_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_11_SLEW {slow} \
+ CONFIG.PSU_MIO_12_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_12_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_12_POLARITY {Default} \
+ CONFIG.PSU_MIO_12_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_12_SLEW {slow} \
+ CONFIG.PSU_MIO_13_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_13_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_13_POLARITY {Default} \
+ CONFIG.PSU_MIO_13_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_13_SLEW {slow} \
+ CONFIG.PSU_MIO_14_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_14_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_14_POLARITY {Default} \
+ CONFIG.PSU_MIO_14_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_14_SLEW {slow} \
+ CONFIG.PSU_MIO_15_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_15_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_15_POLARITY {Default} \
+ CONFIG.PSU_MIO_15_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_15_SLEW {slow} \
+ CONFIG.PSU_MIO_16_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_16_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_16_POLARITY {Default} \
+ CONFIG.PSU_MIO_16_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_16_SLEW {slow} \
+ CONFIG.PSU_MIO_17_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_17_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_17_POLARITY {Default} \
+ CONFIG.PSU_MIO_17_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_17_SLEW {slow} \
+ CONFIG.PSU_MIO_18_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_18_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_18_POLARITY {Default} \
+ CONFIG.PSU_MIO_18_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_18_SLEW {slow} \
+ CONFIG.PSU_MIO_19_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_19_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_19_POLARITY {Default} \
+ CONFIG.PSU_MIO_19_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_19_SLEW {slow} \
+ CONFIG.PSU_MIO_1_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_1_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_1_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_1_SLEW {slow} \
+ CONFIG.PSU_MIO_20_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_20_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_20_POLARITY {Default} \
+ CONFIG.PSU_MIO_20_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_20_SLEW {slow} \
+ CONFIG.PSU_MIO_21_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_21_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_21_POLARITY {Default} \
+ CONFIG.PSU_MIO_21_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_21_SLEW {slow} \
+ CONFIG.PSU_MIO_22_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_22_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_22_POLARITY {Default} \
+ CONFIG.PSU_MIO_22_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_22_SLEW {slow} \
+ CONFIG.PSU_MIO_23_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_23_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_23_POLARITY {Default} \
+ CONFIG.PSU_MIO_23_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_23_SLEW {slow} \
+ CONFIG.PSU_MIO_24_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_24_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_24_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_24_SLEW {slow} \
+ CONFIG.PSU_MIO_25_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_25_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_25_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_25_SLEW {slow} \
+ CONFIG.PSU_MIO_26_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_26_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_27_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_27_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_27_SLEW {slow} \
+ CONFIG.PSU_MIO_28_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_28_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_29_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_29_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_29_SLEW {slow} \
+ CONFIG.PSU_MIO_2_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_2_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_2_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_2_SLEW {slow} \
+ CONFIG.PSU_MIO_30_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_30_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_31_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_31_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_32_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_32_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_32_POLARITY {Default} \
+ CONFIG.PSU_MIO_32_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_32_SLEW {slow} \
+ CONFIG.PSU_MIO_33_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_33_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_33_POLARITY {Default} \
+ CONFIG.PSU_MIO_33_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_33_SLEW {slow} \
+ CONFIG.PSU_MIO_34_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_34_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_34_POLARITY {Default} \
+ CONFIG.PSU_MIO_34_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_34_SLEW {slow} \
+ CONFIG.PSU_MIO_35_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_35_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_35_SLEW {slow} \
+ CONFIG.PSU_MIO_36_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_36_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_36_SLEW {slow} \
+ CONFIG.PSU_MIO_37_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_37_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_38_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_38_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_38_POLARITY {Default} \
+ CONFIG.PSU_MIO_38_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_38_SLEW {slow} \
+ CONFIG.PSU_MIO_39_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_39_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_39_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_39_SLEW {slow} \
+ CONFIG.PSU_MIO_3_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_3_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_3_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_3_SLEW {slow} \
+ CONFIG.PSU_MIO_40_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_40_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_40_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_40_SLEW {slow} \
+ CONFIG.PSU_MIO_41_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_41_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_41_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_41_SLEW {slow} \
+ CONFIG.PSU_MIO_42_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_42_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_42_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_42_SLEW {slow} \
+ CONFIG.PSU_MIO_43_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_43_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_43_SLEW {slow} \
+ CONFIG.PSU_MIO_44_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_44_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_44_POLARITY {Default} \
+ CONFIG.PSU_MIO_44_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_44_SLEW {slow} \
+ CONFIG.PSU_MIO_45_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_45_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_46_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_46_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_46_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_46_SLEW {slow} \
+ CONFIG.PSU_MIO_47_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_47_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_47_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_47_SLEW {slow} \
+ CONFIG.PSU_MIO_48_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_48_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_48_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_48_SLEW {slow} \
+ CONFIG.PSU_MIO_49_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_49_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_49_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_49_SLEW {slow} \
+ CONFIG.PSU_MIO_4_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_4_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_4_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_4_SLEW {slow} \
+ CONFIG.PSU_MIO_50_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_50_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_50_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_50_SLEW {slow} \
+ CONFIG.PSU_MIO_51_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_51_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_51_SLEW {slow} \
+ CONFIG.PSU_MIO_52_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_52_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_53_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_53_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_54_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_54_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_54_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_54_SLEW {slow} \
+ CONFIG.PSU_MIO_55_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_55_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_56_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_56_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_56_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_56_SLEW {slow} \
+ CONFIG.PSU_MIO_57_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_57_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_57_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_57_SLEW {slow} \
+ CONFIG.PSU_MIO_58_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_58_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_58_SLEW {slow} \
+ CONFIG.PSU_MIO_59_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_59_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_59_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_59_SLEW {slow} \
+ CONFIG.PSU_MIO_5_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_5_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_5_SLEW {slow} \
+ CONFIG.PSU_MIO_60_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_60_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_60_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_60_SLEW {slow} \
+ CONFIG.PSU_MIO_61_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_61_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_61_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_61_SLEW {slow} \
+ CONFIG.PSU_MIO_62_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_62_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_62_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_62_SLEW {slow} \
+ CONFIG.PSU_MIO_63_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_63_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_63_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_63_SLEW {slow} \
+ CONFIG.PSU_MIO_64_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_64_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_64_SLEW {slow} \
+ CONFIG.PSU_MIO_65_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_65_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_65_SLEW {slow} \
+ CONFIG.PSU_MIO_66_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_66_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_66_SLEW {slow} \
+ CONFIG.PSU_MIO_67_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_67_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_67_SLEW {slow} \
+ CONFIG.PSU_MIO_68_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_68_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_68_SLEW {slow} \
+ CONFIG.PSU_MIO_69_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_69_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_69_SLEW {slow} \
+ CONFIG.PSU_MIO_6_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_6_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_6_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_6_SLEW {slow} \
+ CONFIG.PSU_MIO_70_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_70_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_71_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_71_PULLUPDOWN {disable} \
+ CONFIG.PSU_MIO_72_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_72_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_73_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_73_PULLUPDOWN {disable} \
+ CONFIG.PSU_MIO_74_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_74_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_75_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_75_PULLUPDOWN {disable} \
+ CONFIG.PSU_MIO_76_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_76_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_76_SLEW {slow} \
+ CONFIG.PSU_MIO_77_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_77_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_77_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_77_SLEW {slow} \
+ CONFIG.PSU_MIO_7_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_7_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_7_POLARITY {Default} \
+ CONFIG.PSU_MIO_7_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_7_SLEW {slow} \
+ CONFIG.PSU_MIO_8_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_8_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_8_POLARITY {Default} \
+ CONFIG.PSU_MIO_8_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_8_SLEW {slow} \
+ CONFIG.PSU_MIO_9_DRIVE_STRENGTH {4} \
+ CONFIG.PSU_MIO_9_INPUT_TYPE {cmos} \
+ CONFIG.PSU_MIO_9_PULLUPDOWN {pullup} \
+ CONFIG.PSU_MIO_9_SLEW {slow} \
+ CONFIG.PSU_MIO_TREE_PERIPHERALS {Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#SPI 1#GPIO0 MIO#GPIO0 MIO#SPI 1#SPI 1#SPI 1#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0\
+MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#GPIO0 MIO#I2C 1#I2C 1#PMU GPI 0#DPAUX#DPAUX#DPAUX#DPAUX#PMU GPI 5#GPIO1 MIO#GPIO1 MIO#GPIO1 MIO#PMU GPO 3#UART 1#UART 1#GPIO1 MIO#SD\
+1#SD 1#SD 1#SD 1#SD 1#GPIO1 MIO#SD 1#SD 1#SD 1#SD 1#SD 1#SD 1#SD 1#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem 3#Gem\
+3#Gem 3#MDIO 3#MDIO 3} \
+ CONFIG.PSU_MIO_TREE_SIGNALS {sclk_out#miso_mo1#mo2#mo3#mosi_mi0#n_ss_out#sclk_out#gpio0[7]#gpio0[8]#n_ss_out[0]#miso#mosi#gpio0[12]#gpio0[13]#gpio0[14]#gpio0[15]#gpio0[16]#gpio0[17]#gpio0[18]#gpio0[19]#gpio0[20]#gpio0[21]#gpio0[22]#gpio0[23]#scl_out#sda_out#gpi[0]#dp_aux_data_out#dp_hot_plug_detect#dp_aux_data_oe#dp_aux_data_in#gpi[5]#gpio1[32]#gpio1[33]#gpio1[34]#gpo[3]#txd#rxd#gpio1[38]#sdio1_data_out[4]#sdio1_data_out[5]#sdio1_data_out[6]#sdio1_data_out[7]#sdio1_bus_pow#gpio1[44]#sdio1_cd_n#sdio1_data_out[0]#sdio1_data_out[1]#sdio1_data_out[2]#sdio1_data_out[3]#sdio1_cmd_out#sdio1_clk_out#ulpi_clk_in#ulpi_dir#ulpi_tx_data[2]#ulpi_nxt#ulpi_tx_data[0]#ulpi_tx_data[1]#ulpi_stp#ulpi_tx_data[3]#ulpi_tx_data[4]#ulpi_tx_data[5]#ulpi_tx_data[6]#ulpi_tx_data[7]#rgmii_tx_clk#rgmii_txd[0]#rgmii_txd[1]#rgmii_txd[2]#rgmii_txd[3]#rgmii_tx_ctl#rgmii_rx_clk#rgmii_rxd[0]#rgmii_rxd[1]#rgmii_rxd[2]#rgmii_rxd[3]#rgmii_rx_ctl#gem3_mdc#gem3_mdio_out}\
+\
+ CONFIG.PSU_PERIPHERAL_BOARD_PRESET {} \
+ CONFIG.PSU_SD0_INTERNAL_BUS_WIDTH {8} \
+ CONFIG.PSU_SD1_INTERNAL_BUS_WIDTH {8} \
+ CONFIG.PSU_SMC_CYCLE_T0 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T1 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T2 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T3 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T4 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T5 {NA} \
+ CONFIG.PSU_SMC_CYCLE_T6 {NA} \
+ CONFIG.PSU_USB3__DUAL_CLOCK_ENABLE {1} \
+ CONFIG.PSU_VALUE_SILVERSION {3} \
+ CONFIG.PSU__ACPU0__POWER__ON {1} \
+ CONFIG.PSU__ACPU1__POWER__ON {1} \
+ CONFIG.PSU__ACPU2__POWER__ON {1} \
+ CONFIG.PSU__ACPU3__POWER__ON {1} \
+ CONFIG.PSU__ACTUAL__IP {1} \
+ CONFIG.PSU__ACT_DDR_FREQ_MHZ {1066.656006} \
+ CONFIG.PSU__AFI0_COHERENCY {0} \
+ CONFIG.PSU__AUX_REF_CLK__FREQMHZ {33.333} \
+ CONFIG.PSU__CAN0_LOOP_CAN1__ENABLE {0} \
+ CONFIG.PSU__CAN0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__CAN1__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__ACPU_CTRL__ACT_FREQMHZ {1333.333008} \
+ CONFIG.PSU__CRF_APB__ACPU_CTRL__FREQMHZ {1333.333} \
+ CONFIG.PSU__CRF_APB__ACPU_CTRL__SRCSEL {APLL} \
+ CONFIG.PSU__CRF_APB__ACPU__FRAC_ENABLED {1} \
+ CONFIG.PSU__CRF_APB__AFI0_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI0_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI0_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI0_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI0_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__AFI1_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI1_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI1_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI1_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI1_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__AFI2_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI2_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI2_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI2_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI2_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__AFI3_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI3_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI3_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI3_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI3_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__AFI4_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI4_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI4_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI4_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI4_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__AFI5_REF_CTRL__ACT_FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI5_REF_CTRL__DIVISOR0 {2} \
+ CONFIG.PSU__CRF_APB__AFI5_REF_CTRL__FREQMHZ {667} \
+ CONFIG.PSU__CRF_APB__AFI5_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__AFI5_REF__ENABLE {0} \
+ CONFIG.PSU__CRF_APB__APLL_CTRL__FRACFREQ {1333.333} \
+ CONFIG.PSU__CRF_APB__APLL_CTRL__SRCSEL {PSS_REF_CLK} \
+ CONFIG.PSU__CRF_APB__APLL_FRAC_CFG__ENABLED {1} \
+ CONFIG.PSU__CRF_APB__APM_CTRL__ACT_FREQMHZ {1} \
+ CONFIG.PSU__CRF_APB__APM_CTRL__DIVISOR0 {1} \
+ CONFIG.PSU__CRF_APB__APM_CTRL__FREQMHZ {1} \
+ CONFIG.PSU__CRF_APB__DBG_FPD_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRF_APB__DBG_FPD_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__DBG_FPD_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRF_APB__DBG_TRACE_CTRL__ACT_FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__DBG_TRACE_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__DBG_TRACE_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRF_APB__DBG_TSTMP_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRF_APB__DBG_TSTMP_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__DBG_TSTMP_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRF_APB__DDR_CTRL__ACT_FREQMHZ {533.328003} \
+ CONFIG.PSU__CRF_APB__DDR_CTRL__FREQMHZ {1200} \
+ CONFIG.PSU__CRF_APB__DDR_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__DPDMA_REF_CTRL__ACT_FREQMHZ {444.444336} \
+ CONFIG.PSU__CRF_APB__DPDMA_REF_CTRL__FREQMHZ {600} \
+ CONFIG.PSU__CRF_APB__DPDMA_REF_CTRL__SRCSEL {APLL} \
+ CONFIG.PSU__CRF_APB__DPLL_CTRL__FRACFREQ {27.138} \
+ CONFIG.PSU__CRF_APB__DPLL_CTRL__SRCSEL {PSS_REF_CLK} \
+ CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__ACT_FREQMHZ {24.242182} \
+ CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__FREQMHZ {25} \
+ CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRF_APB__DP_AUDIO__FRAC_ENABLED {0} \
+ CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__ACT_FREQMHZ {26.666401} \
+ CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__FREQMHZ {27} \
+ CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__ACT_FREQMHZ {299.997009} \
+ CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__FREQMHZ {300} \
+ CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__SRCSEL {VPLL} \
+ CONFIG.PSU__CRF_APB__DP_VIDEO__FRAC_ENABLED {0} \
+ CONFIG.PSU__CRF_APB__GDMA_REF_CTRL__ACT_FREQMHZ {533.328003} \
+ CONFIG.PSU__CRF_APB__GDMA_REF_CTRL__FREQMHZ {600} \
+ CONFIG.PSU__CRF_APB__GDMA_REF_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__GPU_REF_CTRL__ACT_FREQMHZ {499.994995} \
+ CONFIG.PSU__CRF_APB__GPU_REF_CTRL__FREQMHZ {600} \
+ CONFIG.PSU__CRF_APB__GPU_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRF_APB__GTGREF0_REF_CTRL__ACT_FREQMHZ {-1} \
+ CONFIG.PSU__CRF_APB__GTGREF0_REF_CTRL__DIVISOR0 {-1} \
+ CONFIG.PSU__CRF_APB__GTGREF0_REF_CTRL__FREQMHZ {-1} \
+ CONFIG.PSU__CRF_APB__GTGREF0_REF_CTRL__SRCSEL {NA} \
+ CONFIG.PSU__CRF_APB__GTGREF0__ENABLE {NA} \
+ CONFIG.PSU__CRF_APB__PCIE_REF_CTRL__ACT_FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__SATA_REF_CTRL__ACT_FREQMHZ {250} \
+ CONFIG.PSU__CRF_APB__TOPSW_LSBUS_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRF_APB__TOPSW_LSBUS_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRF_APB__TOPSW_LSBUS_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__ACT_FREQMHZ {533.328003} \
+ CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__FREQMHZ {533.33} \
+ CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__SRCSEL {DPLL} \
+ CONFIG.PSU__CRF_APB__VPLL_CTRL__FRACFREQ {27.138} \
+ CONFIG.PSU__CRF_APB__VPLL_CTRL__SRCSEL {PSS_REF_CLK} \
+ CONFIG.PSU__CRL_APB__ADMA_REF_CTRL__ACT_FREQMHZ {499.994995} \
+ CONFIG.PSU__CRL_APB__ADMA_REF_CTRL__FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__ADMA_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__AFI6_REF_CTRL__ACT_FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__AFI6_REF_CTRL__FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__AFI6_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__AFI6__ENABLE {0} \
+ CONFIG.PSU__CRL_APB__AMS_REF_CTRL__ACT_FREQMHZ {49.999500} \
+ CONFIG.PSU__CRL_APB__AMS_REF_CTRL__FREQMHZ {50} \
+ CONFIG.PSU__CRL_APB__AMS_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__CAN0_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__CAN0_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__CAN0_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__CAN1_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__CAN1_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__CAN1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__CPU_R5_CTRL__ACT_FREQMHZ {533.328003} \
+ CONFIG.PSU__CRL_APB__CPU_R5_CTRL__FREQMHZ {533.333} \
+ CONFIG.PSU__CRL_APB__CPU_R5_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRL_APB__CSU_PLL_CTRL__ACT_FREQMHZ {180} \
+ CONFIG.PSU__CRL_APB__CSU_PLL_CTRL__DIVISOR0 {3} \
+ CONFIG.PSU__CRL_APB__CSU_PLL_CTRL__SRCSEL {SysOsc} \
+ CONFIG.PSU__CRL_APB__DBG_LPD_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRL_APB__DBG_LPD_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__DBG_LPD_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__DEBUG_R5_ATCLK_CTRL__ACT_FREQMHZ {1000} \
+ CONFIG.PSU__CRL_APB__DEBUG_R5_ATCLK_CTRL__DIVISOR0 {6} \
+ CONFIG.PSU__CRL_APB__DEBUG_R5_ATCLK_CTRL__FREQMHZ {1000} \
+ CONFIG.PSU__CRL_APB__DEBUG_R5_ATCLK_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRL_APB__DLL_REF_CTRL__ACT_FREQMHZ {1499.984985} \
+ CONFIG.PSU__CRL_APB__DLL_REF_CTRL__FREQMHZ {1500} \
+ CONFIG.PSU__CRL_APB__DLL_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__GEM0_REF_CTRL__ACT_FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM0_REF_CTRL__FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM0_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__GEM1_REF_CTRL__ACT_FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM1_REF_CTRL__FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__GEM2_REF_CTRL__ACT_FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM2_REF_CTRL__FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM2_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__GEM3_REF_CTRL__ACT_FREQMHZ {124.998749} \
+ CONFIG.PSU__CRL_APB__GEM3_REF_CTRL__FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__GEM3_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__GEM_TSU_REF_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRL_APB__GEM_TSU_REF_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__GEM_TSU_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__I2C0_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__I2C0_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__I2C0_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__I2C1_REF_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__I2C1_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__I2C1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__IOPLL_CTRL__FRACFREQ {27.138} \
+ CONFIG.PSU__CRL_APB__IOPLL_CTRL__SRCSEL {PSS_REF_CLK} \
+ CONFIG.PSU__CRL_APB__IOU_SWITCH_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRL_APB__IOU_SWITCH_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__IOU_SWITCH_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__LPD_LSBUS_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__LPD_LSBUS_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__LPD_LSBUS_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__LPD_SWITCH_CTRL__ACT_FREQMHZ {499.994995} \
+ CONFIG.PSU__CRL_APB__LPD_SWITCH_CTRL__FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__LPD_SWITCH_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__NAND_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__NAND_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__NAND_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__OCM_MAIN_CTRL__ACT_FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__OCM_MAIN_CTRL__DIVISOR0 {3} \
+ CONFIG.PSU__CRL_APB__OCM_MAIN_CTRL__FREQMHZ {500} \
+ CONFIG.PSU__CRL_APB__OCM_MAIN_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__PCAP_CTRL__ACT_FREQMHZ {187.498123} \
+ CONFIG.PSU__CRL_APB__PCAP_CTRL__FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__PCAP_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__PL0_REF_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__PL0_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__PL0_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__PL1_REF_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__PL1_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__PL1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__PL2_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__PL3_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__QSPI_REF_CTRL__ACT_FREQMHZ {124.998749} \
+ CONFIG.PSU__CRL_APB__QSPI_REF_CTRL__FREQMHZ {125} \
+ CONFIG.PSU__CRL_APB__QSPI_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__RPLL_CTRL__FRACFREQ {27.138} \
+ CONFIG.PSU__CRL_APB__RPLL_CTRL__SRCSEL {PSS_REF_CLK} \
+ CONFIG.PSU__CRL_APB__SDIO0_REF_CTRL__ACT_FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__SDIO0_REF_CTRL__FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__SDIO0_REF_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__ACT_FREQMHZ {187.498123} \
+ CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__SPI0_REF_CTRL__ACT_FREQMHZ {214} \
+ CONFIG.PSU__CRL_APB__SPI0_REF_CTRL__FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__SPI0_REF_CTRL__SRCSEL {RPLL} \
+ CONFIG.PSU__CRL_APB__SPI1_REF_CTRL__ACT_FREQMHZ {187.498123} \
+ CONFIG.PSU__CRL_APB__SPI1_REF_CTRL__FREQMHZ {200} \
+ CONFIG.PSU__CRL_APB__SPI1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__TIMESTAMP_REF_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__TIMESTAMP_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__TIMESTAMP_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__UART0_REF_CTRL__ACT_FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__UART0_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__UART0_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__UART1_REF_CTRL__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__CRL_APB__UART1_REF_CTRL__FREQMHZ {100} \
+ CONFIG.PSU__CRL_APB__UART1_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__USB0_BUS_REF_CTRL__ACT_FREQMHZ {249.997498} \
+ CONFIG.PSU__CRL_APB__USB0_BUS_REF_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__USB0_BUS_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__USB1_BUS_REF_CTRL__ACT_FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__USB1_BUS_REF_CTRL__FREQMHZ {250} \
+ CONFIG.PSU__CRL_APB__USB1_BUS_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__USB3_DUAL_REF_CTRL__ACT_FREQMHZ {19.999800} \
+ CONFIG.PSU__CRL_APB__USB3_DUAL_REF_CTRL__FREQMHZ {20} \
+ CONFIG.PSU__CRL_APB__USB3_DUAL_REF_CTRL__SRCSEL {IOPLL} \
+ CONFIG.PSU__CRL_APB__USB3__ENABLE {1} \
+ CONFIG.PSU__CSUPMU__PERIPHERAL__VALID {1} \
+ CONFIG.PSU__CSU__CSU_TAMPER_0__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_10__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_11__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_12__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_1__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_2__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_3__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_4__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_5__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_6__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_7__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_8__ENABLE {0} \
+ CONFIG.PSU__CSU__CSU_TAMPER_9__ENABLE {0} \
+ CONFIG.PSU__CSU__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__DDRC__AL {0} \
+ CONFIG.PSU__DDRC__BG_ADDR_COUNT {1} \
+ CONFIG.PSU__DDRC__BRC_MAPPING {ROW_BANK_COL} \
+ CONFIG.PSU__DDRC__BUS_WIDTH {64 Bit} \
+ CONFIG.PSU__DDRC__CL {16} \
+ CONFIG.PSU__DDRC__CLOCK_STOP_EN {0} \
+ CONFIG.PSU__DDRC__COMPONENTS {Components} \
+ CONFIG.PSU__DDRC__CWL {14} \
+ CONFIG.PSU__DDRC__DDR4_ADDR_MAPPING {0} \
+ CONFIG.PSU__DDRC__DDR4_CAL_MODE_ENABLE {0} \
+ CONFIG.PSU__DDRC__DDR4_CRC_CONTROL {0} \
+ CONFIG.PSU__DDRC__DDR4_MAXPWR_SAVING_EN {0} \
+ CONFIG.PSU__DDRC__DDR4_T_REF_MODE {0} \
+ CONFIG.PSU__DDRC__DDR4_T_REF_RANGE {Normal (0-85)} \
+ CONFIG.PSU__DDRC__DEVICE_CAPACITY {8192 MBits} \
+ CONFIG.PSU__DDRC__DM_DBI {DM_NO_DBI} \
+ CONFIG.PSU__DDRC__DRAM_WIDTH {16 Bits} \
+ CONFIG.PSU__DDRC__ECC {Disabled} \
+ CONFIG.PSU__DDRC__ECC_SCRUB {0} \
+ CONFIG.PSU__DDRC__ENABLE {1} \
+ CONFIG.PSU__DDRC__ENABLE_2T_TIMING {0} \
+ CONFIG.PSU__DDRC__ENABLE_DP_SWITCH {0} \
+ CONFIG.PSU__DDRC__EN_2ND_CLK {0} \
+ CONFIG.PSU__DDRC__FGRM {1X} \
+ CONFIG.PSU__DDRC__FREQ_MHZ {1} \
+ CONFIG.PSU__DDRC__LPDDR3_DUALRANK_SDP {0} \
+ CONFIG.PSU__DDRC__LP_ASR {manual normal} \
+ CONFIG.PSU__DDRC__MEMORY_TYPE {DDR 4} \
+ CONFIG.PSU__DDRC__PARITY_ENABLE {0} \
+ CONFIG.PSU__DDRC__PER_BANK_REFRESH {0} \
+ CONFIG.PSU__DDRC__PHY_DBI_MODE {0} \
+ CONFIG.PSU__DDRC__PLL_BYPASS {0} \
+ CONFIG.PSU__DDRC__PWR_DOWN_EN {0} \
+ CONFIG.PSU__DDRC__RANK_ADDR_COUNT {0} \
+ CONFIG.PSU__DDRC__RD_DQS_CENTER {0} \
+ CONFIG.PSU__DDRC__ROW_ADDR_COUNT {16} \
+ CONFIG.PSU__DDRC__SELF_REF_ABORT {0} \
+ CONFIG.PSU__DDRC__SPEED_BIN {DDR4_2400R} \
+ CONFIG.PSU__DDRC__STATIC_RD_MODE {0} \
+ CONFIG.PSU__DDRC__TRAIN_DATA_EYE {1} \
+ CONFIG.PSU__DDRC__TRAIN_READ_GATE {1} \
+ CONFIG.PSU__DDRC__TRAIN_WRITE_LEVEL {1} \
+ CONFIG.PSU__DDRC__T_FAW {30.0} \
+ CONFIG.PSU__DDRC__T_RAS_MIN {33} \
+ CONFIG.PSU__DDRC__T_RC {47.06} \
+ CONFIG.PSU__DDRC__T_RCD {16} \
+ CONFIG.PSU__DDRC__T_RP {16} \
+ CONFIG.PSU__DDRC__VIDEO_BUFFER_SIZE {0} \
+ CONFIG.PSU__DDRC__VREF {1} \
+ CONFIG.PSU__DDR_HIGH_ADDRESS_GUI_ENABLE {1} \
+ CONFIG.PSU__DDR_QOS_ENABLE {0} \
+ CONFIG.PSU__DDR_QOS_HP0_RDQOS {} \
+ CONFIG.PSU__DDR_QOS_HP0_WRQOS {} \
+ CONFIG.PSU__DDR_QOS_HP1_RDQOS {} \
+ CONFIG.PSU__DDR_QOS_HP1_WRQOS {} \
+ CONFIG.PSU__DDR_QOS_HP2_RDQOS {} \
+ CONFIG.PSU__DDR_QOS_HP2_WRQOS {} \
+ CONFIG.PSU__DDR_QOS_HP3_RDQOS {} \
+ CONFIG.PSU__DDR_QOS_HP3_WRQOS {} \
+ CONFIG.PSU__DDR_SW_REFRESH_ENABLED {1} \
+ CONFIG.PSU__DDR__INTERFACE__FREQMHZ {600.000} \
+ CONFIG.PSU__DEVICE_TYPE {EV} \
+ CONFIG.PSU__DISPLAYPORT__LANE0__ENABLE {1} \
+ CONFIG.PSU__DISPLAYPORT__LANE0__IO {GT Lane1} \
+ CONFIG.PSU__DISPLAYPORT__LANE1__ENABLE {1} \
+ CONFIG.PSU__DISPLAYPORT__LANE1__IO {GT Lane0} \
+ CONFIG.PSU__DISPLAYPORT__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__DLL__ISUSED {1} \
+ CONFIG.PSU__DPAUX__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__DPAUX__PERIPHERAL__IO {MIO 27 .. 30} \
+ CONFIG.PSU__DP__LANE_SEL {Dual Lower} \
+ CONFIG.PSU__DP__REF_CLK_FREQ {27} \
+ CONFIG.PSU__DP__REF_CLK_SEL {Ref Clk0} \
+ CONFIG.PSU__ENABLE__DDR__REFRESH__SIGNALS {0} \
+ CONFIG.PSU__ENET0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__ENET1__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__ENET2__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__ENET3__FIFO__ENABLE {0} \
+ CONFIG.PSU__ENET3__GRP_MDIO__ENABLE {1} \
+ CONFIG.PSU__ENET3__GRP_MDIO__IO {MIO 76 .. 77} \
+ CONFIG.PSU__ENET3__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__ENET3__PERIPHERAL__IO {MIO 64 .. 75} \
+ CONFIG.PSU__ENET3__PTP__ENABLE {0} \
+ CONFIG.PSU__ENET3__TSU__ENABLE {0} \
+ CONFIG.PSU__EN_AXI_STATUS_PORTS {0} \
+ CONFIG.PSU__EN_EMIO_TRACE {0} \
+ CONFIG.PSU__EP__IP {0} \
+ CONFIG.PSU__EXPAND__CORESIGHT {0} \
+ CONFIG.PSU__EXPAND__FPD_SLAVES {0} \
+ CONFIG.PSU__EXPAND__GIC {0} \
+ CONFIG.PSU__EXPAND__LOWER_LPS_SLAVES {0} \
+ CONFIG.PSU__EXPAND__UPPER_LPS_SLAVES {0} \
+ CONFIG.PSU__FPD_SLCR__WDT1__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__FPGA_PL0_ENABLE {1} \
+ CONFIG.PSU__FPGA_PL1_ENABLE {1} \
+ CONFIG.PSU__FPGA_PL2_ENABLE {0} \
+ CONFIG.PSU__FPGA_PL3_ENABLE {0} \
+ CONFIG.PSU__FP__POWER__ON {1} \
+ CONFIG.PSU__FTM__CTI_IN_0 {0} \
+ CONFIG.PSU__FTM__CTI_IN_1 {0} \
+ CONFIG.PSU__FTM__CTI_IN_2 {0} \
+ CONFIG.PSU__FTM__CTI_IN_3 {0} \
+ CONFIG.PSU__FTM__CTI_OUT_0 {0} \
+ CONFIG.PSU__FTM__CTI_OUT_1 {0} \
+ CONFIG.PSU__FTM__CTI_OUT_2 {0} \
+ CONFIG.PSU__FTM__CTI_OUT_3 {0} \
+ CONFIG.PSU__FTM__GPI {0} \
+ CONFIG.PSU__FTM__GPO {0} \
+ CONFIG.PSU__GEM3_COHERENCY {0} \
+ CONFIG.PSU__GEM3_ROUTE_THROUGH_FPD {0} \
+ CONFIG.PSU__GEM__TSU__ENABLE {0} \
+ CONFIG.PSU__GEN_IPI_0__MASTER {APU} \
+ CONFIG.PSU__GEN_IPI_10__MASTER {NONE} \
+ CONFIG.PSU__GEN_IPI_1__MASTER {RPU0} \
+ CONFIG.PSU__GEN_IPI_2__MASTER {RPU1} \
+ CONFIG.PSU__GEN_IPI_3__MASTER {PMU} \
+ CONFIG.PSU__GEN_IPI_4__MASTER {PMU} \
+ CONFIG.PSU__GEN_IPI_5__MASTER {PMU} \
+ CONFIG.PSU__GEN_IPI_6__MASTER {PMU} \
+ CONFIG.PSU__GEN_IPI_7__MASTER {NONE} \
+ CONFIG.PSU__GEN_IPI_8__MASTER {NONE} \
+ CONFIG.PSU__GEN_IPI_9__MASTER {NONE} \
+ CONFIG.PSU__GPIO0_MIO__IO {MIO 0 .. 25} \
+ CONFIG.PSU__GPIO0_MIO__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__GPIO1_MIO__IO {MIO 26 .. 51} \
+ CONFIG.PSU__GPIO1_MIO__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__GPIO2_MIO__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__GPIO_EMIO_WIDTH {1} \
+ CONFIG.PSU__GPIO_EMIO__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__GPIO_EMIO__WIDTH {[94:0]} \
+ CONFIG.PSU__GPU_PP0__POWER__ON {1} \
+ CONFIG.PSU__GPU_PP1__POWER__ON {1} \
+ CONFIG.PSU__GT_REF_CLK__FREQMHZ {33.333} \
+ CONFIG.PSU__GT__LINK_SPEED {HBR} \
+ CONFIG.PSU__GT__PRE_EMPH_LVL_4 {0} \
+ CONFIG.PSU__GT__VLT_SWNG_LVL_4 {0} \
+ CONFIG.PSU__HPM0_FPD__NUM_READ_THREADS {4} \
+ CONFIG.PSU__HPM0_FPD__NUM_WRITE_THREADS {4} \
+ CONFIG.PSU__HPM0_LPD__NUM_READ_THREADS {4} \
+ CONFIG.PSU__HPM0_LPD__NUM_WRITE_THREADS {4} \
+ CONFIG.PSU__HPM1_FPD__NUM_READ_THREADS {4} \
+ CONFIG.PSU__HPM1_FPD__NUM_WRITE_THREADS {4} \
+ CONFIG.PSU__I2C0_LOOP_I2C1__ENABLE {0} \
+ CONFIG.PSU__I2C0__GRP_INT__ENABLE {0} \
+ CONFIG.PSU__I2C0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__I2C1__GRP_INT__ENABLE {0} \
+ CONFIG.PSU__I2C1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__I2C1__PERIPHERAL__IO {MIO 24 .. 25} \
+ CONFIG.PSU__IOU_SLCR__IOU_TTC_APB_CLK__TTC0_SEL {APB} \
+ CONFIG.PSU__IOU_SLCR__IOU_TTC_APB_CLK__TTC1_SEL {APB} \
+ CONFIG.PSU__IOU_SLCR__IOU_TTC_APB_CLK__TTC2_SEL {APB} \
+ CONFIG.PSU__IOU_SLCR__IOU_TTC_APB_CLK__TTC3_SEL {APB} \
+ CONFIG.PSU__IOU_SLCR__TTC0__ACT_FREQMHZ {100.000000} \
+ CONFIG.PSU__IOU_SLCR__TTC1__ACT_FREQMHZ {100.000000} \
+ CONFIG.PSU__IOU_SLCR__TTC2__ACT_FREQMHZ {100.000000} \
+ CONFIG.PSU__IOU_SLCR__TTC3__ACT_FREQMHZ {100.000000} \
+ CONFIG.PSU__IOU_SLCR__WDT0__ACT_FREQMHZ {99.999001} \
+ CONFIG.PSU__IRQ_P2F_ADMA_CHAN__INT {0} \
+ CONFIG.PSU__IRQ_P2F_AIB_AXI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_AMS__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APM_FPD__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_COMM__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_CPUMNT__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_CTI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_EXTERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_IPI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_L2ERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_PMU__INT {0} \
+ CONFIG.PSU__IRQ_P2F_APU_REGS__INT {0} \
+ CONFIG.PSU__IRQ_P2F_ATB_LPD__INT {0} \
+ CONFIG.PSU__IRQ_P2F_CLKMON__INT {0} \
+ CONFIG.PSU__IRQ_P2F_CSUPMU_WDT__INT {0} \
+ CONFIG.PSU__IRQ_P2F_DDR_SS__INT {0} \
+ CONFIG.PSU__IRQ_P2F_DPDMA__INT {0} \
+ CONFIG.PSU__IRQ_P2F_DPORT__INT {0} \
+ CONFIG.PSU__IRQ_P2F_EFUSE__INT {0} \
+ CONFIG.PSU__IRQ_P2F_ENT3_WAKEUP__INT {0} \
+ CONFIG.PSU__IRQ_P2F_ENT3__INT {0} \
+ CONFIG.PSU__IRQ_P2F_FPD_APB__INT {0} \
+ CONFIG.PSU__IRQ_P2F_FPD_ATB_ERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_FP_WDT__INT {0} \
+ CONFIG.PSU__IRQ_P2F_GDMA_CHAN__INT {0} \
+ CONFIG.PSU__IRQ_P2F_GPIO__INT {0} \
+ CONFIG.PSU__IRQ_P2F_GPU__INT {0} \
+ CONFIG.PSU__IRQ_P2F_I2C1__INT {0} \
+ CONFIG.PSU__IRQ_P2F_LPD_APB__INT {0} \
+ CONFIG.PSU__IRQ_P2F_LPD_APM__INT {0} \
+ CONFIG.PSU__IRQ_P2F_LP_WDT__INT {0} \
+ CONFIG.PSU__IRQ_P2F_OCM_ERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_PCIE_DMA__INT {0} \
+ CONFIG.PSU__IRQ_P2F_PCIE_LEGACY__INT {0} \
+ CONFIG.PSU__IRQ_P2F_PCIE_MSC__INT {0} \
+ CONFIG.PSU__IRQ_P2F_PCIE_MSI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_PL_IPI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_QSPI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_R5_CORE0_ECC_ERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_R5_CORE1_ECC_ERR__INT {0} \
+ CONFIG.PSU__IRQ_P2F_RPU_IPI__INT {0} \
+ CONFIG.PSU__IRQ_P2F_RPU_PERMON__INT {0} \
+ CONFIG.PSU__IRQ_P2F_RTC_ALARM__INT {0} \
+ CONFIG.PSU__IRQ_P2F_RTC_SECONDS__INT {0} \
+ CONFIG.PSU__IRQ_P2F_SATA__INT {0} \
+ CONFIG.PSU__IRQ_P2F_SDIO1_WAKE__INT {0} \
+ CONFIG.PSU__IRQ_P2F_SDIO1__INT {0} \
+ CONFIG.PSU__IRQ_P2F_SPI1__INT {0} \
+ CONFIG.PSU__IRQ_P2F_TTC0__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC0__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC0__INT2 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC1__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC1__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC1__INT2 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC2__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC2__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC2__INT2 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC3__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC3__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_TTC3__INT2 {0} \
+ CONFIG.PSU__IRQ_P2F_UART1__INT {0} \
+ CONFIG.PSU__IRQ_P2F_USB3_ENDPOINT__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_USB3_ENDPOINT__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_USB3_OTG__INT0 {0} \
+ CONFIG.PSU__IRQ_P2F_USB3_OTG__INT1 {0} \
+ CONFIG.PSU__IRQ_P2F_USB3_PMU_WAKEUP__INT {0} \
+ CONFIG.PSU__IRQ_P2F_XMPU_FPD__INT {0} \
+ CONFIG.PSU__IRQ_P2F_XMPU_LPD__INT {0} \
+ CONFIG.PSU__IRQ_P2F__INTF_FPD_SMMU__INT {0} \
+ CONFIG.PSU__IRQ_P2F__INTF_PPD_CCI__INT {0} \
+ CONFIG.PSU__L2_BANK0__POWER__ON {1} \
+ CONFIG.PSU__LPDMA0_COHERENCY {0} \
+ CONFIG.PSU__LPDMA1_COHERENCY {0} \
+ CONFIG.PSU__LPDMA2_COHERENCY {0} \
+ CONFIG.PSU__LPDMA3_COHERENCY {0} \
+ CONFIG.PSU__LPDMA4_COHERENCY {0} \
+ CONFIG.PSU__LPDMA5_COHERENCY {0} \
+ CONFIG.PSU__LPDMA6_COHERENCY {0} \
+ CONFIG.PSU__LPDMA7_COHERENCY {0} \
+ CONFIG.PSU__LPD_SLCR__CSUPMU_WDT_CLK_SEL__SELECT {APB} \
+ CONFIG.PSU__LPD_SLCR__CSUPMU__ACT_FREQMHZ {100.000000} \
+ CONFIG.PSU__MAXIGP2__DATA_WIDTH {32} \
+ CONFIG.PSU__M_AXI_GP0_SUPPORTS_NARROW_BURST {1} \
+ CONFIG.PSU__M_AXI_GP1_SUPPORTS_NARROW_BURST {1} \
+ CONFIG.PSU__M_AXI_GP2_SUPPORTS_NARROW_BURST {1} \
+ CONFIG.PSU__NAND__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__NAND__READY_BUSY__ENABLE {0} \
+ CONFIG.PSU__NUM_FABRIC_RESETS {1} \
+ CONFIG.PSU__OCM_BANK0__POWER__ON {1} \
+ CONFIG.PSU__OCM_BANK1__POWER__ON {1} \
+ CONFIG.PSU__OCM_BANK2__POWER__ON {1} \
+ CONFIG.PSU__OCM_BANK3__POWER__ON {1} \
+ CONFIG.PSU__OVERRIDE_HPX_QOS {0} \
+ CONFIG.PSU__OVERRIDE__BASIC_CLOCK {0} \
+ CONFIG.PSU__PCIE__ACS_VIOLAION {0} \
+ CONFIG.PSU__PCIE__AER_CAPABILITY {0} \
+ CONFIG.PSU__PCIE__CLASS_CODE_BASE {} \
+ CONFIG.PSU__PCIE__CLASS_CODE_INTERFACE {} \
+ CONFIG.PSU__PCIE__CLASS_CODE_SUB {} \
+ CONFIG.PSU__PCIE__DEVICE_ID {} \
+ CONFIG.PSU__PCIE__INTX_GENERATION {0} \
+ CONFIG.PSU__PCIE__MSIX_CAPABILITY {0} \
+ CONFIG.PSU__PCIE__MSI_CAPABILITY {0} \
+ CONFIG.PSU__PCIE__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__PCIE__PERIPHERAL__ENDPOINT_ENABLE {1} \
+ CONFIG.PSU__PCIE__PERIPHERAL__ROOTPORT_ENABLE {0} \
+ CONFIG.PSU__PCIE__RESET__POLARITY {Active Low} \
+ CONFIG.PSU__PCIE__REVISION_ID {} \
+ CONFIG.PSU__PCIE__SUBSYSTEM_ID {} \
+ CONFIG.PSU__PCIE__SUBSYSTEM_VENDOR_ID {} \
+ CONFIG.PSU__PCIE__VENDOR_ID {} \
+ CONFIG.PSU__PJTAG__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__PL_CLK0_BUF {TRUE} \
+ CONFIG.PSU__PL_CLK1_BUF {TRUE} \
+ CONFIG.PSU__PL__POWER__ON {1} \
+ CONFIG.PSU__PMU_COHERENCY {0} \
+ CONFIG.PSU__PMU__AIBACK__ENABLE {0} \
+ CONFIG.PSU__PMU__EMIO_GPI__ENABLE {0} \
+ CONFIG.PSU__PMU__EMIO_GPO__ENABLE {0} \
+ CONFIG.PSU__PMU__GPI0__ENABLE {1} \
+ CONFIG.PSU__PMU__GPI0__IO {MIO 26} \
+ CONFIG.PSU__PMU__GPI1__ENABLE {0} \
+ CONFIG.PSU__PMU__GPI2__ENABLE {0} \
+ CONFIG.PSU__PMU__GPI3__ENABLE {0} \
+ CONFIG.PSU__PMU__GPI4__ENABLE {0} \
+ CONFIG.PSU__PMU__GPI5__ENABLE {1} \
+ CONFIG.PSU__PMU__GPI5__IO {MIO 31} \
+ CONFIG.PSU__PMU__GPO0__ENABLE {0} \
+ CONFIG.PSU__PMU__GPO1__ENABLE {0} \
+ CONFIG.PSU__PMU__GPO2__ENABLE {0} \
+ CONFIG.PSU__PMU__GPO3__ENABLE {1} \
+ CONFIG.PSU__PMU__GPO3__IO {MIO 35} \
+ CONFIG.PSU__PMU__GPO3__POLARITY {low} \
+ CONFIG.PSU__PMU__GPO4__ENABLE {0} \
+ CONFIG.PSU__PMU__GPO5__ENABLE {0} \
+ CONFIG.PSU__PMU__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__PMU__PLERROR__ENABLE {0} \
+ CONFIG.PSU__PRESET_APPLIED {1} \
+ CONFIG.PSU__PROTECTION__DDR_SEGMENTS {NONE} \
+ CONFIG.PSU__PROTECTION__ENABLE {0} \
+ CONFIG.PSU__PROTECTION__FPD_SEGMENTS {SA:0xFD1A0000; SIZE:1280; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFD000000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write;\
+subsystemId:PMU Firmware| SA:0xFD010000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFD020000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU\
+Firmware| SA:0xFD030000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFD040000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware|\
+SA:0xFD050000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFD610000; SIZE:512; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFD5D0000;\
+SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware|SA:0xFD1A0000 ; SIZE:1280; UNIT:KB; RegionTZ:Secure ; WrAllowed:Read/Write; subsystemId:Secure Subsystem} \
+ CONFIG.PSU__PROTECTION__LPD_SEGMENTS {SA:0xFF980000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFF5E0000; SIZE:2560; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write;\
+subsystemId:PMU Firmware| SA:0xFFCC0000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFF180000; SIZE:768; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU\
+Firmware| SA:0xFF410000; SIZE:640; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware| SA:0xFFA70000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware|\
+SA:0xFF9A0000; SIZE:64; UNIT:KB; RegionTZ:Secure; WrAllowed:Read/Write; subsystemId:PMU Firmware|SA:0xFF5E0000 ; SIZE:2560; UNIT:KB; RegionTZ:Secure ; WrAllowed:Read/Write; subsystemId:Secure Subsystem|SA:0xFFCC0000\
+; SIZE:64; UNIT:KB; RegionTZ:Secure ; WrAllowed:Read/Write; subsystemId:Secure Subsystem|SA:0xFF180000 ; SIZE:768; UNIT:KB; RegionTZ:Secure ; WrAllowed:Read/Write; subsystemId:Secure Subsystem|SA:0xFF9A0000\
+; SIZE:64; UNIT:KB; RegionTZ:Secure ; WrAllowed:Read/Write; subsystemId:Secure Subsystem} \
+ CONFIG.PSU__PROTECTION__MASTERS {USB1:NonSecure;0|USB0:NonSecure;1|S_AXI_LPD:NA;0|S_AXI_HPC1_FPD:NA;0|S_AXI_HPC0_FPD:NA;1|S_AXI_HP3_FPD:NA;0|S_AXI_HP2_FPD:NA;0|S_AXI_HP1_FPD:NA;0|S_AXI_HP0_FPD:NA;0|S_AXI_ACP:NA;0|S_AXI_ACE:NA;0|SD1:NonSecure;1|SD0:NonSecure;0|SATA1:NonSecure;0|SATA0:NonSecure;0|RPU1:Secure;1|RPU0:Secure;1|QSPI:NonSecure;1|PMU:NA;1|PCIe:NonSecure;0|NAND:NonSecure;0|LDMA:NonSecure;1|GPU:NonSecure;1|GEM3:NonSecure;1|GEM2:NonSecure;0|GEM1:NonSecure;0|GEM0:NonSecure;0|FDMA:NonSecure;1|DP:NonSecure;1|DAP:NA;1|Coresight:NA;1|CSU:NA;1|APU:NA;1}\
+\
+ CONFIG.PSU__PROTECTION__MASTERS_TZ {GEM0:NonSecure|SD1:NonSecure|GEM2:NonSecure|GEM1:NonSecure|GEM3:NonSecure|PCIe:NonSecure|DP:NonSecure|NAND:NonSecure|GPU:NonSecure|USB1:NonSecure|USB0:NonSecure|LDMA:NonSecure|FDMA:NonSecure|QSPI:NonSecure|SD0:NonSecure}\
+\
+ CONFIG.PSU__PROTECTION__OCM_SEGMENTS {NONE} \
+ CONFIG.PSU__PROTECTION__PRESUBSYSTEMS {NONE} \
+ CONFIG.PSU__PROTECTION__SLAVES {LPD;USB3_1_XHCI;FE300000;FE3FFFFF;0|LPD;USB3_1;FF9E0000;FF9EFFFF;0|LPD;USB3_0_XHCI;FE200000;FE2FFFFF;1|LPD;USB3_0;FF9D0000;FF9DFFFF;1|LPD;UART1;FF010000;FF01FFFF;1|LPD;UART0;FF000000;FF00FFFF;0|LPD;TTC3;FF140000;FF14FFFF;1|LPD;TTC2;FF130000;FF13FFFF;1|LPD;TTC1;FF120000;FF12FFFF;1|LPD;TTC0;FF110000;FF11FFFF;1|FPD;SWDT1;FD4D0000;FD4DFFFF;1|LPD;SWDT0;FF150000;FF15FFFF;1|LPD;SPI1;FF050000;FF05FFFF;1|LPD;SPI0;FF040000;FF04FFFF;0|FPD;SMMU_REG;FD5F0000;FD5FFFFF;1|FPD;SMMU;FD800000;FDFFFFFF;1|FPD;SIOU;FD3D0000;FD3DFFFF;1|FPD;SERDES;FD400000;FD47FFFF;1|LPD;SD1;FF170000;FF17FFFF;1|LPD;SD0;FF160000;FF16FFFF;0|FPD;SATA;FD0C0000;FD0CFFFF;0|LPD;RTC;FFA60000;FFA6FFFF;1|LPD;RSA_CORE;FFCE0000;FFCEFFFF;1|LPD;RPU;FF9A0000;FF9AFFFF;1|LPD;R5_TCM_RAM_GLOBAL;FFE00000;FFE3FFFF;1|LPD;R5_1_Instruction_Cache;FFEC0000;FFECFFFF;1|LPD;R5_1_Data_Cache;FFED0000;FFEDFFFF;1|LPD;R5_1_BTCM_GLOBAL;FFEB0000;FFEBFFFF;1|LPD;R5_1_ATCM_GLOBAL;FFE90000;FFE9FFFF;1|LPD;R5_0_Instruction_Cache;FFE40000;FFE4FFFF;1|LPD;R5_0_Data_Cache;FFE50000;FFE5FFFF;1|LPD;R5_0_BTCM_GLOBAL;FFE20000;FFE2FFFF;1|LPD;R5_0_ATCM_GLOBAL;FFE00000;FFE0FFFF;1|LPD;QSPI_Linear_Address;C0000000;DFFFFFFF;1|LPD;QSPI;FF0F0000;FF0FFFFF;1|LPD;PMU_RAM;FFDC0000;FFDDFFFF;1|LPD;PMU_GLOBAL;FFD80000;FFDBFFFF;1|FPD;PCIE_MAIN;FD0E0000;FD0EFFFF;0|FPD;PCIE_LOW;E0000000;EFFFFFFF;0|FPD;PCIE_HIGH2;8000000000;BFFFFFFFFF;0|FPD;PCIE_HIGH1;600000000;7FFFFFFFF;0|FPD;PCIE_DMA;FD0F0000;FD0FFFFF;0|FPD;PCIE_ATTRIB;FD480000;FD48FFFF;0|LPD;OCM_XMPU_CFG;FFA70000;FFA7FFFF;1|LPD;OCM_SLCR;FF960000;FF96FFFF;1|OCM;OCM;FFFC0000;FFFFFFFF;1|LPD;NAND;FF100000;FF10FFFF;0|LPD;MBISTJTAG;FFCF0000;FFCFFFFF;1|LPD;LPD_XPPU_SINK;FF9C0000;FF9CFFFF;1|LPD;LPD_XPPU;FF980000;FF98FFFF;1|LPD;LPD_SLCR_SECURE;FF4B0000;FF4DFFFF;1|LPD;LPD_SLCR;FF410000;FF4AFFFF;1|LPD;LPD_GPV;FE100000;FE1FFFFF;1|LPD;LPD_DMA_7;FFAF0000;FFAFFFFF;1|LPD;LPD_DMA_6;FFAE0000;FFAEFFFF;1|LPD;LPD_DMA_5;FFAD0000;FFADFFFF;1|LPD;LPD_DMA_4;FFAC0000;FFACFFFF;1|LPD;LPD_DMA_3;FFAB0000;FFABFFFF;1|LPD;LPD_DMA_2;FFAA0000;FFAAFFFF;1|LPD;LPD_DMA_1;FFA90000;FFA9FFFF;1|LPD;LPD_DMA_0;FFA80000;FFA8FFFF;1|LPD;IPI_CTRL;FF380000;FF3FFFFF;1|LPD;IOU_SLCR;FF180000;FF23FFFF;1|LPD;IOU_SECURE_SLCR;FF240000;FF24FFFF;1|LPD;IOU_SCNTRS;FF260000;FF26FFFF;1|LPD;IOU_SCNTR;FF250000;FF25FFFF;1|LPD;IOU_GPV;FE000000;FE0FFFFF;1|LPD;I2C1;FF030000;FF03FFFF;1|LPD;I2C0;FF020000;FF02FFFF;0|FPD;GPU;FD4B0000;FD4BFFFF;1|LPD;GPIO;FF0A0000;FF0AFFFF;1|LPD;GEM3;FF0E0000;FF0EFFFF;1|LPD;GEM2;FF0D0000;FF0DFFFF;0|LPD;GEM1;FF0C0000;FF0CFFFF;0|LPD;GEM0;FF0B0000;FF0BFFFF;0|FPD;FPD_XMPU_SINK;FD4F0000;FD4FFFFF;1|FPD;FPD_XMPU_CFG;FD5D0000;FD5DFFFF;1|FPD;FPD_SLCR_SECURE;FD690000;FD6CFFFF;1|FPD;FPD_SLCR;FD610000;FD68FFFF;1|FPD;FPD_DMA_CH7;FD570000;FD57FFFF;1|FPD;FPD_DMA_CH6;FD560000;FD56FFFF;1|FPD;FPD_DMA_CH5;FD550000;FD55FFFF;1|FPD;FPD_DMA_CH4;FD540000;FD54FFFF;1|FPD;FPD_DMA_CH3;FD530000;FD53FFFF;1|FPD;FPD_DMA_CH2;FD520000;FD52FFFF;1|FPD;FPD_DMA_CH1;FD510000;FD51FFFF;1|FPD;FPD_DMA_CH0;FD500000;FD50FFFF;1|LPD;EFUSE;FFCC0000;FFCCFFFF;1|FPD;Display\
+Port;FD4A0000;FD4AFFFF;1|FPD;DPDMA;FD4C0000;FD4CFFFF;1|FPD;DDR_XMPU5_CFG;FD050000;FD05FFFF;1|FPD;DDR_XMPU4_CFG;FD040000;FD04FFFF;1|FPD;DDR_XMPU3_CFG;FD030000;FD03FFFF;1|FPD;DDR_XMPU2_CFG;FD020000;FD02FFFF;1|FPD;DDR_XMPU1_CFG;FD010000;FD01FFFF;1|FPD;DDR_XMPU0_CFG;FD000000;FD00FFFF;1|FPD;DDR_QOS_CTRL;FD090000;FD09FFFF;1|FPD;DDR_PHY;FD080000;FD08FFFF;1|DDR;DDR_LOW;0;7FFFFFFF;1|DDR;DDR_HIGH;800000000;87FFFFFFF;1|FPD;DDDR_CTRL;FD070000;FD070FFF;1|LPD;Coresight;FE800000;FEFFFFFF;1|LPD;CSU_DMA;FFC80000;FFC9FFFF;1|LPD;CSU;FFCA0000;FFCAFFFF;1|LPD;CRL_APB;FF5E0000;FF85FFFF;1|FPD;CRF_APB;FD1A0000;FD2DFFFF;1|FPD;CCI_REG;FD5E0000;FD5EFFFF;1|LPD;CAN1;FF070000;FF07FFFF;0|LPD;CAN0;FF060000;FF06FFFF;0|FPD;APU;FD5C0000;FD5CFFFF;1|LPD;APM_INTC_IOU;FFA20000;FFA2FFFF;1|LPD;APM_FPD_LPD;FFA30000;FFA3FFFF;1|FPD;APM_5;FD490000;FD49FFFF;1|FPD;APM_0;FD0B0000;FD0BFFFF;1|LPD;APM2;FFA10000;FFA1FFFF;1|LPD;APM1;FFA00000;FFA0FFFF;1|LPD;AMS;FFA50000;FFA5FFFF;1|FPD;AFI_5;FD3B0000;FD3BFFFF;1|FPD;AFI_4;FD3A0000;FD3AFFFF;1|FPD;AFI_3;FD390000;FD39FFFF;1|FPD;AFI_2;FD380000;FD38FFFF;1|FPD;AFI_1;FD370000;FD37FFFF;1|FPD;AFI_0;FD360000;FD36FFFF;1|LPD;AFIFM6;FF9B0000;FF9BFFFF;1|FPD;ACPU_GIC;F9010000;F907FFFF;1}\
+\
+ CONFIG.PSU__PROTECTION__SUBSYSTEMS {PMU Firmware:PMU|Secure Subsystem:} \
+ CONFIG.PSU__PSS_ALT_REF_CLK__ENABLE {0} \
+ CONFIG.PSU__PSS_ALT_REF_CLK__FREQMHZ {33.333} \
+ CONFIG.PSU__PSS_REF_CLK__FREQMHZ {33.333} \
+ CONFIG.PSU__QSPI_COHERENCY {0} \
+ CONFIG.PSU__QSPI_ROUTE_THROUGH_FPD {0} \
+ CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {0} \
+ CONFIG.PSU__QSPI__PERIPHERAL__DATA_MODE {x4} \
+ CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__QSPI__PERIPHERAL__IO {MIO 0 .. 5} \
+ CONFIG.PSU__QSPI__PERIPHERAL__MODE {Single} \
+ CONFIG.PSU__REPORT__DBGLOG {0} \
+ CONFIG.PSU__RPU_COHERENCY {0} \
+ CONFIG.PSU__RPU__POWER__ON {1} \
+ CONFIG.PSU__SATA__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__SAXIGP0__DATA_WIDTH {128} \
+ CONFIG.PSU__SD0__CLK_100_SDR_OTAP_DLY {0x00} \
+ CONFIG.PSU__SD0__CLK_200_SDR_OTAP_DLY {0x00} \
+ CONFIG.PSU__SD0__CLK_50_DDR_ITAP_DLY {0x00} \
+ CONFIG.PSU__SD0__CLK_50_DDR_OTAP_DLY {0x00} \
+ CONFIG.PSU__SD0__CLK_50_SDR_ITAP_DLY {0x00} \
+ CONFIG.PSU__SD0__CLK_50_SDR_OTAP_DLY {0x00} \
+ CONFIG.PSU__SD0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__SD0__RESET__ENABLE {0} \
+ CONFIG.PSU__SD1_COHERENCY {0} \
+ CONFIG.PSU__SD1_ROUTE_THROUGH_FPD {0} \
+ CONFIG.PSU__SD1__CLK_100_SDR_OTAP_DLY {0x3} \
+ CONFIG.PSU__SD1__CLK_200_SDR_OTAP_DLY {0x3} \
+ CONFIG.PSU__SD1__CLK_50_DDR_ITAP_DLY {0x3D} \
+ CONFIG.PSU__SD1__CLK_50_DDR_OTAP_DLY {0x4} \
+ CONFIG.PSU__SD1__CLK_50_SDR_ITAP_DLY {0x15} \
+ CONFIG.PSU__SD1__CLK_50_SDR_OTAP_DLY {0x5} \
+ CONFIG.PSU__SD1__DATA_TRANSFER_MODE {8Bit} \
+ CONFIG.PSU__SD1__GRP_CD__ENABLE {1} \
+ CONFIG.PSU__SD1__GRP_CD__IO {MIO 45} \
+ CONFIG.PSU__SD1__GRP_POW__ENABLE {1} \
+ CONFIG.PSU__SD1__GRP_POW__IO {MIO 43} \
+ CONFIG.PSU__SD1__GRP_WP__ENABLE {0} \
+ CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__SD1__PERIPHERAL__IO {MIO 39 .. 51} \
+ CONFIG.PSU__SD1__SLOT_TYPE {SD 3.0} \
+ CONFIG.PSU__SPI0_LOOP_SPI1__ENABLE {0} \
+ CONFIG.PSU__SPI0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__SPI1__GRP_SS0__IO {MIO 9} \
+ CONFIG.PSU__SPI1__GRP_SS1__ENABLE {0} \
+ CONFIG.PSU__SPI1__GRP_SS2__ENABLE {0} \
+ CONFIG.PSU__SPI1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__SPI1__PERIPHERAL__IO {MIO 6 .. 11} \
+ CONFIG.PSU__SWDT0__CLOCK__ENABLE {0} \
+ CONFIG.PSU__SWDT0__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__SWDT0__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__SWDT0__RESET__ENABLE {0} \
+ CONFIG.PSU__SWDT1__CLOCK__ENABLE {0} \
+ CONFIG.PSU__SWDT1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__SWDT1__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__SWDT1__RESET__ENABLE {0} \
+ CONFIG.PSU__TCM0A__POWER__ON {1} \
+ CONFIG.PSU__TCM0B__POWER__ON {1} \
+ CONFIG.PSU__TCM1A__POWER__ON {1} \
+ CONFIG.PSU__TCM1B__POWER__ON {1} \
+ CONFIG.PSU__TESTSCAN__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__TRACE__INTERNAL_WIDTH {32} \
+ CONFIG.PSU__TRACE__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__TRISTATE__INVERTED {1} \
+ CONFIG.PSU__TSU__BUFG_PORT_PAIR {0} \
+ CONFIG.PSU__TTC0__CLOCK__ENABLE {0} \
+ CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__TTC0__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__TTC0__WAVEOUT__ENABLE {0} \
+ CONFIG.PSU__TTC1__CLOCK__ENABLE {0} \
+ CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__TTC1__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__TTC1__WAVEOUT__ENABLE {0} \
+ CONFIG.PSU__TTC2__CLOCK__ENABLE {0} \
+ CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__TTC2__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__TTC2__WAVEOUT__ENABLE {0} \
+ CONFIG.PSU__TTC3__CLOCK__ENABLE {0} \
+ CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__TTC3__PERIPHERAL__IO {NA} \
+ CONFIG.PSU__TTC3__WAVEOUT__ENABLE {0} \
+ CONFIG.PSU__UART0_LOOP_UART1__ENABLE {0} \
+ CONFIG.PSU__UART0__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__UART1__BAUD_RATE {115200} \
+ CONFIG.PSU__UART1__MODEM__ENABLE {0} \
+ CONFIG.PSU__UART1__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__UART1__PERIPHERAL__IO {MIO 36 .. 37} \
+ CONFIG.PSU__USB0_COHERENCY {0} \
+ CONFIG.PSU__USB0__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__USB0__PERIPHERAL__IO {MIO 52 .. 63} \
+ CONFIG.PSU__USB0__REF_CLK_FREQ {26} \
+ CONFIG.PSU__USB0__REF_CLK_SEL {Ref Clk1} \
+ CONFIG.PSU__USB1__PERIPHERAL__ENABLE {0} \
+ CONFIG.PSU__USB2_0__EMIO__ENABLE {0} \
+ CONFIG.PSU__USB3_0__EMIO__ENABLE {0} \
+ CONFIG.PSU__USB3_0__PERIPHERAL__ENABLE {1} \
+ CONFIG.PSU__USB3_0__PERIPHERAL__IO {GT Lane2} \
+ CONFIG.PSU__USB__RESET__MODE {Boot Pin} \
+ CONFIG.PSU__USB__RESET__POLARITY {Active Low} \
+ CONFIG.PSU__USE_DIFF_RW_CLK_GP0 {0} \
+ CONFIG.PSU__USE__ADMA {0} \
+ CONFIG.PSU__USE__APU_LEGACY_INTERRUPT {0} \
+ CONFIG.PSU__USE__AUDIO {0} \
+ CONFIG.PSU__USE__CLK {0} \
+ CONFIG.PSU__USE__CLK0 {0} \
+ CONFIG.PSU__USE__CLK1 {0} \
+ CONFIG.PSU__USE__CLK2 {0} \
+ CONFIG.PSU__USE__CLK3 {0} \
+ CONFIG.PSU__USE__CROSS_TRIGGER {0} \
+ CONFIG.PSU__USE__DDR_INTF_REQUESTED {0} \
+ CONFIG.PSU__USE__DEBUG__TEST {0} \
+ CONFIG.PSU__USE__EVENT_RPU {0} \
+ CONFIG.PSU__USE__FABRIC__RST {1} \
+ CONFIG.PSU__USE__FTM {0} \
+ CONFIG.PSU__USE__GDMA {0} \
+ CONFIG.PSU__USE__IRQ {0} \
+ CONFIG.PSU__USE__IRQ0 {1} \
+ CONFIG.PSU__USE__IRQ1 {0} \
+ CONFIG.PSU__USE__M_AXI_GP0 {0} \
+ CONFIG.PSU__USE__M_AXI_GP1 {0} \
+ CONFIG.PSU__USE__M_AXI_GP2 {1} \
+ CONFIG.PSU__USE__PROC_EVENT_BUS {0} \
+ CONFIG.PSU__USE__RPU_LEGACY_INTERRUPT {0} \
+ CONFIG.PSU__USE__RST0 {0} \
+ CONFIG.PSU__USE__RST1 {0} \
+ CONFIG.PSU__USE__RST2 {0} \
+ CONFIG.PSU__USE__RST3 {0} \
+ CONFIG.PSU__USE__RTC {0} \
+ CONFIG.PSU__USE__STM {0} \
+ CONFIG.PSU__USE__S_AXI_ACE {0} \
+ CONFIG.PSU__USE__S_AXI_ACP {0} \
+ CONFIG.PSU__USE__S_AXI_GP0 {1} \
+ CONFIG.PSU__USE__S_AXI_GP1 {0} \
+ CONFIG.PSU__USE__S_AXI_GP2 {0} \
+ CONFIG.PSU__USE__S_AXI_GP3 {0} \
+ CONFIG.PSU__USE__S_AXI_GP4 {0} \
+ CONFIG.PSU__USE__S_AXI_GP5 {0} \
+ CONFIG.PSU__USE__S_AXI_GP6 {0} \
+ CONFIG.PSU__USE__USB3_0_HUB {0} \
+ CONFIG.PSU__USE__USB3_1_HUB {0} \
+ CONFIG.PSU__USE__VIDEO {0} \
+ CONFIG.PSU__VIDEO_REF_CLK__ENABLE {0} \
+ CONFIG.PSU__VIDEO_REF_CLK__FREQMHZ {33.333} \
+ CONFIG.QSPI_BOARD_INTERFACE {custom} \
+ CONFIG.SATA_BOARD_INTERFACE {custom} \
+ CONFIG.SD0_BOARD_INTERFACE {custom} \
+ CONFIG.SD1_BOARD_INTERFACE {custom} \
+ CONFIG.SPI0_BOARD_INTERFACE {custom} \
+ CONFIG.SPI1_BOARD_INTERFACE {custom} \
+ CONFIG.SUBPRESET1 {Custom} \
+ CONFIG.SUBPRESET2 {Custom} \
+ CONFIG.SWDT0_BOARD_INTERFACE {custom} \
+ CONFIG.SWDT1_BOARD_INTERFACE {custom} \
+ CONFIG.TRACE_BOARD_INTERFACE {custom} \
+ CONFIG.TTC0_BOARD_INTERFACE {custom} \
+ CONFIG.TTC1_BOARD_INTERFACE {custom} \
+ CONFIG.TTC2_BOARD_INTERFACE {custom} \
+ CONFIG.TTC3_BOARD_INTERFACE {custom} \
+ CONFIG.UART0_BOARD_INTERFACE {custom} \
+ CONFIG.UART1_BOARD_INTERFACE {custom} \
+ CONFIG.USB0_BOARD_INTERFACE {custom} \
+ CONFIG.USB1_BOARD_INTERFACE {custom} \
+ ] $zynq_ultra_ps_e_0
+
+
+ # Create instance: customIntr_0, and set properties
+ set customIntr_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlconcat:2.1 customIntr_0 ]
+
+ # Create interface connections
+ connect_bd_intf_net -intf_net axi_dma_0_M_AXI_MM2S [get_bd_intf_pins axi_dma_0/M_AXI_MM2S] [get_bd_intf_pins axi_smc/S00_AXI]
+ connect_bd_intf_net -intf_net axi_dma_0_M_AXI_S2MM [get_bd_intf_pins axi_dma_0/M_AXI_S2MM] [get_bd_intf_pins axi_smc/S01_AXI]
+ connect_bd_intf_net -intf_net axi_interconnect_0_M00_AXI [get_bd_intf_pins axi_intc_0/s_axi] [get_bd_intf_pins axi_interconnect_0/M00_AXI]
+ connect_bd_intf_net -intf_net axi_interconnect_0_M01_AXI [get_bd_intf_pins axi_interconnect_0/M01_AXI] [get_bd_intf_pins axi_dma_0/S_AXI_LITE]
+ connect_bd_intf_net -intf_net axi_smc_M00_AXI [get_bd_intf_pins axi_smc/M00_AXI] [get_bd_intf_pins zynq_ultra_ps_e_0/S_AXI_HPC0_FPD]
+ connect_bd_intf_net -intf_net zynq_ultra_ps_e_0_M_AXI_HPM0_LPD [get_bd_intf_pins zynq_ultra_ps_e_0/M_AXI_HPM0_LPD] [get_bd_intf_pins axi_interconnect_0/S00_AXI]
+
+ # Create port connections
+ connect_bd_net -net axi_dma_0_s2mm_introut [get_bd_pins axi_dma_0/s2mm_introut] [get_bd_pins customIntr_0/In0]
+ connect_bd_net -net axi_intc_0_irq [get_bd_pins axi_intc_0/irq] [get_bd_pins zynq_ultra_ps_e_0/pl_ps_irq0]
+ connect_bd_net -net rst_ps8_0_99M_peripheral_aresetn [get_bd_pins rst_ps8_0_99M/peripheral_aresetn] [get_bd_pins axi_intc_0/s_axi_aresetn] [get_bd_pins axi_interconnect_0/ARESETN] [get_bd_pins axi_interconnect_0/S00_ARESETN] [get_bd_pins axi_interconnect_0/M00_ARESETN] [get_bd_pins axi_dma_0/axi_resetn] [get_bd_pins axi_interconnect_0/M01_ARESETN] [get_bd_pins axi_smc/aresetn]
+ connect_bd_net -net xlconcat_0_dout [get_bd_pins customIntr_0/dout] [get_bd_pins axi_intc_0/intr]
+ connect_bd_net -net zynq_ultra_ps_e_0_pl_clk0 [get_bd_pins zynq_ultra_ps_e_0/pl_clk0] [get_bd_pins axi_intc_0/s_axi_aclk] [get_bd_pins rst_ps8_0_99M/slowest_sync_clk] [get_bd_pins axi_interconnect_0/ACLK] [get_bd_pins axi_interconnect_0/S00_ACLK] [get_bd_pins axi_interconnect_0/M00_ACLK] [get_bd_pins zynq_ultra_ps_e_0/maxihpm0_lpd_aclk] [get_bd_pins zynq_ultra_ps_e_0/saxihpc0_fpd_aclk] [get_bd_pins axi_dma_0/s_axi_lite_aclk] [get_bd_pins axi_interconnect_0/M01_ACLK] [get_bd_pins axi_smc/aclk] [get_bd_pins axi_dma_0/m_axi_mm2s_aclk] [get_bd_pins axi_dma_0/m_axi_s2mm_aclk]
+ connect_bd_net -net zynq_ultra_ps_e_0_pl_resetn0 [get_bd_pins zynq_ultra_ps_e_0/pl_resetn0] [get_bd_pins rst_ps8_0_99M/ext_reset_in]
+
+ # Create address segments
+ assign_bd_address -offset 0x00000000 -range 0x80000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_MM2S] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_DDR_LOW] -force
+ assign_bd_address -offset 0xC0000000 -range 0x20000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_MM2S] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_QSPI] -force
+ assign_bd_address -offset 0x00000000 -range 0x80000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_S2MM] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_DDR_LOW] -force
+ assign_bd_address -offset 0xC0000000 -range 0x20000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_S2MM] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_QSPI] -force
+ assign_bd_address -offset 0x80000000 -range 0x00010000 -target_address_space [get_bd_addr_spaces zynq_ultra_ps_e_0/Data] [get_bd_addr_segs axi_dma_0/S_AXI_LITE/Reg] -force
+ assign_bd_address -offset 0x80010000 -range 0x00010000 -target_address_space [get_bd_addr_spaces zynq_ultra_ps_e_0/Data] [get_bd_addr_segs axi_intc_0/S_AXI/Reg] -force
+
+ # Exclude Address Segments
+ exclude_bd_addr_seg -target_address_space [get_bd_addr_spaces axi_dma_0/Data_MM2S] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_DDR_HIGH]
+ exclude_bd_addr_seg -offset 0xFF000000 -range 0x01000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_MM2S] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_LPS_OCM]
+ exclude_bd_addr_seg -target_address_space [get_bd_addr_spaces axi_dma_0/Data_S2MM] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_DDR_HIGH]
+ exclude_bd_addr_seg -offset 0xFF000000 -range 0x01000000 -target_address_space [get_bd_addr_spaces axi_dma_0/Data_S2MM] [get_bd_addr_segs zynq_ultra_ps_e_0/SAXIGP0/HPC0_LPS_OCM]
+
+
+ # Restore current instance
+ current_bd_instance $oldCurInst
+
+ # Create PFM attributes
+ set_property PFM_NAME {vendor:kv260_som_som240_1_connector_kv260_carrier_som240_1_connector:kv260pf:0.0} [get_files [current_bd_design].bd]
+ set_property PFM.AXIS_PORT {M_AXIS_MM2S {type "M_AXIS" sptag "DMA_MM2S" is_range "false"} S_AXIS_S2MM {type "S_AXIS" sptag "DMA_S2MM" is_range "false"}} [get_bd_cells /axi_dma_0]
+ set_property PFM.AXI_PORT {M02_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } M03_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } M04_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } M05_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } M06_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } M07_AXI { memport "M_AXI_GP" sptag "" memory "" is_range "false" } } [get_bd_cells /axi_interconnect_0]
+ set_property PFM.AXI_PORT {M_AXI_HPM0_FPD { memport "M_AXI_GP" sptag "HPM0" memory "" is_range "false" } M_AXI_HPM1_FPD { memport "M_AXI_GP" sptag "HPM1" memory "" is_range "false" } S_AXI_HP0_FPD { memport "S_AXI_HP" sptag "HP0" memory "" is_range "false" } S_AXI_HP1_FPD { memport "S_AXI_HP" sptag "HP1" memory "" is_range "false" } S_AXI_HP2_FPD { memport "S_AXI_HP" sptag "HP2" memory "" is_range "false" } S_AXI_HP3_FPD { memport "S_AXI_HP" sptag "HP3" memory "" is_range "false" } S_AXI_HPC1_FPD { memport "S_AXI_HPC" sptag "HPC1" memory "" is_range "false" } } [get_bd_cells /zynq_ultra_ps_e_0]
+ set_property PFM.CLOCK {pl_clk0 {id "0" is_default "true" proc_sys_reset "/rst_ps8_0_99M" status "fixed" freq_hz "99999001"}} [get_bd_cells /zynq_ultra_ps_e_0]
+ set_property PFM.IRQ {In1 {is_range "true"}} [get_bd_cells /customIntr_0]
+
+
+ save_bd_design
+}
+# End of create_root_design()
+
+
+##################################################################
+# MAIN FLOW
+##################################################################
+
+create_root_design ""
+
+
+common::send_gid_msg -ssname BD::TCL -id 2053 -severity "WARNING" "This Tcl script was generated from a block design that has not been validated. It is possible that design <$design_name> may result in errors during validation."
diff --git a/hls4ml/templates/vitis_unified/myproject_axi_master.cpp b/hls4ml/templates/vitis_unified/myproject_axi_master.cpp
new file mode 100644
index 0000000000..775ba6cbbf
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/myproject_axi_master.cpp
@@ -0,0 +1,66 @@
+#include "MY_PROJECT_DM_INC.h"
+#include
+#include
+#include
+
+#define STREAM_BUF_IN_SZ VAL
+#define STREAM_BUF_OUT_SZ VAL
+
+template
+void load_input(ATOMIC_TYPE *in, hls::stream &inStream, int batch_size, const int TENSOR_SIZE) {
+mem_rd:
+ int baseQuery = 0;
+ for (int q = 0; q < batch_size; q++) {
+ for (int i = 0; i < TENSOR_SIZE / INPUT_LAYER_ARR::size; i++) {
+ INPUT_LAYER_ARR tmp;
+ for (int j = 0; j < INPUT_LAYER_ARR::size; j++) {
+ tmp[j] = in[baseQuery];
+ baseQuery++;
+ }
+ inStream.write(tmp);
+ }
+ }
+}
+
+template
+void store_result(ATOMIC_TYPE *out, hls::stream &out_stream, int batch_size, const int TENSOR_SIZE) {
+mem_wr:
+ int baseQuery = 0;
+ for (int q = 0; q < batch_size; q++) {
+ for (int i = 0; i < TENSOR_SIZE / OUT_LAYER_ARR::size; i++) {
+ OUT_LAYER_ARR tmp = out_stream.read();
+ for (int j = 0; j < OUT_LAYER_ARR::size; j++) {
+ out[baseQuery] = tmp[j];
+ baseQuery++;
+ }
+ }
+ }
+}
+
+// vitis-unified-wrapper-compute-func
+void compute(// vitis-unified-wrapper-compute-signature) {
+ for (int q = 0; q < batch_size; q++) {
+ // vitis-unified-wrapper-compute-body
+ }
+}
+
+void MY_PROJECT_TOP_FUNC(
+ // vitis-unified-wrapper-io
+ , int batch_size
+
+) {
+
+ // vitis-unified-wrapper-interface
+
+ // vitis-unified-wrapper-stream-dec
+
+ // vitis-unified-wrapper-stream-config
+
+ #pragma HLS dataflow
+
+ // vitis-unified-wrapper-load
+
+ compute(// vitis-unified-wrapper-compute-call-args);
+
+ // vitis-unified-wrapper-store
+}
diff --git a/hls4ml/templates/vitis_unified/myproject_axi_master.h b/hls4ml/templates/vitis_unified/myproject_axi_master.h
new file mode 100644
index 0000000000..2fd5bacf3c
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/myproject_axi_master.h
@@ -0,0 +1,13 @@
+#ifndef FILENAME_H
+#define FILENAME_H
+
+#include
+
+#include "MY_PROJECT_INC.h"
+
+void MY_PROJECT_TOP_FUNC(
+
+ // vitis-unified-wrapper-io
+ , int batch_size);
+
+#endif
diff --git a/hls4ml/templates/vitis_unified/myproject_axi_stream.cpp b/hls4ml/templates/vitis_unified/myproject_axi_stream.cpp
new file mode 100644
index 0000000000..40251cf2a1
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/myproject_axi_stream.cpp
@@ -0,0 +1,57 @@
+// hls-fpga-machine-learning insert include
+
+void load_input(hls::stream &axi_input_stream, hls::stream &model_input_stream,
+ int batch_size) {
+load_input_loop:
+ // send the data to the stream
+ for (int q = 0; q < batch_size; q++) {
+ for (unsigned chunk_idx = 0; chunk_idx < N_IN / INPUT_LAYER_TYPE::size; ++chunk_idx) {
+ INPUT_LAYER_TYPE input_chunk;
+ for (unsigned elem_idx = 0; elem_idx < INPUT_LAYER_TYPE::size; elem_idx++) {
+ dma_data_packet axi_packet;
+ axi_input_stream.read(axi_packet);
+ input_chunk[elem_idx] = axi_packet.data;
+ }
+ model_input_stream.write(input_chunk);
+ }
+ }
+}
+
+void store_result(hls::stream &model_output_stream, hls::stream &axi_output_stream,
+ int batch_size) {
+store_result_loop:
+ // send back the data
+ for (int q = 0; q < batch_size; q++) {
+ for (unsigned chunk_idx = 0; chunk_idx < N_OUT / OUTPUT_LAYER_TYPE::size; ++chunk_idx) {
+ OUTPUT_LAYER_TYPE output_chunk = model_output_stream.read();
+ for (unsigned elem_idx = 0; elem_idx < OUTPUT_LAYER_TYPE::size; elem_idx++) {
+ dma_data_packet axi_packet;
+ axi_packet.keep = -1;
+ axi_packet.data = (OUTPUT_GMEM_TYPE)(output_chunk[elem_idx]);
+ axi_packet.last = (q == (batch_size - 1)) && (((chunk_idx + 1) * (elem_idx + 1)) == N_OUT);
+ axi_output_stream.write(axi_packet);
+ }
+ }
+ }
+}
+
+void compute( // hls-fpga-machine-learning insert stream parameter,
+ int batch_size) {
+ for (int q = 0; q < batch_size; q++) {
+ MY_PROJECT(model_input_stream, model_output_stream);
+ }
+}
+
+void MY_PROJECT_TOP_FUNC(hls::stream &axi_input_stream, hls::stream &axi_output_stream,
+ int batch_size) {
+
+ // hls-fpga-machine-learning insert interface
+
+ // hls-fpga-machine-learning insert stream decl
+
+ #pragma HLS DATAFLOW
+
+ load_input(axi_input_stream, model_input_stream, batch_size);
+ compute(model_input_stream, model_output_stream, batch_size);
+ store_result(model_output_stream, axi_output_stream, batch_size);
+}
diff --git a/hls4ml/templates/vitis_unified/myproject_axi_stream.h b/hls4ml/templates/vitis_unified/myproject_axi_stream.h
new file mode 100644
index 0000000000..c5be95f208
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/myproject_axi_stream.h
@@ -0,0 +1,11 @@
+#ifndef MYPROJECT_AXI_H_
+#define MYPROJECT_AXI_H_
+
+#include
+// hls-fpga-machine-learning insert include
+
+// hls-fpga-machine-learning insert definitions
+
+void MY_PROJECT_TOP_FUNC(hls::stream &axi_input_stream, hls::stream &axi_output_stream,
+ int batch_size);
+#endif
diff --git a/hls4ml/templates/vitis_unified/myproject_bridge.cpp b/hls4ml/templates/vitis_unified/myproject_bridge.cpp
new file mode 100644
index 0000000000..9a56f10d99
--- /dev/null
+++ b/hls4ml/templates/vitis_unified/myproject_bridge.cpp
@@ -0,0 +1,71 @@
+#ifndef MYPROJECT_BRIDGE_H_
+#define MYPROJECT_BRIDGE_H_
+
+#include "firmware/PROJECT_FILE_NAME.h"
+#include "firmware/nnet_utils/nnet_helpers.h"
+#include
+#include