diff --git a/run-docker.sh b/run-docker.sh index d774f0871d7b52e1015f4817a0e8aa49bef5a427..77441ed955c8a055ac57a7328f2998f8855c20e9 100755 --- a/run-docker.sh +++ b/run-docker.sh @@ -14,7 +14,9 @@ DOCKER_PASSWD="finn" # containers from the same user DOCKER_RND=$(shuf -i0-32768 -n1) DOCKER_TAG="finn_${DOCKER_UNAME}" -DOCKER_INST_NAME="finn_${DOCKER_UNAME}_${DOCKER_RND}" +# uncomment to run multiple instances with different names +# DOCKER_INST_NAME="finn_${DOCKER_UNAME}_${DOCKER_RND}" +DOCKER_INST_NAME="finn_${DOCKER_UNAME}" : ${JUPYTER_PORT=8888} : ${NETRON_PORT=8081} @@ -38,6 +40,7 @@ PYVERILATOR_LOCAL=$SCRIPTPATH/pyverilator PYNQSHELL_LOCAL=$SCRIPTPATH/PYNQ-HelloWorld BUILD_LOCAL=/tmp/$DOCKER_INST_NAME VIVADO_HLS_LOCAL=$VIVADO_PATH +: ${VIVADO_IP_CACHE=$BUILD_LOCAL/vivado_ip_cache} # clone dependency repos git clone --branch feature/finn_onnx_export $BREVITAS_REPO $BREVITAS_LOCAL || git -C "$BREVITAS_LOCAL" pull @@ -49,6 +52,7 @@ git clone $PYNQSHELL_REPO $PYNQSHELL_LOCAL || git -C "$PYNQSHELL_LOCAL" pull # ensure build dir exists locally mkdir -p $BUILD_LOCAL +mkdir -p $VIVADO_IP_CACHE echo "Instance is named as $DOCKER_INST_NAME" echo "Mounting $SCRIPTPATH into /workspace/finn" @@ -62,6 +66,7 @@ echo "Mounting $BUILD_LOCAL into $BUILD_LOCAL" echo "Mounting $VIVADO_PATH into $VIVADO_PATH" echo "Port-forwarding for Jupyter $JUPYTER_PORT:$JUPYTER_PORT" echo "Port-forwarding for Netron $NETRON_PORT:$NETRON_PORT" +echo "Vivado IP cache dir is at $VIVADO_IP_CACHE" if [ "$1" = "test" ]; then echo "Running test suite" @@ -101,6 +106,7 @@ docker run -t --rm --name $DOCKER_INST_NAME -it \ -e VIVADO_PATH=$VIVADO_PATH \ -e FINN_INST_NAME=$DOCKER_INST_NAME \ -e FINN_ROOT="/workspace/finn" \ +-e VIVADO_IP_CACHE="$VIVADO_IP_CACHE" \ -p $JUPYTER_PORT:$JUPYTER_PORT \ -p $NETRON_PORT:$NETRON_PORT \ $DOCKER_TAG bash -c "$DOCKER_CMD" diff --git a/src/finn/transformation/fpgadataflow/make_pynq_proj.py b/src/finn/transformation/fpgadataflow/make_pynq_proj.py index f1f46e4f84eb95ff6acdb2c099470c11546410df..3a63f23336957dcc95ebedc2f8a45c144f4e2035 100644 --- a/src/finn/transformation/fpgadataflow/make_pynq_proj.py +++ b/src/finn/transformation/fpgadataflow/make_pynq_proj.py @@ -69,6 +69,7 @@ class MakePYNQProject(Transformation): out_if_name = "out_r_0" clk_name = "ap_clk_0" nrst_name = "ap_rst_n_0" + vivado_ip_cache = os.getenv("VIVADO_IP_CACHE", default="") # create a temporary folder for the project vivado_pynq_proj_dir = make_build_dir(prefix="vivado_pynq_proj_") @@ -85,6 +86,7 @@ class MakePYNQProject(Transformation): out_if_name, clk_name, nrst_name, + vivado_ip_cache, ) with open(vivado_pynq_proj_dir + "/ip_config.tcl", "w") as f: diff --git a/src/finn/transformation/fpgadataflow/templates.py b/src/finn/transformation/fpgadataflow/templates.py index 8749532c38e0951151f30ae9b3875a273bed4c42..a613d0622ee95e7f1ca848142e2930cf6d3c91bd 100644 --- a/src/finn/transformation/fpgadataflow/templates.py +++ b/src/finn/transformation/fpgadataflow/templates.py @@ -9,6 +9,7 @@ variable config_ip_axis_name_out variable config_ip_use_axilite variable config_ip_project_dir variable config_output_products_dir +variable config_remote_cache # for arguments involving paths below: use absolute paths or relative to the # platform/overlay/bitstream folder @@ -36,6 +37,8 @@ set config_ip_clk_name %s set config_ip_nrst_name %s # whether the IP needs an AXI Lite interface for control set config_ip_use_axilite 0 +# Vivado OOC IP cache +set config_remote_cache "%s" """ call_pynqshell_makefile_template = """ diff --git a/tests/fpgadataflow/test_fpgadataflow_ip_stitch.py b/tests/fpgadataflow/test_fpgadataflow_ip_stitch.py index e1f7c876eb0793f0c7189c80e7629f58c9bcdb6d..40b272efb9d6b00126312a9934f28c2a899bd942 100644 --- a/tests/fpgadataflow/test_fpgadataflow_ip_stitch.py +++ b/tests/fpgadataflow/test_fpgadataflow_ip_stitch.py @@ -54,7 +54,7 @@ def create_one_fc_model(): MW=m, MH=m, SIMD=m, - PE=m, + PE=m // 2, inputDataType=idt.name, weightDataType=wdt.name, outputDataType=odt.name, @@ -69,7 +69,7 @@ def create_one_fc_model(): ["outp_tlast"], domain="finn", backend="fpgadataflow", - NumIters=1, + NumIters=2, ElemWidth=odt.bitwidth(), StreamWidth=odt.bitwidth() * m, )