【簡単な組合せ回路】
簡単なとは、1行で記述できるという意味です。記述は同時処理代入文
と論理演算子で行います。
実際の記述例に従って説明します。
例 最も単純な記述
na <= not ( in1 and in2 );
《代入記号》
信号の代入には <= という記号を使う。 この記述で書かれている各行は
すべて同時に実行される。(同時処理代入文)
つまり回路と同じように接続されていて変化が即伝達されると考える。
《定数の記述方法》
数値の定数は一般的には2進数の文字列で記述します。10進数や16進数の
記述も出来ますが、制限が多いので普通は使いません。
特に多ビットの表現をするときには、桁数を合わせる注意が必要です。
例 数値の定数記述
'1' 1文字の時はシングルクォーテーションを使う
"11010" 2文字以上の時はダブルクォーテーションを使う
《演算子の種類》
notとかandというのは演算子と呼ばれ、VHDLで使用可能な演算子には
下表の種類があります。
記号 演算内容 記号 演算内容 = 等号 /= 不等号 < より小さい > より大きい <= より小さいか等しい >= より大きいか等しい + 加算 - 減算 & 連接(配列タイプで使う) * 乗算 / 除算 mod 剰余 and 論理積 or 論理和 nand 論理積の否定 xor 排他的論理和 nor 論理和の否定 ** べき乗 abs 絶対値 not 否定
《文字の大小》
VHDLは大文字、小文字の区別はありません。これは予約語も同じで
どちらでも正常に判定されます。
でもあとでわかりやすくするような記述方法が良いので、予約語とそれ以外
とは大文字、小文字で区別する方が良いでしょう。
わかりやすいのは、ライブラリ名などの固有名詞は大文字、それ以外は
小文字とする記述法です。
ここで例外があります。文字定数として ’ ’ や” ” で囲まれた文字は
大文字と小文字が区別されます。
《多ビットの宣言》
下図のような多ビット数の演算であっても、VHDLの記述は全く同じで、同時に
処理されます。この同時に処理されるビット数は各信号の宣言で決まります。
下図の場合であれば、例えば下記のように宣言されていることになります。
signal a: std_logic_vector (7 downto 0) ;
signal b: std_logic_vector (7 downto 0) ;
signal sum: std_logic_vector (7 downto 0) ;
例 多ビットの記述
sum <= a + b ;
《条件分岐》 when文
when 〜 else により2方向の分岐を記述することができます。これにより
式の実行を制御できますが、when 〜 else自身は式として定義された構文では
ないので、演算式を中に記述することは出来ません。
一般的には、直前に記述した式の実行条件を指定するのは使います。正確な書式
は下記となります。
信号 <= 値 [ when 条件 { 値 when 条件 } else 値];
このwhen文は同時処理文の中に記述できる条件という意味で、if文やcase文と
異なっています。さらに入れ子構造にも出来ないので、意図した通りのロジック回路
を生成させることが出来ます。
例 when文の使用例
4−1セレクタの記述例(部分)
Y <= INPUT(0) when SEL = 0 else
INPUT(1) when SEL = 1 else
INPUT(2) when SEL = 2 else
INPUT(3);