Xilinx LZ4 Compression and Decompression

LZ4 demo resides in L2/demos/lz4 directory.

Xilinx LZ4 compression/decompression is FPGA based implementation of standard LZ4. Xilinx implementation of LZ4 application is aimed at achieving high throughput for both compression and decompression. This Xilinx LZ4 application is developed and tested on Xilinx Alveo U200. To know more about standard LZ4 application please refer https://github.com/lz4/lz4

This application is accelerated using generic hardware architecture for LZ based data compression algorithms.

Results

Resource Utilization

Table below presents resource utilization of Xilinx LZ4 Compress/Decompress kernels. The final Fmax achieved is 262MHz

Flow LUT LUTMem REG BRAM URAM
Compress 56.5K 18.1K 50.9K 48 48
DeCompress 8.8K 692 6.7K 2 4

Performance Data

Table below presents best kernel throughput achieved for a single compute unit.

Topic Results
Best Compression Throughput 2.1 GB/s
Best Decompression Throughput 1.1 GB/s
Average Compression Ratio 2.13x (Silesia Benchmark)

Note: Overall throughput can still be increased with multiple compute units.

Software & Hardware

Software: Xilinx Vitis 2020.1
Hardware: xilinx_u200_xdma_201830_2 (Xilinx Alveo U200)

Usage

Execution Steps

Input Arguments:

      1. To execute single file for compression :  ./build/xil_lz4 -sx <compress_decompress xclbin> -c <file_name>
      2. To execute single file for decompression: ./build/xil_lz4 -sx <compress_decompress xclbin> -d <file_name.lz4>
      3. To validate various files together:       ./build/xil_lz4 -sx <compress_decompress xclbin> -l <files.list>
          3.a. <files.list>: Contains various file names with current path
      4. To execute single file for compression and decompression : ./build/xil_lz4 -sx <compress_decompress xclbin> -v <file_name>

 Note: Default arguments are set in Makefile

Help:

      ===============================================================================================
      Usage: application.exe -[-h-c-l-d-sx-v-B-x]

              --help                  -h      Print Help Options   Default: [false]
              --compress              -c      Compress
              --file_list             -l      List of Input Files
              --decompress            -d      Decompress
              --compress_decompress   -sx     Compress_Decompress binary
              --validate              -v      Single file validate for Compress and Decompress
              --block_size            -B      Compress Block Size [0-64: 1-256: 2-1024: 3-4096] Default: [0]
              --flow                  -x      Validation [0-All: 1-XcXd: 2-XcSd: 3-ScXd]   Default:[1]
      ===============================================================================================