パリティービットチェック回路と論理シミュレーション

エレキ設計

この記事わかること

受信したパリティービットをチェックする回路の説明と
チェック回路の論理シミュレーションを説明します。

パリティービットチェック回路

値を比較する時は、排他的論理和:EXORセルを使用します。
(パリティービットチェックに限りません。)

下記に、EXORセルとEXOR真理値表を示します。

図-1:EXORセルとEXORセル真理値表

A=B:正常受信、Check=0
受信したパリティービット”A”と受信したデータから作成したパリティービット”B”の値が同じで有ることをを示します。

A≠B:異常受信、Check=1
受信したパリティービット”A”と受信したデータから作成したパリティービット”B”の値が違う事を示します。

これに、チェックタイミングを考慮した具体的な回路を下記に示します。

回路

シリアルパリティービット生成回路とパリティーのチェック回路(赤枠)を下記図に示します。
シリアルパリティービット生成回路の詳細はここを参照

図-2:パリティー生成とパリティーチェック回路

P_enable:Parity enable パリティービットの生成有効タイミング
Odd_p_mode:Odd Parity mode 奇数パリティーモード設定(”ロー”アクティブ)
Even_p_mode:Even Parity mode 偶数パリティーモード設定(”ロー”アクティブ)
SD:Sireal data シリアルデータ
P_clk:Parity clock パリティークロック
Gen_parity:Generate Parity パリティー生成ビット
Compare:Compare SDのパリティーと生成パリティー比較結果
Parity_check:Parity check パリティービットチェック結果

D-latch:エッジ型フリップ・フロップセル
EXOR:排他的論理和セル
AND:論理積セル

Check circuitブロック(赤い枠)
受信したシリアルデータSD(パリティービット)と受信データを元にパリティービット生成Gen_parityをEXORセルで比較します。P_enableは、パリティービットの比較タイミングを決めます。

Parity check 出力信号

0:パリティービット 正常受信
1:パリティービット 異常受信

論理シミュレーション

下記、図-3 論理シミュレーション用回路を示します。
偶数パリティービットの生成とチェック回路の論理シミュレーション回路図です。
受信データ(7ビット+偶数パリティービット:1ビット)と生成したパリティービットと比較します。

図-3:論理シミュレーション用回路

Check circuitブロック
受信したシリアルデータSD(パリティービット)と受信データを元にパリティービット生成Gen_parityをEXORセルで比較します。P_enableは、パリティービットの比較タイミングを決めています。

parity generation circuitブロック
SDからパリティービットを生成。
詳細説明は、ここを参照

Voltage generatorブロック
論理シミュレーション用入力電圧波形。
詳細は、ここを参照

Voltage meterブロック
電圧計

実行結果

下記に、論理シミュレーション結果波形を示します。

正常受信検証版:
注目設定
SD:受信データ+偶数パリティービット
Gen_parity:偶数パリティービットの生成
      (初期値:Even_p_mode=0→1、Odd_p_mode=1 固定)

SD(偶数パリティービット)= Gen_parity(偶数パリティービットの生成)→
正常受信、Parity_check=0

図-4:偶数パリティービットのチェック倫理シミュレーション

波形説明:

Gen_parity=1とSDで受信したparity bit=1を比較、同じ値で有ることが確認出来ます。
(丸緑、赤枠部)
上記の値が、同じ事から
parity_check=0となり正常データを受信となります。


異常受信版:
注目設定
SD:受信データ+偶数パリティービット
Gen_parity:奇数パリティービットの生成
      (初期値:Odd_p_mode=0→1、Even_p_mode=1 固定)

SDのパリティービットと生成パリティービットを意図的に違う値(異常受信)にして、パリティーエラーを発生させます。

SD(偶数パリティービット)Gen_parity(奇数パリティービットの生成)→
異常受信、Parity_check=1

図-5:奇数パリティービットのチェック論理シミュレーション

波形説明:

Gen_parity=0とSDで受信したparity bit=1を比較、違う値で有ることが確認出来ます。
(丸緑、赤枠部)
上記の値が、違う事から
parity_check=1となり異常データを受信となります。


コメント