TEL:086-227-0113
info@gopher-tec.jp
TOP page 製品情報 FPGAソース CRC-16-CCITT-False Generator & Checker
CRC-16-CCITT-False Generator & Checker

CRC-16-X25(CRC-16-CCITT)の亜種であるCRC-16-CCITT-Falseを、パラレルデータから生成・チェック
するサンプルコードです。

このCRCに関する生成多項式等の情報は次の通りで、本来であれば、これに従ってシリアルビット列から
LFSRを作ればほぼ完成ですが、本サンプルではシリアルデータからではなく、8ビットパラレルデータ毎に
LFSRとCRCを更新する構成としています。
CRC-16-CCITT-False
Parameter  Description 
生成多項式 G(X)=X16+X12+X5+1
LFSR初期値 0xFFFF
入出力順序 入力はMSBファーストで、D[7:0]のD[7]から入力
(つまり出力もLFSRをビットリバースしない)
LFSRインバート インバートしない。
CRC正常時のLFSR値 0x0000

簡単に使い方の分かるSIMトップファイルをオマケとして付けていますので、合わせて参照して下さい。


CRC16_CCITT_False_Gen モジュール:
Port I/O  Description 
CLK in クロック入力です。本モジュールはこの信号の立ち上がりエッジで動作します。
本サンプルコードにおけるCRCの生成とチェックは、パラレルデータに対して行うため、
本クロックは必ずしもビットクロックと共通である必要はありません。
RST in 非同期リセット入力です。パワーオン時、またはシステムリセット時にアサートして
下さい。
INIT_LFSR in LFSRを初期値に戻すためのコントロール信号です。
フレーム開始の都度、1クロックだけアサートし、LFSRを初期化して下さい。
CALC_CRC in CRCを計算するためのコントロール信号です。
PDIN[7:0]にCRC計算対象が揃った時点で、1バイトにつき1クロックだけアサート
して下さい。データが複数バイトから成る場合は、データが揃う都度、繰り返しアサート
して下さい。その次のクロックでLFSRとCRCが更新されます。
PDIN[7:0] in CRCの計算対象となるパラレルデータです。
CRC[15:0] out CRC出力です。シリアライズする際、CRC[15]から送出して下さい。
CRC16_CCITT_False_Chk モジュール:
Port I/O  Description 
CLK in CRC16_CCITT_False_Genモジュールと同様です。
RST in CRC16_CCITT_False_Genモジュールと同様です。
INIT_LFSR in CRC16_CCITT_False_Genモジュールと同様です。
CALC_CRC in LFSR(CRC)を再計算するためのコントロール信号です。
PDIN[7:0]にCRC計算対象が揃った時点で、1バイトにつき1クロックだけアサート
して下さい。データが複数バイトから成る場合は、データが揃う都度、繰り返しアサート
して下さい。その次のクロックでLFSRが確定します。
PDIN[7:0] in LFSR(CRC)の再計算対象となるパラレルデータです。
受信される順、すなわちデータNバイトに続いてCRC[15:8]、CRC[7:0]の順に
PDIN[7:0]に入力して下さい。
CRC_CHK_TIM in 現在のLFSR値でCRCの正誤判定をするためのストローブ信号です。
最終バイトに対するCALC_CRCのアサート以後、INIT_LFSRまたはCALC_CRC
をアサートするまでの任意のタイミングでアサート可能です。
CRCが正しければ、その次のクロックでCRC_OKがアサートされます。
CRC_OK out CRC_CHK_TIMをアサートした次のクロックで、本信号がアサートされればCRC正常、
ネゲートされればCRC異常と分かります。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog版のみとなっております。
詳細は下記の資料ダウンロードをクリックください。
ソースコード自体は当社WEBストアにて販売しております。

CRC-16-CCITT-False Gen & Chk
資料ダウンロード