2

ネイティブ HW 関数を備えたマイクロコントローラーを使用して、多項式を自由に定義できるメモリのチャンクから CRC32 ハッシュを計算しています。システムには、16 ビットや 8 ビットなど、CRC のビット長が異なるさまざまなデータ リンクがあることがわかりました。これにはハードウェア エンジンを使用する予定です。

オンライン ツールを使用した簡単なテストでは、8 ビット CRC と同じ結果を持つ 32 ビット多項式を見つけることができると結論付けました。例:

  • 8ビットエンジンとpoly 0xb7で「サンプル文字列」をハッシュすると、結果は0x97になります
  • 16ビットエンジンとpoly 0xb700で「サンプル文字列」をハッシュすると、結果は0x9700になります
  • ...32 ビット エンジンと poly 0xb7000000 は、結果 0x97000000 を生成します (初期値がゼロ、最終 xor がゼロ、反射なし)

そのため、ポリゴンをゼロでパディングし、結果を右シフトするとうまくいくようです。しかし、32 ビット エンジンを 16 または 8 ビット エンジンとして動作させる一連のパラメータを「常に」見つけることは可能ですか? (poly、final xor、init val、inversions を含む)

より多くのコンテキストを提供し、「ネイティブ エンジンを使用しないでください」などの「バイパス回答」を防ぐには: 一般的な設計エラーが冗長な処理ノードに伝播するのを防ぐ必要がある、安全性が重要なシステムのシナリオがあります。そのための 1 つの解決策は、1 つのノードでソフトウェア ベースの CRC 計算を行い、そのペアでハードウェア ベースの CRC 計算を行うことです。

4

2 に答える 2

2

はい、あなたがしていることは、反映されていないCRCに対して一般的に機能します。プリおよびポスト コンディショニングは、ハードウェア命令ループの周りのコードで非常に簡単に実行できます。

ハードウェア CRC にこれに対するオプションがないと仮定すると、反映された CRC を実行するには、各入力バイトを反映してから最終結果を反映する必要があります。これは、ハードウェア CRC を使用する目的に反する可能性があります。(ただし、目的が別の実装を持つことだけである場合は、そうではないかもしれません。)

于 2017-04-13T03:38:47.340 に答える