VTA Configuration ================= The VTA stack incorporates both a hardware accelerator stack and a TVM based software stack. VTA incorporates flexibility out of the box: by modifying the ``vta/config/vta_config.json`` high-level configuration file, the user can change the shape of the tensor intrinsic, clock frequency, pipelining, data type width, and on-chip buffer sizes. Parameters Overview ------------------- We explain the parameters listed in the ``vta_config.json`` file in the table below. +-----------------------+------------+--------------------------------------------------------+ | Attribute | Format | Description | +=======================+============+========================================================+ | ``TARGET`` | String | The TVM device target. | +-----------------------+------------+--------------------------------------------------------+ | ``HW_TARGET`` | Int | FPGA frequency in MHz. | +-----------------------+------------+--------------------------------------------------------+ | ``HW_CLK_TARGET`` | Int | FPGA clock period in ns target for HLS tool. | +-----------------------+------------+--------------------------------------------------------+ | ``HW_VER`` | String | VTA hardware version number. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_INP_WIDTH`` | Int (log2) | Input data type signed integer width. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_WGT_WIDTH`` | Int (log2) | Weight data type signed integer width. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_ACC_WIDTH`` | Int (log2) | Accumulator data type signed integer width. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_OUT_WIDTH`` | Int (log2) | Output data type signed integer width. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_BATCH`` | Int (log2) | VTA matrix multiply intrinsic output dimension 0. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_BLOCK_IN`` | Int (log2) | VTA matrix multiply reduction dimension. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_BLOCK_OUT`` | Int (log2) | VTA matrix multiply intrinsic output dimension 1. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_UOP_BUFF_SIZE`` | Int (log2) | Micro-op on-chip buffer in Bytes. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_INP_BUFF_SIZE`` | Int (log2) | Input on-chip buffer in Bytes. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_WGT_BUFF_SIZE`` | Int (log2) | Weight on-chip buffer in Bytes. | +-----------------------+------------+--------------------------------------------------------+ | ``LOG_ACC_BUFF_SIZE`` | Int (log2) | Accumulator on-chip buffer in Bytes. | +-----------------------+------------+--------------------------------------------------------+ .. note:: When a parameter name is preceded with ``LOG``, it means that it describes a value that can only be expressed a power of two. For that reason we describe these parameters by their log2 value. For instance, to describe an integer width of 8-bits for the input data types, we set the ``LOG_INP_WIDTH`` to be 3, which is the log2 of 8. Similarly, to descibe a 64kB micro-op buffer, we would set ``LOG_UOP_BUFF_SIZE`` to be 16. We provide additional detail below regarding each parameter: - ``TARGET``: Can be set to ``"pynq"`` or ``"sim"``. - ``HW_TARGET``: In pynq mode, can be set to ``100``, ``142``, ``167``, or ``200`` MHz. - ``HW_CLK_TARGET``: The lower the target, the more pipeline stages HLS will insert to achieve timing closure during place and route (this can also slightly decrease performance). - ``HW_VER``: Hardware version which increments everytime the VTA hardware design changes. This parameter is used to uniquely idenfity hardware bitstreams. - ``LOG_OUT_WIDTH``: We recommend matching ``LOG_OUT_WIDTH`` to ``LOG_INP_WIDTH``. - ``LOG_BATCH``: Equivalent to A in multiplication of shape (A, B) x (B, C), or typically, the batch dimension. - ``LOG_BATCH``: Equivalent to A in multiplication of shape (A, B) x (B, C), or typically, the batch dimension. - ``LOG_BLOCK_IN``: Equivalent to B in multiplication of shape (A, B) x (B, C), or typically, the input channel dimension. - ``LOG_BLOCK_OUT``: Equivalent to C in multiplication of shape (A, B) x (B, C), or typically, the output channel dimension.