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

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

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

設計のポイント

VHDL記述のポイント:signal代入はプロセス終了時に反映される

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

実現したい仕様・課題

プロセス内でsignalに値を代入した直後、同じプロセス内でその信号を参照すると、代入前の古い値が読めてしまいます。ソフトウェアの変数のつもりでsignalを扱うと、「更新したのに反映されない」というシミュレーション結果に混乱し、意図しない1クロック遅れや誤った条件判定を作り込んでしまいます。signalのスケジューリングを正しく理解して記述したいというのが課題です。

設計のポイント

VHDLのsignal代入(<=)は「予約」であり、実際に値が更新されるのはプロセスがサスペンドした後(デルタサイクルの区切り)です。したがって、同一プロセス内で s <= a; の直後に s を参照しても、読めるのは代入前の値です。この性質はハードウェアの動作(クロックエッジで一斉にレジスタが更新される)を正しくモデル化したものであり、クロック同期プロセスでは「プロセス内で読むsignalの値はすべて前クロックの値」と理解すると、記述と回路が素直に対応します。1つのプロセス内で同じsignalに複数回代入した場合は、最後の代入だけが有効になる(上書きされる)という規則も重要で、これを利用して「先頭でデフォルト値を代入し、条件成立時のみ上書きする」記述パターンが成立します。このパターンは条件分岐の抜けをなくし、組み合わせプロセスでのラッチ防止にも有効です。計算の途中結果を同一プロセス内で即時に使い回したい場合は、signalではなくvariableを使うのが正しい選択です。

【コード例】
process(clk)
begin
if rising_edge(clk) then
s <= a;
y <= s; — ここで読めるsは前クロックの値(1段遅れ)
end if;
end process;

— デフォルト代入+条件上書き(最後の代入が有効)
process(clk)
begin
if rising_edge(clk) then
ack <= ‘0’; — デフォルト
if req = ‘1’ then ack <= ‘1’; end if; — 条件時のみ上書き
end if;
end process;

VHDL記述のポイント:signal代入はプロセス終了時に反映される | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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