1

フラッシュ チップから 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 バイトのシーケンスが数回繰り返されます)、グローバルではありません。

制約が与えられた場合、このタスクに適した圧縮アルゴリズム(ライブラリではなく、適合することが確実でない限り!) は何でしょうか?

4

3 に答える 3

2

組み込みのビットストリーム圧縮を試しましたか? これは、完全でないデバイスでは非常にうまく機能します。これは bitgen オプションであり、FPGA はすぐに使用できるため、マイクロにリソースへの影響はありません。

圧縮が達成される方法は、次のとおりです。

http://www.xilinx.com/support/answers/16996.html

その他の可能性については、comp.arch.fpga で議論されています。

https://groups.google.com/forum/?fromgroups#!topic/comp.arch.fpga/7UWTrS307wc

ある投稿者は、比較的制約のある組み込みシステムにLZMAをうまく実装したようです。7zip を使用して、予想される圧縮率の種類を確認し、埋め込み部分の実装に取り​​掛かる前に十分かどうかを確認できます。

于 2013-05-28T10:59:14.847 に答える
2

あなたの説明から、バイトとランをハフマンコーディングするランレングスエンコーディングをお勧めします。主に頻度を蓄積し、ハフマン ツリーを構築するために、データ自体に必要なメモリはほとんどありません。1K未満。

ランの長さのヒストグラムを作成して、ランの長さに割り当てるビット数を決定する必要があります。

于 2013-05-28T15:06:04.870 に答える
2

LZO 圧縮ライブラリの使用を検討する必要があります。おそらく現存する最速の解凍プログラムの 1 つを備えており、解凍にはメモリは必要ありません。ただし、圧縮には 64KB のメモリ (圧縮レベルの 1 つで 8KB) が必要です。解凍だけが必要な場合は、それでうまくいくかもしれません。

LZO プロジェクトは、miniLZOと呼ばれるこのライブラリの特別な縮小版も提供しています。著者によると、miniLZO は i386 上で 5KB 未満のバイナリにコンパイルされます。16KB のフラッシュがあるため、制約にちょうど収まる可能性があります。

LZO コンプレッサーは現在UPX( uecutablespの ltimate xacker ) によって使用されています。

于 2013-05-28T07:15:12.230 に答える