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

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

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

設計のポイント

VHDL記述のポイント:signalとvariableの違いと使い分け

設計内容分類FPGA

実現したい仕様・課題

VHDLのプロセス内で値を保持・受け渡しする手段にはsignalとvariableがあり、代入のタイミングが根本的に異なります。この違いを理解せずに使うと、「代入したはずの値が次の行で反映されていない」「意図せず余分なレジスタが生成される」といった混乱や不具合につながります。両者の性質を正しく使い分けたいというのが課題です。

設計のポイント

signalへの代入(<=)はプロセスの実行が一巡した後(デルタサイクル後)に反映されるのに対し、variableへの代入(:=)はその行で即時に反映されます。クロック同期プロセス内のsignalはフリップフロップとして合成され、プロセス間の通信や回路の状態保持に用います。一方variableはプロセス内部でのみ有効なローカルな作業領域で、組み合わせ計算の中間値、ループ内での累積、コードを読みやすくするための一時変数として使います。同期プロセス内でvariableに「代入してから参照」すれば組み合わせロジックの中間ノードとなり、「参照してから代入」するとレジスタとして推論されるため、変数の使い方が合成結果に影響する点は理解しておく必要があります。基本方針としては、回路の実体(レジスタ・モジュール間の配線)はsignalで表現し、variableは計算の記述を簡潔にするための補助に限定すると、コードと回路の対応が明確になります。signalの即時反映を期待した記述(後述の「signal代入はプロセス終了時に反映」参照)は典型的な誤りなので注意します。

【コード例】
process(clk)
variable tmp : unsigned(8 downto 0);
begin
if rising_edge(clk) then
tmp := (‘0’ & a) + (‘0’ & b); — 即時反映(中間計算)
if tmp > 255 then
result <= (others => ‘1’); — signalは次デルタで反映
else
result <= tmp(7 downto 0);
end if;
end if;
end process;

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

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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