【发布时间】:2013-05-28 07:02:14
【问题描述】:
我正在寻找一种好的压缩算法,用于从闪存芯片解压缩数据以加载到 FPGA(Xilinx Spartan6-LX9,在Mojo 开发板上)。它必须快速解压缩并且不需要大量工作内存,因为 CPU(ATmega16U4)的时钟频率为 8 MHz,并且只有 2 KiB 的 RAM 和 16 KiB 的程序闪存,其中一些是已经在使用了。压缩速度并不是特别重要,因为压缩只会在计算机上运行一次,并且压缩算法不需要对任意输入起作用。
Here is an example bitstream. 格式记录在the Spartan-6 FPGA Configuration 手册中(从第 92 页开始)。
一般来说,数据中存在的模式分为几类,鉴于我正在使用的约束,我不确定其中哪一个最容易被利用:
数据被整体组织成一组已知格式的数据包。比特流的某些部分有些“刻板印象”(例如,它总是以写入某些寄存器开始和结束),而其他命令将以可预测的顺序出现。
某些字节比其他字节更常见。 00 和 FF 是迄今为止最常见的,但其他位设置很少的字节(例如 80、44、02)也很常见。
00 和 FF 字节的运行非常频繁。其他模式有时会出现在局部范围内(例如,一个 16 字节的序列会重复几次),但不会出现在全局范围内。
在给定约束的情况下,什么是适合此任务的压缩算法(不是库,除非您确定它适合!)?
【问题讨论】:
-
您是否需要在目标系统上编写压缩算法或解压缩算法? (或两者兼而有之?)
-
只在目标上解压。可以在生成比特流的计算机上处理压缩。
-
好的,在这种情况下,Mark 的初步建议似乎适用,因为 LZ4 解码算法几乎不需要 RAM(只有几个变量)。它的编码大小通常约为 150 字节或更少。压缩部分必须生成小块,小到足以保持在目标系统的限制范围内。
-
@Cyan:LZ4 解压缩似乎要求您能够查看最多 64KB 的解压缩数据。这是我不必使用的大量内存!
-
不,它不需要它。它只是“可以”做到这一点,但它不需要。如果你的数据被切割成小的独立块,它就会使用它。
标签: embedded compression fpga lossless-compression