[PR]
2025年04月26日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
subprogram宣言を使ってみた
2008年11月30日
同じ文を何度も書くと、関数にしたくなります。
そこでsubprogram宣言に挑戦してみました。これを使うと、
-----------------------------------------------------
ARCHITECTURE behavior OF hoge IS
function func_hoge(以下略...)
end func_hoge;
signal A,B,x,y : std_logic;
begin
A := func_hoge(x);
B:= func_hoge(y);
end hoge;
-------------------------------------------------------
みたいな感じで書けます。
コンポーネントとどこが違うんだ?と思いますよね。
ファンクション文は出力が一個だけで、それこそC言語の関数みたいですが、
プローシージャ文は入出力を任意に設定でき、それこそコンポーネントと大差無い様に見えます。
サブプログラムとコンポーネントの違いは、コンポーネントが下位層にある全く別の回路(別ファイル)を繋げて階層化するのに対して、サブプログラムの場合、機能自体を信号やコンポーネントのI/Oを定義するアーキテクチャ宣言部に書いてしまうので、一つ回路内で完結しているということです。
よって、C言語と違って関数を別ファイルにすることが出来ません。
従って、一つのソース内で何度も使用するが階層化するほどでもない、
小さい処理を関数にしたいときにサブプログラムを使うと良さそうです。
--追記、サブプログラム宣言の入出力は、信号か変数しかとらないそうです。
fprintfみたいな関数を作ろうとしていたが残念。
ファイル入出力用の便利なパッケージを作りたいです。
てかサブプログラムに出力がある必然性を感じられない。void型みたいなのがあればいいのに、
ファイル入出力ぐらいしか需要がなさそうだが。
----まとめ----
ファンクション 戻り値一個の組み合わせ回路
プロシージャー 戻り値複数の組み合わせ回路
コンポーネント 順序回路
綺麗にまとまった!
そこでsubprogram宣言に挑戦してみました。これを使うと、
-----------------------------------------------------
ARCHITECTURE behavior OF hoge IS
function func_hoge(以下略...)
end func_hoge;
signal A,B,x,y : std_logic;
begin
A := func_hoge(x);
B:= func_hoge(y);
end hoge;
-------------------------------------------------------
みたいな感じで書けます。
コンポーネントとどこが違うんだ?と思いますよね。
ファンクション文は出力が一個だけで、それこそC言語の関数みたいですが、
プローシージャ文は入出力を任意に設定でき、それこそコンポーネントと大差無い様に見えます。
サブプログラムとコンポーネントの違いは、コンポーネントが下位層にある全く別の回路(別ファイル)を繋げて階層化するのに対して、サブプログラムの場合、機能自体を信号やコンポーネントのI/Oを定義するアーキテクチャ宣言部に書いてしまうので、一つ回路内で完結しているということです。
よって、C言語と違って関数を別ファイルにすることが出来ません。
従って、一つのソース内で何度も使用するが階層化するほどでもない、
小さい処理を関数にしたいときにサブプログラムを使うと良さそうです。
--追記、サブプログラム宣言の入出力は、信号か変数しかとらないそうです。
fprintfみたいな関数を作ろうとしていたが残念。
ファイル入出力用の便利なパッケージを作りたいです。
てかサブプログラムに出力がある必然性を感じられない。void型みたいなのがあればいいのに、
ファイル入出力ぐらいしか需要がなさそうだが。
----まとめ----
ファンクション 戻り値一個の組み合わせ回路
プロシージャー 戻り値複数の組み合わせ回路
コンポーネント 順序回路
綺麗にまとまった!
PR
Comment