diff --git a/src/finn/transformation/fpgadataflow/templates.py b/src/finn/transformation/fpgadataflow/templates.py index b0684b7f1605875050818c79914668ddf09c6860..b3b577cdccea3c499b16e99b15d149a73019a337 100644 --- a/src/finn/transformation/fpgadataflow/templates.py +++ b/src/finn/transformation/fpgadataflow/templates.py @@ -444,3 +444,9 @@ export PLATFORM_REPO_PATHS=$REMOTE_PLATFORM_REPO_PATHS$ python3.6 driver.py --exec_mode=$1 --batchsize=$2 --bitfile=$BITFILE$ \ --inputfile=input.npy --outputfile=output.npy --platform=alveo """ + +vitis_gen_xml_report_tcl_template = """ +open_project $VITIS_PROJ_PATH$/_x/link/vivado/vpl/prj/prj.xpr +open_run impl_1 +report_utilization -hierarchical -hierarchical_depth 5 -file open_project $VITIS_PROJ_PATH$/synth_report.xml -format xml +""" diff --git a/src/finn/transformation/fpgadataflow/vitis_build.py b/src/finn/transformation/fpgadataflow/vitis_build.py index c37d753f6070fb3f2dc82c22ecd6be4a20bcb5a2..215944d979b19ef1757ecded011d0da06e97836d 100644 --- a/src/finn/transformation/fpgadataflow/vitis_build.py +++ b/src/finn/transformation/fpgadataflow/vitis_build.py @@ -51,6 +51,7 @@ from finn.transformation.fpgadataflow.make_pynq_driver import MakePYNQDriver from finn.transformation.general import GiveReadableTensorNames, GiveUniqueNodeNames from finn.util.basic import make_build_dir from finn.transformation.infer_data_layouts import InferDataLayouts +from . import templates from enum import Enum @@ -251,6 +252,12 @@ class VitisLink(Transformation): with open(link_dir + "/config.txt", "w") as f: f.write(config) + # create tcl script to generate resource report in XML format + gen_rep_xml = templates.vitis_gen_xml_report_tcl_template + gen_rep_xml.replace("$VITIS_PROJ_PATH$", link_dir) + with open(link_dir + "/gen_report_xml.tcl", "w") as f: + f.write(gen_rep_xml) + # create a shell script and call Vitis script = link_dir + "/run_vitis_link.sh" working_dir = os.environ["PWD"] @@ -278,6 +285,23 @@ class VitisLink(Transformation): "Vitis .xclbin file not created, check logs under %s" % link_dir ) model.set_metadata_prop("bitfile", xclbin) + + # run Vivado to gen xml report + gen_rep_xml_sh = link_dir + "/gen_report_xml.sh" + working_dir = os.environ["PWD"] + with open(gen_rep_xml_sh, "w") as f: + f.write("#!/bin/bash \n") + f.write("cd {}\n".format(link_dir)) + f.write( + "vivado -mode tcl -source %s\n" % (link_dir + "/gen_report_xml.tcl") + ) + f.write("cd {}\n".format(working_dir)) + bash_command = ["bash", gen_rep_xml_sh] + process_genxml = subprocess.Popen(bash_command, stdout=subprocess.PIPE) + process_genxml.communicate() + # filename for the synth utilization report + synth_report_filename = link_dir + "/synth_report.xml" + model.set_metadata_prop("vivado_synth_rpt", synth_report_filename) return (model, False)