HDL に最適化された CRC ライブラリ ブロックの使用
この例では、HDL に最適化された CRC 発生器および CRC 検出器のライブラリ ブロックを使用して、IEEE® 802.11 規格 [ 1 ] を満たすようにこれらのブロックを構成する方法を説明します。
はじめに
このモデルでは、HDL に最適化された CRC 発生器および CRC 検出器のライブラリ ブロックを、シミュレーションと HDL コード生成に使用する方法を示します。適用規格として 802.11 規格が使用されています。HDL 最適化 CRC ブロックの HDL サポートの詳細については、General CRC Generator HDL Optimizedブロックを参照してください。このブロックで使用されているアルゴリズムの詳細については、[ 2 ] の文献を参照してください。
この例のモデルを開くには、次のコマンドを実行します。
modelname = 'commcrchdl';
open_system(modelname);
このモデルでは、最上位サブシステム CRC Subsystem
に HDL 最適化 CRC 発生器および CRC 検出器のブロックが含まれています。また、このサブシステムには、生成された CRC チェックサムへのノイズの追加を選択できる AddNoise
サブシステムが含まれています。このサブシステムを開くには、次のコマンドを実行します。
systemname = [modelname '/CRC Subsystem'];
open_system(systemname);
パラメーター設定
Polynomial
CRC-CCITT は、SIGNAL、SERVICE および LENGTH フィールドを保護するために IEEE® 802.11 規格で使用されています。行ベクトル [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1] は次の多項式を表します。
Initial state
デモの HDL 最適化 CRC Generator ブロックでは直説法を使用しています。つまり、メッセージをチェックサム シフト レジスタの最上位ビット (MSB) に入れ、ゼロをパディングせずにそのメッセージを処理します。IEEE 802.11 CRC 実装のブロック線図は 802.11 規格の図 15-2 に示されています。"Initial state" は 1
として設定されます。
Final XOR value
"Final XOR value" は、CRC チェックサムの 1 の補数を実装するために 0xFFFF
として設定されます。
入力信号
このモデルのテスト ベクトルは、802.11 規格で指定されている DBPSK 信号の例を使用しています。crc_len
のゼロでパディングされたテスト データはストリーミング モードの 16 ビット/サンプルで処理されます。CRC 発生器の入力端子 dataIn の端子幅である変数 dataIn_width
はデータ処理速度を定義します。mlen
は制御信号 startIn、endIn、および validIn の周期を定義します。dlen
は validIn 信号のパルス幅を定義します。入力信号は [Model Properties] ダイアログ ボックスのコールバック関数 InitFcn で設定されます。
%DBPSK data data = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0]; crc_len = 16; % pad crc_len zero msg = [data zeros(1,crc_len)]; dataIn_width = 16; mlen = length(msg)/dataIn_width; dlen = length(data)/dataIn_width;
独自の設計要件を満たすために、この例の dataIn_width
を、8、4、2、または 1 ビットに変更できます。たとえば、56 ビットの長さのデータを処理している場合、8 ビットのゼロをパディングして dataIn_width
に 16 を使用する以外にも、dataIn_width
を 8 にして mlen
と dlen
が確実に整数になるように選択することもできます。
出力信号
次のコマンドを使用してモデルを実行します。
sim(modelname);
いくつかの主要な信号は、ワークスペースにログ記録されています。これらの信号は、ロジック アナライザー ウィンドウで確認できます。関数 commcrchdl_plot
はロジック アナライザーの表示の設定方法を示しています。ロジック アナライザーの System object™ についての詳細は、dsp.LogicAnalyzer
を参照してください。
h = commcrchdl_plot(dataIn,startIn,endIn,validIn,... dataOut_gen,startOut_gen,endOut_gen,validOut_gen,... dataIn_det,dataOut_det,startOut_det,endOut_det,validOut_det,err);
dataIn、startIn、endIn および validIn は入力データであり、HDL CRC 発生器への制御信号です。dataOut_gen (CRC 発生器の出力) は、サンプルにつき dataIn_width
ビットごとに追加されたチェックサムとともにメッセージを表示します。出力波形内で endOut_gen が高いときにチェックサムを読み取ることができます。値 0x5B57 は 802.11 規格の節 15.2.3.6 に指定されている CRC-16 FCS に一致します。dataIn_det は破損したチェックサムとともにメッセージを表示します。dataOut_det は CRC 検出器のメッセージ出力を表示します。誤りは err 信号が高のときに検出されます。err は endOut_det がアクティブな場合に有効です。
初期遅延は CRC 発生器および CRC 検出器の出力で発生します。次のコマンドを使用して初期遅延を計算できます。
initial_delay_gen = crc_len/dataIn_width + 2; initial_delay_det = 4*crc_len/dataIn_width + 4;
HDL コードのチェックと生成
この例の HDL コードをチェックして生成するには、HDL Coder™ ライセンスが必要です。
コマンド makehdl(subsystemname)
と makehdltb(subsystemname)
を使用して、サブシステムの HDL コードとテストベンチを生成できます。
サブシステム名を 'commcrchdl/CRC Subsystem/HDL CRC in Transmitter' または 'commcrchdl/CRC Subsystem/HDL CRC in Receiver' として指定します。
参考文献
IEEE 802.11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.(2007 revision).IEEE-SA.12 June 2007.
Giuseppe Campobello, Giuseppe Patane, Marco Russo."Parallel CRC Realization," IEEE Transactions on Computers, vol. 52, no. 10, pp. 1312-1319, October, 2003.