diff --git a/src/finn/qnn-data/mdd-data/finn_design.mdd b/src/finn/qnn-data/mdd-data/finn_design.mdd new file mode 100644 index 0000000000000000000000000000000000000000..517180fa94079ad3e04d3a45776f165fd82cc483 --- /dev/null +++ b/src/finn/qnn-data/mdd-data/finn_design.mdd @@ -0,0 +1,36 @@ +# Copyright (c) 2022 Advanced Micro Devices, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of Advanced Micro Devices nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +OPTION psf_version = 2.1; + +BEGIN driver finn_design + OPTION supported_peripherals = (finn_design); + OPTION driver_state = ACTIVE; + OPTION VERSION = 1.0; + OPTION NAME = finn_design; +END driver diff --git a/src/finn/qnn-data/mdd-data/finn_design.tcl b/src/finn/qnn-data/mdd-data/finn_design.tcl new file mode 100644 index 0000000000000000000000000000000000000000..b8c55e12b22a2152157cbecd2b0b4bf061e9918a --- /dev/null +++ b/src/finn/qnn-data/mdd-data/finn_design.tcl @@ -0,0 +1,58 @@ +# Copyright (c) 2022 Advanced Micro Devices, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of Advanced Micro Devices nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# @brief Address range defines for FINN IP. +# @author Thomas B. Preußer <thomas.preusser@amd.com> +## + +proc generate {drv_handle} { + # Bounds of all exposed slave address ranges to xparameters.h + set file_handle [hsi::utils::open_include_file "xparameters.h"] + generate_memrange_parameters $drv_handle $file_handle + close $file_handle +} + +proc generate_memrange_parameters {drv_handle file_handle} { + # Collect unique slave interfaces to custom module + array unset ranges + foreach mem_range [hsi::get_mem_ranges -of_object [hsi::get_cells -hier [hsi::get_sw_processor]] $drv_handle] { + set ranges([common::get_property SLAVE_INTERFACE $mem_range]) [list \ + [common::get_property BASE_NAME $mem_range] \ + [common::get_property BASE_VALUE $mem_range] \ + [common::get_property HIGH_NAME $mem_range] \ + [common::get_property HIGH_VALUE $mem_range] \ + ] + } + + # Produce defines for the address range bounds + set prefix "XPAR_[string toupper $drv_handle]" + foreach {key val} [array get ranges] { + puts $file_handle "#define [format "%s_%s_%s" $prefix $key [lindex $val 0]] [lindex $val 1]" + puts $file_handle "#define [format "%s_%s_%s" $prefix $key [lindex $val 2]] [lindex $val 3]" + } + puts $file_handle "" +} diff --git a/src/finn/transformation/fpgadataflow/create_stitched_ip.py b/src/finn/transformation/fpgadataflow/create_stitched_ip.py index 8ef780e46e8024100404eb6b4262e434520838b9..59e424547a2014bb92d1515e171427d9982caa95 100644 --- a/src/finn/transformation/fpgadataflow/create_stitched_ip.py +++ b/src/finn/transformation/fpgadataflow/create_stitched_ip.py @@ -26,11 +26,14 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import pkg_resources as pk + import json import multiprocessing as mp import os import subprocess import warnings +from shutil import copytree from finn.custom_op.registry import getCustomOp from finn.transformation.base import Transformation @@ -442,6 +445,21 @@ class CreateStitchedIP(Transformation): "ipx::add_file dcp/%s.dcp " "[ipx::get_file_groups xilinx_simulationcheckpoint]" % block_name ) + # add a rudimentary driver mdd to get correct ranges in xparameters.h later on + example_data_dir = pk.resource_filename("finn.qnn-data", "mdd-data/") + copytree(example_data_dir, vivado_stitch_proj_dir + "/mdd-data") + tcl.append("file copy -force mdd-data ip/") + tcl.append("ipx::add_file_group -type software_driver {} [ipx::current_core]") + tcl.append( + "set_property type mdd [ipx::add_file mdd-data/finn_design.mdd" + "[ipx::get_file_groups xilinx_softwaredriver -of_objects " + "[ipx::current_core]]]" + ) + tcl.append( + "set_property type tclSource [ipx::add_file mdd-data/finn_design.tcl " + "[ipx::get_file_groups xilinx_softwaredriver -of_objects " + "[ipx::current_core]]]" + ) tcl.append("ipx::update_checksums [ipx::find_open_core %s]" % block_vlnv) tcl.append("ipx::save_core [ipx::find_open_core %s]" % block_vlnv) # export list of used Verilog files (for rtlsim later on)