BIND OP and STORAGE

This is simple example of vector addition to describe how to use BIND OP and STORAGE for better implementation style.

KEY CONCEPTS: BIND OP, BIND STORAGE

KEYWORDS: BIND_OP, BIND_STORAGE, impl, op, type, latency

In this design we propose a easy way to specify hardware resource and its properties by new bind_op and bind_storage pragma.

bind_op pragma

#pragma HLS bind_op variable=<string> op=<string> impl=<string> latency=<unsigned>

Using the bind_op pragma we can specify DSP/non-DSP resources and allows use to specify the latency. In this example we are using addition and multiply operations using dsp resources.

#pragma HLS BIND_OP variable=v1_buffer op=mul  impl=DSP latency=2
#pragma HLS BIND_OP variable=v2_buffer op=mul  impl=DSP latency=2
#pragma HLS BIND_OP variable=vout_buffer op=add  impl=DSP

bind_storage pragma

#pragma HLS bind_storage variable=<string> type=<string> impl=<string> latency=<unsigned>

Using the bind_storage pragma we have flexibility to decide on the port type(FIFO/RAM_1P/RAM_2P), storage (BRAM/URAM/LUTRAM) and latency. In this example we are using RAM_1P with latency 2 for input buffers.

#pragma HLS BIND_STORAGE variable=v1_buffer type=RAM_1P impl=BRAM latency=2
#pragma HLS BIND_STORAGE variable=v2_buffer type=RAM_1P impl=LUTRAM latency=2
#pragma HLS BIND_STORAGE variable=vout_buffer type=RAM_1P impl=URAM

EXCLUDED PLATFORMS:

  • Embedded ZCU102

  • ZC706 Evaluation board

  • All NoDMA Platforms, i.e u50 nodma etc

DESIGN FILES

Application code is located in the src directory. Accelerator binary files will be compiled to the xclbin directory. The xclbin directory is required by the Makefile and its contents will be filled during compilation. A listing of all the files in this example is shown below

src/host.cpp
src/vadd.cpp

Access these files in the github repo by clicking here.

COMMAND LINE ARGUMENTS

Once the environment has been configured, the application can be executed by

./bind_op_storage <vadd XCLBIN>