フラッシュ チップから FPGA ( Mojo開発ボード上のXilinx Spartan6-LX9 )にロードするデータを解凍するために使用する優れた圧縮アルゴリズムを探しています。CPU ( ATmega16U4 ) は 8 MHz で動作し、2 KiB の RAM と 16 KiB のプログラム フラッシュしかなく、そのうちのいくつかは既にインストールされているため、解凍は高速である必要があり、そのために多くの作業メモリを必要としません。使用する。圧縮はコンピュータ上で 1 回だけ実行され、圧縮アルゴリズムは任意の入力に対して機能する必要がないため、圧縮速度は特に重要ではありません。
これはビットストリームの例です。フォーマットは、Spartan-6 FPGA コンフィギュレーションマニュアル (92 ページから) に記載されています。
一般に、データに存在するパターンはいくつかのカテゴリに分類されます。私が取り組んでいる制約を考えると、これらのうちどれが最も利用しやすいかはわかりません。
データは全体的に、既知のフォーマットのパケットのセットに編成されます。ビットストリームの特定の部分はいくぶん「定型化」されており (たとえば、特定のレジスタへの書き込みによって常に開始および終了します)、その他のコマンドは予測可能なシーケンスで表示されます。
一部のバイトは、他のバイトよりもはるかに一般的です。00 と FF が最も頻繁に使用されますが、ビットが設定されていない他のバイト (80、44、02 など) も非常に一般的です。
00 および FF バイトのランは非常に頻繁に発生します。他のパターンはローカル スケールで表示されることがありますが (たとえば、16 バイトのシーケンスが数回繰り返されます)、グローバルではありません。
制約が与えられた場合、このタスクに適した圧縮アルゴリズム(ライブラリではなく、適合することが確実でない限り!) は何でしょうか?