pp.21-22
ということなので、意味のない単純な函数とプロシージャとを作って試してみる。ここではどちらもアーキテクチャに記述した。
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; num_out_plus_2: out natural range 0 to 9 ); end entity; architecture rtl of sute_vhdl is -- 函数を定義する。 function plus_1(num: natural) -- 引数の範囲は指定してもしなくてもよい。 return natural -- 返値の範囲は指定できない。 is begin return num + 1; end; -- プロシージャを定義する。 procedure plus_2( signal sig_in : in natural; variable out_val: out natural ) is begin out_val := sig_in + 2; end; begin num_in_thru <= num_in; -- 確認のため入力をそのまま出力する。 process(all) variable sute_var: natural; begin num_out_plus_1 <= plus_1(num_in); -- 函数をコールする。 plus_2(num_in, sute_var); -- プロシージャをコールする。 num_out_plus_2 <= sute_var; end process; end architecture;
左の4ビットが入力をそのまま出力したもの(7)。
その右隣の4ビットが、函数を使って入力に1足したもの(8)。
さらにその右隣の4ビットが、プロシージャを使って入力に2足したもの(9)。