Shrink data with
emCompress Data management
emCompress is a compression system that is able to reduce
the storage requirements of data to be embedded into an
application. A compressed version of the data is stored in
the flash memory of the target system. In the target, a
small, fast decompressor can decompress the data
on-the-fly, whenever it is required. The decompressor can
decompress into RAM or send the output to an application
- Highly efficient compression.
- Small decompressor ROM footprint.
- Fixed decompressor RAM use, chosen when compressing .
- Wide range of codecs to choose from.
- Automatic selection of best codec for each file.
- Works with any operating system to accomplish a thread-safe environment.
- Easy-to-understand and simple-to-use.
- Simple to configure and integrate.
- Royalty free.
Software only grows in one direction
With increasing complexity of today's devices, customers
expect firmware updates over the lifetime of a device. It's
important to be able to replace both firmware images and
FPGA configuration bitstreams in the field. Typically,
firmware upgrades and other static content grow in size
over the lifetime of a device: features are added to
software, not taken away, it's just what happens. This is
where emCompress can help. emCompress will compress your
data so that it takes much less space on the target device.
The decompressors are tiny in ROM, but the benefits of
compression means you reclaim more space in your device for
the features you're trying to add. Because emCompress
decompressors can be tailored for RAM use, you can
decompress static content early in your application and not
devote RAM to decompression buffers.
Typical example – Configuring an FPGA
For instance, configuring an FPGA is one of the first
things that an application will do, decompressing a
bitstream and sending it to the FPGA. In this case, a small
decompression buffer can be held on the stack even though
the compressed bitstream is hundreds of kilobytes in size:
the temporary buffer is a known size that is configured at
compression time, and that RAM is free for reuse the moment
any decompression completes. emCompress enables
microcontrollers with small internal flash memory to store
FPGA image bitstreams which otherwise would require the
system designer to use a bigger version of the
Decompressing and Processing Data
emCompress features two decompression functions. The first
one is decompression into memory. The complete data is
decompressed and stored in a user-provided memory buffer.
Although the buffer can be temporary, this requires to have
enough free memory for the complete uncompressed data and
the workspace. Decompression into memory can for example be
useful for dynamic firmware images. The second function is
decompression in streamed mode. emCompress will use a small
temporary buffer whose size is set by the user when
compressing. Once a fragment of data is decompressed and
the buffer is filled, the user-provided output function is
called and the next buffer filled again with the next
fragment. Streamed decompression is particularly effective
for programming FPGAs or serving web content.
Performance and Memory Footprint
The amount of ROM that emCompress uses for decompression
varies with the codec selected between 0.5 kByte and 2.1
kByte. The total ROM requirement includes a single decoder,
and all supporting functions, excluding integrity checks.
The amount of RAM that emCompress uses is under complete
control as it is specified at compression time. Typically,
2KB of temporary RAM for decompression yield good
compression ratios, but even without temporary RAM, good
compression ratios can be achieved in many cases. No static
RAM is required, stack usage is well below 512 bytes.
Typical uses of emCompress
Compression has many fields of application. Static data
that is not frequently used and or has exceptionally high
compression rates are the prime target applications.
Typical examples are the configuration bitstreams to
program FPGA and CPLD devices, permanent files for embedded
web server static content, firmware updates and the user
interface messages for multiple languages.