組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

VHDL記述のポイント:functionとprocedureの使い分け

設計内容分類FPGA
解決できる課題CPU負荷低減

実現したい仕様・課題

VHDLで処理を部品化する手段にはfunctionとprocedureがあり、性質の違いを知らずに使うと、複数の値を返したい場面でfunctionに無理をさせたり、単純な変換にprocedureを使って冗長になったりします。それぞれの適所を整理して、再利用しやすい記述にしたいというのが課題です。

設計のポイント

functionは「入力から1つの値を計算して返す」もので、式の中で呼び出せます。副作用を持たず、組み合わせロジックの変換・計算(コード変換、パリティ計算、幅変換など)の部品化に適しています。一方procedureは、in/out/inoutの引数を複数持て、値を返す代わりに引数経由で複数の結果を出力できます。また、内部にwait文などの時間制御を書けるため(合成対象外の文脈で)、テストベンチの操作手順の記述に適しています。使い分けの基準は、「1つの値の計算=function、複数出力や手順の実行=procedure」です。RTL(合成対象)では、functionを変換ロジックの共通化に積極的に使い、procedureは複数信号をまとめて更新する定型処理の整理に限定的に使う、という比重が実務的です。テストベンチでは逆にprocedureが主役となり、バスアクセス手順や検証パターンの投入をprocedure化することで、シナリオの可読性が大きく向上します。どちらもpackageに置けばプロジェクト全体で共有でき、モジュール内のみで使うものはarchitectureの宣言部に置きます。functionは戻り値の型が明確なため、型検査による安全性もそのまま享受できます。純粋な計算をfunctionへ切り出す習慣は、本体コードの見通しを良くし、単体での動作確認も容易にします。

【コード例】
— function:1つの値を返す(式の中で使える)
function parity(v : std_logic_vector) return std_logic is
variable p : std_logic := ‘0’;
begin
for i in v’range loop p := p xor v(i); end loop;
return p;
end function;

— procedure:複数の結果を引数で返す(テストベンチの手順にも)
procedure bus_write(signal addr : out std_logic_vector(7 downto 0);
signal we : out std_logic;
a : in std_logic_vector(7 downto 0)) is
begin
addr <= a; we <= ‘1’;
end procedure;

VHDL記述のポイント:functionとprocedureの使い分け | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ