ハードウエア記述言語AHDL (Altera Hardware Description Language) の概略を説明する。 ここでは、主なもののみを説明している。
AHDLの基本構造は下記のようになる。 最低限度必要なのは、 SUBDESIGNと BEGINからENDまで。
-- これはコメント
% これもコメント %
--
-- 「TITLE」は省略できる
TITLE "タイトル";
--
-- 定数を定義する。なくても良い。
-- 複数個定義する時は、CONSTANT行を複数個並べる。
CONSTANT 定数名 = 値;
--
-- 名称はファイル名と同じにする。
SUBDESIGN 名称
--
-- 入出力の記述
-- 方向は下記のいずれか。
-- INPUT (入力)
-- OUTPUT (出力)
-- BIDIR (双方向)
(
端子名1 : 方向;
端子名2 : 方向;
)
--
-- 変数を定義する。なくても良い。
VARIABLE
変数名1 : 型;
変数名2 : 型;
--
-- 回路本体の動作を記述する。
BEGIN
END;
| 種類 | 例 | 備考 |
|---|---|---|
| 10進数 | 123 | |
| 16進数 | H"abcd" | |
| 2進数 | B"0101" | |
| 定義済の定数 | VCC | 1 |
| 定義済の定数 | GND | 0 |
| 優先順位 | 演算子 | 意味 |
|---|---|---|
| 1 | - | 単項マイナス |
| ! | NOT | |
| 2 | + | 加算 |
| - | 減算 | |
| 3 | == | 等しい |
| != | 等しくない | |
| < | 小さい | |
| <= | 小さいか等しい | |
| > | 大きい | |
| >= | 大きいか等しい | |
| 4 | & | AND |
| !& | NAND | |
| 5 | $ | XOR (排他的論理和) |
| !$ | XNOR | |
| 6 | # | OR |
| !# | NOR |
変数や端子の値を代入しなかった場合に使用する デフォルト値を設定する。 BEGINとENDの間に書く。
BEGIN
DEFAULTS
変数 or 端子 = 式 or 値;
END DEFAULTS;
END;
IF 条件1 THEN
式など;
ELSIF 条件2 THEN
式など;
ELSE
式など;
END IF;
CASE 値 IS
WHEN 定数1 => 式など;
WHEN 定数2 => 式など;
END CASE;
TABLE
入力変数 => 出力変数;
入力定数1 => 出力定数1;
入力定数2 => 出力定数2;
END TABLE;
AHDLで変数のように代入したり参照したりして使用する。 ただし、実際の回路では、 電線、あるいは電線の分岐に対応する。
-- NODEを使ったサンプル
SUBDESIGN nodesample;
(
in1 : INPUT;
in2 : INPUT;
out : OUTPUT;
)
VARIABLE
a, b : NODE;
BEGIN
a = in1 & in2;
b = in1 # in2;
out = a $ b;
END;
| 入/出 | 端子名 | 内容 |
|---|---|---|
| 入力 | d | データ |
| clk | クロック。立ち上がりでデータを格納。 | |
| prn | プリセット。低レベルで1を格納。 | |
| clrn | クリア。低レベルで0を格納。 | |
| 出力 | q | データ |
-- DFFを使ったサンプル
SUBDESIGN flipflop;
(
in : INPUT;
ck : INPUT;
out : OUTPUT;
)
VARIABLE
f : DFF;
BEGIN
f.prn = VCC;
f.clrn = VCC;
f.d = in;
f.clk = ck;
out = f.q;
END;
| 入/出 | 端子名 | 内容 |
|---|---|---|
| 入力 | d | データ |
| clk | クロック。 | |
| ena | enable。enaが高レベルの時クロックの立ち上がりでデータを格納。 | |
| prn | プリセット。低レベルで1を格納。 | |
| clrn | クリア。低レベルで0を格納。 | |
| 出力 | q | データ |
| 入/出 | 端子名 | 内容 | [1]との対応 |
|---|---|---|---|
| 入力 | T | Tが高レベルの時、clkの立ち上がりでデータを格納。 | なし。T=高レベルになる。 |
| clk | T | ||
| prn | プリセット。低レベルで1を格納。 | なし。prn=高レベルになる。 | |
| clrn | クリア。低レベルで0を格納。 | なし。clrn=高レベルになる。 | |
| 出力 | q | データ | q |
[1] 宮田武雄 "速解 論理回路" コロナ社
複数の端子、変数などをグループ化して使うことができる。 バスや複数ビットのレジスタなどで便利である。 グループは、
名前[範囲] (式1, 式2, ..., )のように書く。 「a[3..0]」と「(a3, a2, a1, a0)」は同じ意味である。 また、「a[]」はグループ「a」の要素全てを示す。 「a[2]」はグループではなくグループの一要素となり、 これは「a2」と同じになるので要注意。
(作成: 2003年10月8日, 最終更新: 2003年10月16日)