このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
General CRC Syndrome Detector HDL Optimized
CRC を使用した入力データの誤り検出
ライブラリ:
Communications Toolbox HDL Support /
Error Detection and Correction /
CRC
説明
General CRC Syndrome Detector HDL Optimized ブロックはデータに対して巡回冗長検査 (CRC) を実行し、結果のチェックサムを、追加されたチェックサムと比較します。General CRC Syndrome Detector HDL Optimized ブロックの処理は HDL コード生成用に最適化されます。2 つのチェックサムが一致しない場合、ブロックはエラーをレポートします。フレーム全体を一度に処理する代わりに、このブロックはデータのサンプル ストリームを付随する制御信号と共に受け入れて返します。制御信号は、サンプルの妥当性やフレームの境界を示します。より高いスループットを達成するため、このブロックは最大で CRC 長までのベクトル データを受け入れ、並列なアーキテクチャを実装します。
例
HDL に最適化された CRC ライブラリ ブロックの使用
この例では、Simulink® のGeneral CRC Generator HDL OptimizedブロックとGeneral CRC Syndrome Detector HDL Optimizedブロックを使用する方法、および IEEE® 802.11 規格 [1] で規定されている CRC-CCITT の要件を満たすようにそれらのブロックを構成する方法を説明します。
端子
入力
dataIn — 入力データ
スカラー | ベクトル
入力データ。次のいずれかのオプションとして指定します。
スカラー – 複数のビットを表す整数を指定します。この場合、ブロックは符号なし整数 (
uint8
、uint16
、またはuint32
) またはfixdt(0,N,0)
データ型をサポートします。ベクトル – バイナリ値のベクトルを指定します。この場合、ブロックは
double
またはBoolean
データ型をサポートします。
データ幅は CRC の長さ以下でなければならず、CRC の長さはデータ幅で割り切れなければなりません。CRC-CCITT/CRC-16 に対して有効なデータ幅は 16、8、4、2 および 1 です。
例: uint8
ベクトル入力 [0 0 0 1 0 0 1 1]
は 19
と等価です。
データ型: double
| uint8
| uint16
| uint32
| fixed point
| Boolean
startIn — 入力フレーム インジケーターの開始
スカラー
入力フレーム インジケーターの開始。boolean スカラーとして指定します。
データ型: Boolean
endIn — 入力フレーム インジケーターの終了
スカラー
入力フレーム インジケーターの終了。boolean スカラーとして指定します。
データ型: Boolean
validIn — 有効な入力データ インジケーター
スカラー
有効な入力データ インジケーター。boolean スカラーとして指定します。
これは、dataIn 端子のデータが有効であるかどうかを示す制御信号です。
データ型: Boolean
出力
dataOut — 出力データ
スカラー | ベクトル
出力データ。スカラーまたはベクトルとして返されます。出力データ型とサイズは入力データと同じです。
データ型: double
| uint8
| uint16
| uint32
| Boolean
| fixed point
startOut — 出力フレーム インジケーターの開始
スカラー
出力フレーム インジケーターの開始。boolean スカラーとして返されます。
データ型: Boolean
endOut — 出力フレーム インジケーターの終了
スカラー
出力フレーム インジケーターの終了。Boolean
スカラーとして返されます。
データ型: Boolean
validOut — 有効な出力データ インジケーター
スカラー
有効な出力データ インジケーター。boolean スカラーとして返されます。
これは、dataOut 端子のデータが有効であるかどうかを示す制御信号です。
データ型: Boolean
err — エラー インジケーター
スカラー
受信データの破損を示すエラー インジケーター。boolean スカラーとして返されます。
この値が 1
である場合、メッセージには少なくとも 1 つのエラーが含まれています。この値が 0
である場合、メッセージにはエラーがありません。
データ型: Boolean
パラメーター
Polynomial — 生成多項式
[1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]
(既定値) | バイナリ ベクトル
係数を降べきの順にしたバイナリ ベクトルとして生成多項式を指定します。ベクトルの長さは多項式の次数に 1 を加算したものに等しくなります。
Initial state — シフト レジスタの初期条件
0
(既定値) | バイナリ スカラー | バイナリ ベクトル
内部シフト レジスタの初期条件を、倍精度または単精度のバイナリ スカラーまたはベクトルで指定します。ベクトル入力の場合、初期状態の長さは生成多項式の次数と等しくなければなりません。
Direct method — チェックサムの計算方法
off
(既定値) | on
チェックサムを計算する方法を boolean スカラーとして指定します。
このパラメーターを選択すると、CRC チェックサムの計算に直接アルゴリズムが使用されます。
このパラメーターをクリアすると、CRC チェックサムの計算に非直接アルゴリズムが使用されます。
直接アルゴリズムと非直接アルゴリズムの詳細については、巡回冗長検査符号を参照してください。
Reflect input — 入力のバイト順
off
(既定値) | on
入力のバイト順を指定します。
シフト レジスタを入力する前に各入力バイトを反転させるには、ブロックのこのパラメーターを選択します。
メッセージ データをそのままシフト レジスタに渡すには、ブロックのこのパラメーターをクリアします。
入力データの幅は 8 の倍数でなければなりません。
Reflect CRC checksum — チェックサムのバイト順
off
(既定値) | on
チェックサムのバイト順を指定します。
ブロックのこのパラメーターを選択すると、最終の XOR 段階に渡す前にチェックサムの各バイトが反転します。
ブロックのこのパラメーターをクリアすると、チェックサムのバイトは変更されることなく最終の XOR 段階に渡されます。
入力データの幅は 8 の倍数でなければなりません。
Final XOR value — チェックサム
0
(既定値) | バイナリ スカラー | バイナリ ベクトル
チェックサムを、倍精度または単精度データ型のバイナリ スカラーまたはベクトルで指定します。ブロックは、入力データに付加する前に、この値を使用して XOR 演算を CRC チェックサムに対して実行します。
ベクトル入力を指定した場合、ベクトルの長さは生成多項式の次数と等しくなければなりません。
アルゴリズム
ベクトルまたは整数入力を使用する場合、ブロックは並列 CRC アルゴリズムを実装します [1]。
最新の通信システムに高いスループットを提供するため、ブロックは並列アーキテクチャを使用して CRC アルゴリズムを実装します。このアーキテクチャは、各 W 入力ビットに対して、CRC チェックサムの M ビットを再帰的に計算します。フレームの終わりに、メッセージに対して最終的なチェックサムの結果が付加されます。多項式の長さ M の場合、W ビットに対する並列での再帰的なチェックサムの計算は、次のようになります。
FW は、M 行 M 列の行列であり、新しい入力ビットを使用した多項式の計算に対して現在の状態の要素を選択します。D は、M 要素のベクトルであり、生成多項式に関連して順序付けられ、0 が付加された新しい入力ビットを提供します。ブロックは、論理 AND を使用して (×) を実装し、論理 XOR を使用して (+) を実装します。
タイミング ダイアグラム
この波形は、ストリーミング データと、付随する 8 ビット バイナリ ベクトル入力を使用した CRC16 の制御信号を示しています。入力フレームは連続的です。出力フレームでは検出器のブロックがチェックサム ワードを削除するため、フレーム間には空白が含まれます。
この波形図は連続入力データを示しています。非連続データもサポートされます。
初期遅延
General CRC Syndrome Detector HDL Optimized ブロックでは出力にレイテンシが発生します。入力データが連続すると仮定して、このレイテンシは次の式で計算できます。
initialdelay = 3 * (CRC length/input data width) + 2.
パフォーマンス
合成された HDL コードのパフォーマンスは、ターゲットと合成オプションによって異なります。生成される HDL コードのターゲットは、Xilinx® Zynq® 7000 SoC ZC706 評価キットになります。
次の表は、[多項式] パラメーターを [ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]
に設定し、[Direct method] パラメーターを有効にした場合の、16 行 1 列の Boolean
ベクトル入力に対するリソースとパフォーマンス データの合成結果を示しています。
スライス LUT | スライス レジスタ | ブロック RAM | クロック周波数 (MHz) |
---|---|---|---|
124 | 162 | 0 | 718.67 |
次の表は、[多項式] パラメーターを [ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]
に設定し、[Direct method] パラメーターを有効にした場合の、ufix1
スカラー入力に対するリソースとパフォーマンス データの合成結果を示しています。
スライス LUT | スライス レジスタ | ブロック RAM | クロック周波数 (MHz) |
---|---|---|---|
159 | 206 | 0 | 685.66 |
参照
[1] Campobello, G., G. Patane, and M. Russo. “Parallel Crc Realization.” IEEE Transactions on Computers 52, no. 10 (October 2003): 1312–19. https://doi.org/10.1109/TC.2003.1234528.
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
量産コードには推奨されません。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
HDL Coder™ は、HDL の実装および合成ロジックに影響を与える、追加の構成オプションを提供します。
このブロックは 1 つの既定の HDL アーキテクチャをもっています。
ConstrainedOutputPipeline | 設計内で既存の遅延を移動することによって出力に配置するレジスタの数。分散型パイプラインは、これらのレジスタを再分散しません。既定の設定は |
InputPipeline | 生成コードに挿入する入力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成コードに挿入する出力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
バージョン履歴
R2012b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)