VHDLの記述ブロック
| ブロック | 説明 |
|---|
| ライブラリ(library) | ライブラリやパッケージの呼出し | | エンティティ(entity) | 回路名, パラメータ, ポートの定義 | | アーキテクチャ(architecture) | 回路動作の記述 |
- 記述例とブロックの対応です。

libraryブロック
| パッケージ名 | 内容 |
|---|
use ieee.math_real.all;
use ieee.math_complex.all; | 数学関数や複素数演算 シミュレーション用途 | use ieee.fixed_pkg.all;
use ieee.float_pkg.all; | 固定小数点演算 浮動小数点演算 | use ieee.std_logic_textio.all; | ファイルI/O |
entityブロック
generic(...);
port(...);
<direction> | 説明 | 記述例 |
|---|
| in | 入力ポート | a : in std_logic; | | out | 出力ポート | z : out std_logic; | | inout | 双方向ポート | sd : inout std_logic; |
- ポートの
<signal_type>(信号タイプ)は下記4種類ですが、unsigned/signedの使用についてはチームの記述ルールに従って下さい。
<signal_type> | 説明 | 記述例 |
|---|
std_logic | 1bitのポート | a : in std_logic; | std_logic_vector | 多bitのポート | z : out std_logic_vector(7 downto 0); | unsigned | 多bitのポート(符号無し) | q : unsigned std_logic_vector(7 downto 0); | signed | 多bitのポート(符号付き) | y : signed std_logic_vector(7 downto 0); |
VHDL-2008では、portの<signal_type>に、enum, record, arrayも使用することができます。下記はrecordの使用例です。Interfaceとして利用しています。
type axi_stream is record
tdata : std_logic_vector(31 downto 0);
tvalid : std_logic;
tready : std_logic;
end record;
entity axi_master is
port (
m : out axi_stream
);
end entity;
VHDL-2008では、portに初期値を設定することができます。ですが、この記述を合成対象のRTLで使用するのは避けて下さい。RTLとNetlistの間で検証結果に違いを生じさせることがあります。テストベンチ側だけに適用しましょう。
entity foo is
port (
enable : in std_logic := '1'
);
end entity;
architectureブロック
<architecture_name>(アーキテクチャ名)
<architecture_name>(アーキテクチャ名)は任意ですが、慣習的にルールが決まっています。下記のパターンが多いです。実務時はチームのルールに従って下さい。
<architecture_name> | 説明 |
|---|
| rtl | 論理合成可能な記述 | | gate | 論理合成後のゲートネットリスト記述 | | sim | テストベンチ等Simulation用記述(論理合成不可) |
<declarative_region>(宣言部)
- 回路が使用する信号等の内部リソースを宣言/定義します。VHDL-2008で使用できるものは下記です。ローカルpackageとして機能します。packageの説明ついては別途。
| 種別 | 説明 |
|---|
signal | 内部信号 | constant | 内部定数 | type/subtype | 型定義 | record/array | 構造化データ定義 | function/procedure | サブプログラム | alias | 別名 | attribute | 属性 | file | ファイル(テストベンチ用) |
- 記述例を列挙します。
-- signal(内部信号)
signal a_int : unsigned(7 downto 0);
-- constant(内部定数)
constant LATENCY : natural := 3;
-- type/subtype(型定義)
type state_t is (IDLE, RUN, DONE);
-- record/array(構造化データ定義)
type pixel is record
r, g, b : unsigned(7 downto 0);
end record;
-- function/procedure(サブプログラム)
-- 下記は宣言だが、実装も<declarative_region>で記述できる
function sat_add(a, b : signed) return signed;
-- alias(別名)
alias sum is a_int;
-- attribute(属性)
attribute keep : boolean;
attribute keep of a_int : signal is true;
-- file(ファイル)
file f : text;
<statement_region>(実装部)
- 実際の論理や信号接続を記述する領域です。詳細は論理記述に関する今後のレポートで説明します。
- 下記はconcurrent statements(並列/同時実行文)として扱われる記述/ブロックです
signal <= <logic_assignment>;
process ... begin 〜 end process;
foo: entity work.<entity> port map (...);
generate ... begin 〜 end generate;
label: bar ... begin 〜 end bar;
次回
- 次回より記述の詳細として、信号(
std_logic, std_logic_vector)から見ていきます。
|