Project board: https://github.com/users/enzoevers/projects/2
Compress and decompress data with common algorithms and use benchmarks to see if offloading compression and/or decompression for large data sets can improve performance.
As for now, first the DEFLATE algorithm will be used with the ZIP file format.
- Learn about (de)compression algorithms
- Get more experience with FPGA/Zynq
See DevEnvSetup.md.
Note that all development should keep the following targets in mind:
- x86 Linux
- x86 Windows
- ARM Zynq
- Use the zlib library to compress and decompress (example). This should run on both Deskptop and the Zynq Processing System (PS).
- A single file
- DEFLATE -> compressed data file
- DEFLATE -> ZIP file
- compressed data file -> INFLATE
- ZIP file -> INFLATE
- Multiple files
- DEFLATE -> ZIP file
- ZIP file -> INFLATE
- For benchmarking see: https://github.com/okuvshynov/b63
- A single file
- Write the DEFLATE algorithm in C.
- See
1.
, but replace the DEFLATE implementation from zlib with my custom implementation
- See
- Write the INFLATE algorithm in C.
- See
1.
, but replace the INFLATE implementation from zlib with my custom implementation
- See
- Create a pipeline on the Zynq that sends data from the Processing System (PS) to the FPGA/Programmable Logic (PL) and back to the PS.
- Success
- Implement an FPGA-friendly version of DEFLATE in VHDL
- See
1.
, but replace the DEFLATE implementation from zlib with my custom FPGA-offloading implementation
- See
- Implement an FPGA-friendly version of INFLATE in VHDL
- See
1.
, but replace the DEFLATE implementation from zlib with my custom FPGA-offloading implementation
- See
Now compression and decompression works. Something that I was thinking about as well was that a stream of incoming data in the FPGA could be compressed on the FPGA and, as a stream, send compressed chucks to the PS. This way it may be possible to store data (logging) data more efficiently without needing a lot of RAM.
- https://en.wikipedia.org/wiki/Deflate
- Also see the "Hardware encoders" section
- https://zlib.net/feldspar.html
- https://www.infinitepartitions.com/cgi-bin/showarticle.cgi?article=art001
- https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-wusp/fb98aa28-5cd7-407f-8869-a6cef1ff1ccb?redirectedfrom=MSDN