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

X.25のフレームチェックシーケンスで使用されるCRC-16-X25(CRC-16-CCITT)を、パラレルデータ
から生成・チェックするサンプルコードです。

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

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


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

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