パッケージ

pp.23-24

パッケージは2つの部分から成る。

  • パッケージ宣言: プロトタイプ宣言のようなものか? 型、定数、サブプログラム宣言、コンポーネント宣言を記述する。
  • パッケージボディ: ここに実装する。

ということなので、意味のない単純なパッケージを作って試してみる。ここではパッケージのなかに函数を1つだけ記述した。

これがパッケージ:

-- これがパッケージ宣言。
-- プロトタイプ宣言のようなものか?
package sute_pkg is
    function plus_1(num: natural) return natural;
end;

-- これがパッケージの実装
package body sute_pkg is
    function plus_1(num: natural) return natural is
    begin
        return num + 1;
    end;
end;

これが本体:

-- use clauseでパッケージをインクルード(?)する。
-- workはワーキングディレクトリのことか?
use work.sute_pkg.all;

entity sute_vhdl is
    port(
        num_in: in natural range 0 to 7;
        
        num_in_thru   : out natural range 0 to 7;
        num_out_plus_1: out natural range 0 to 8
    );
end entity;

architecture rtl of sute_vhdl is
begin
    num_in_thru <= num_in; -- 確認のため入力をそのまま出力する。

    process(all)
    begin
        num_out_plus_1 <= plus_1(num_in); -- 函数をコールする。
    end process;

end architecture;

今6を入力して、函数で1を足して、7を出力している。
f:id:ti-nspire:20210708120426j:plain:w600