ハードウェアの構造の基本はコンポーネントとポート,そして信号です.コン ポーネントはハードウェア記述のブロックです.実際には様々な大きさを持つ ブロック(ゲート,チップ,ボード)をコンポーネントと考えることができ,そ れはハードウェアを記述するレベルに依存することになります.VHDLでは,コ ンポーネントはエンティティ 宣言とアーキテク チャ本体から構成されます.エンティティ宣言はコンポーネントの外観を 与えることになります.すなわち,これはコンポーネントのポートも含めて外 からどのように見えるかを記述するためのものということができます.
半加算器を例として用います.以下に示すエンティティ宣言では,2つの入力 ポートと2つの出力ポートが宣言されていますが,これは<図:半加算器の外観> に示す半加算器と同等の外観をVHDLで表したものです.
``--''はVHDLにおけるコメントを
示し,``--''から行末まではコメントとして解釈されます.またVHDLでは,''
や""の引用符で囲まれた部分以外は大文字と小文字の区別はありません.
図:半加算器の外観
-- ライブラリ宣言 library IEEE; use IEEE.std_logic_1164.all; -- エンティティ宣言 entity HalfAdder is port ( A: in std_logic; B: in std_logic; S: out std_logic; C: out std_logic ); end HalfAdder;
エンティティ宣言においては,エンティティ自身とその各ポートは識別子により名前を与えら れています.VHDLで識別子とは以下の規則に従う文字の並び(空白は含みませ ん)です.
begin, end, entityなどのようないくつかの識別子はVHDLの予約語ですので,エンティ ティや信号,コンポーネントなどの名前としては使えません.
アーキテクチャ本体は内部の様子を与えます.つまり,コンポーネントの動作 や構造を記述するものです.以下に示すVHDLは半加算器の動作を記述したもの です
-- アーキテクチャ本体 architecture HalfAdder_Body of HalfAdder is begin S <= A xor B; C <= A and B; end HalfAdder_Body;
このアーキテクチャ本体は2つの信号代入文をもっています.はじめの信号代 入文は,Aという名のポートに結びつけられた信号の値と,Bというポートに結 びつけられた信号の値の排他的論理和(xor)がSと名付けられたポートに代入さ れることを示しています.2番目の信号代入文も同様にして論理和をとってい ます.
このように,一つの半加算器(機能モデル)はエンティティ宣言とアーキテク チャ本体によって記述されました.以下に,この半加算器の完全な記述を示し ます.
-- -- 半加算器 ( 入力 : A,B 出力 : S,C ) -- -- ライブラリ宣言 library IEEE; use IEEE.std_logic_1164.all; -- エンティティ宣言 entity HalfAdder is port ( A: in std_logic; B: in std_logic; S: out std_logic; C: out std_logic ); end HalfAdder; -- アーキテクチャ本体 architecture HalfAdder_Body of HalfAdder is begin S <= A xor B; C <= A and B; end HalfAdder_Body;