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

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

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

設計のポイント

VHDL記述のポイント:booleanとstd_logicの使い分け

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

実現したい仕様・課題

VHDLでは比較演算の結果はboolean型であり、std_logicの’1’/’0’とは別の型です。この区別を曖昧にしたまま書くと、if (flag) のようなつもりの記述が型エラーになったり、booleanとstd_logicの変換を冗長なif-elseで書いてしまったりします。条件と信号の型の関係を整理して簡潔に書きたいというのが課題です。

設計のポイント

VHDLの条件式(if・whenの条件)はboolean型を要求し、比較演算子(=、/=、<など)の結果はbooleanです。したがって、std_logicの信号を条件に使うときは if flag = ‘1’ then のように比較を書いて明示的にbooleanへ落とすのが基本形です(VHDL-2008では条件式でのstd_logicの直接使用が認められる環境もありますが、明示比較に統一しておくと版・ツールに依存しません)。逆に、boolean値をstd_logic信号として出力したい場合、if-elseで’1’/’0’を代入する記述は冗長であり、条件付き信号代入 y <= ‘1’ when (a = b) else ‘0’; と1行で書けます。VHDL-2008対応環境ではboolean→std_logic変換に相当する記述がさらに簡潔になりますが、when-else形式はすべての環境で通用する定石です。内部の制御フラグをどちらの型で持つかは、「回路の信号(ポートに出る・レジスタに載る)はstd_logic、記述上の一時的な判定はbooleanまたはその場の比較式」と整理すると迷いません。booleanをそのままポートに出すことは避け、モジュール境界は慣例どおりstd_logic系で統一します。また、and・or・notはbooleanにもstd_logicにも定義されていますが、両者を混ぜた式(boolean and std_logic)は書けないため、式の中で型を揃えることを意識すると、型エラーの解読に時間を取られなくなります。

【コード例】
— std_logicを条件に使う:比較でbooleanへ
if enable = ‘1’ and mode = “01” then

end if;

— booleanの結果をstd_logicで出力:when-elseで1行
match <= ‘1’ when (rx_data = expected) else ‘0’;

— カウンタ終端の判定もそのまま条件式に
tick <= ‘1’ when (cnt = MAX_CNT) else ‘0’;

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

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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