2011-11-19 21 views
1

私はVHDLを学びたいと思っています。私は4ビットパリティチェッカーを作ろうとしています。考えられるのは、ビットが1つの入力ライン(1クロック・パルスあたり1ビット)から来て、チェッカーは4ビット・シーケンス(すなわち1011、0100など)に1の奇数があるかどうかを調べ、エラーを送信します出力(エラーフラグ:エラー< = '1')。VHDLで単純な4ビットパリティチェッカーを作る方法は?

私はそれを勉強できるように誰かが私にそれがどのように行われたかの例を教えてくれますか?

私はウェブを検索しようとしましたが、私が見つけたすべてのディスカッションは、もっと複雑な方法に関連していて、私は理解できませんでした。

+0

PS。私はXC3S200デバイスを使用してザイリンクスISE環境でシミュレーションしています – user1054844

+0

アキュムレータにビットを追加するとどうなりますか? –

+0

これはちょうど「簡単な」エクササイズなので、エラーがなければ入力ビットは本当に重要ではありません。私は2つの状態(奇数、偶数)でwhileループを作成しようとしましたが、奇妙な状態の出力エラー<= '1 'に終わった場合、私はそれを動作させることができませんでした... – user1054844

答えて

3

VHDL 2008規格では、この操作を実行するための新しいXOR演算子を提供しています。 Aaronが提供する従来のソリューションよりもはるかに簡単です。

signal Data : std_logic_vector(3 downto 0) ; 
signal Parity : std_logic ; 
. . . 
Parity <= xor Data ; 
2

これは、あなたの入力STD_LOGIC_VECTORある「invec」を前提としています

parity <= invec(3) xor invec(2) xor invec(1) xor invec(0); 

それはどんなより大きく4つの入力を得た場合、ループはおそらく最高のようになります。

variable parity_v : std_logic := '0'; 
for i in invec'range loop: 
    parity_v := parity_v xor invec(i); 
end loop; 
parity <= parity_v; 

ループが変換されること合成時の適切なLUT値。

(私はメモリからこれをしなかったが、わずかな構文の問題かもしれません。)

+0

実際には、代わりに 'parity_v'変数を宣言しています。 – machin

関連する問題