.. index:: Mercurium FPGA Phase options .. _mercurium_fpga_options: Mercurium FPGA Phase options :::::::::::::::::::::::::::: The following sections list and summarize the Mercurium options from the FPGA Phase. force_fpga_periodic_support --------------------------- Force enabling the periodic tasks support in all FPGA task accelerators. This feature is only enabled in the FPGA task accelerators that require it (the target directive has the period or num_repetitions caluses). Usage example: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=force_fpga_periodic_support:1 .. _mercurium-limit_port: fpga_check_limits_memory_port ----------------------------- [Available in release 2.5.0] Controls whether the limits of local variables should be enforced when fulfilled using the shared memory port. This means, checking that data is not wrote/read behind the local variable limits. This happens when the variable width is not multiple of shared memory port width. By default the check is enabled. Usage example to disable the check: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct --Wf,--board=zedboard \ --variable=fpga_memory_port_width:128 --variable=fpga_check_limits_memory_port:0 .. warning:: This option can reduce the resources usage, but the application must ensure that the localmem variables have widths multiple of the shared memory port width. fpga_directive_data_pack ------------------------ [Available in release 3.0.0] Controls whether the DATA_PACK directive is placed in the HLS wrapper for struct/class parameters. It is enabled by default (the HLS generation remains equal to previous releases). Usage example to disable the support: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_directive_data_pack:0 fpga_ignore_deps_task_spawn --------------------------- Ignore the data dependences when spawning a task inside a FPGA task accelerator. This creates the task like it was annotated without data dependences. Note that this only affects the task spawn inside a FPGA task accelerator, not other devices which may spawn the task task. Usage example: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_ignore_deps_task_spawn:1 .. _mercurium-wide_port: fpga_memory_port_width ---------------------- Defines the width (in bits) of memory ports (only for wrapper localmem data) for FPGA task accelerators. Usage example: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_memory_port_width:128 It assumes that all task arguments read through the shared wide port are aligned to the port width. Then, the first element of all arguments with a localmem is aligned to the shared memory port width. For example, a shared memory port with a width of 512 bits will require an alignment of 64 bytes. This alignment has to be enforced in all FPGA task levels. The alignment of data copies managed by Nanos++ can be modified with the ``fpga-alloc-align`` option (see :ref:`nanox-fpga-help` for more information). Alternatively, the Mercurium option ``fpga_unaligned_memory_port`` adds support for unaligned arguments but with a higher FPGA resource consumption. fpga_memory_ports_mode ---------------------- [Available in release 2.5.0] Changes the creation strategy of memory ports between ``dedicated`` (default) and ``type``. The ``dedicated`` mode creates a port for each task parameter. The ``type`` mode creates a port for each parameter data type. Usage example: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_memory_ports_mode:type .. _mercurium-unaligned_port: fpga_unaligned_memory_port -------------------------- [Available in release 2.3.0] Enables the logic to support unaligned memory regions handled by the shared memory port. This option only has effect when the fpga_memory_port_width option is also present. Usage example: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_memory_port_width:128 \ --variable=fpga_unaligned_memory_port:1 .. warning:: This option will increase the resources consumption of FPGA wrappers. However, it may be mandatory depending on application data partition. fpga_unordered_args ------------------- [Available in release 2.5.0] Controls whether the support for handling the task argument out of order must be implemented or not. It is enabled by default up to release 2.5.2 (the HLS generation remains equal to previous releases). It is disabled by default since release 3.0.0. Usage example to disable the support: .. code:: bash fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \ --Wf,--board=zedboard --variable=fpga_unordered_args:0