ハードウエア記述言語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日)