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

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

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

設計のポイント

VHDL記述のポイント:std_ulogicでマルチドライバを検出する

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

実現したい仕様・課題

std_logicは複数ドライバの競合を解決関数で吸収してしまうため、誤って1つの信号を複数のプロセスや代入文から駆動しても、コンパイルは通り、シミュレーションで’X’が現れて初めて気付くことになります。設計ミスである多重駆動を、もっと早い段階で機械的に検出したいというのが課題です。

設計のポイント

多重駆動をコンパイル時に検出したい信号には、std_logicの非解決版であるstd_ulogic(u=unresolved)を使用する方法があります。std_logicは解決型であり、複数のドライバが存在しても解決関数が合成値を計算するため、言語としてはエラーになりません。これは双方向バスなど本当に複数ドライバが必要な場面のための仕組みですが、FPGA内部ロジックの通常の信号では、複数箇所からの駆動はほぼ確実に設計ミス(同じ信号への代入を複数プロセスに書いてしまった等)です。std_ulogicは解決関数を持たないため、2つ以上のドライバが存在するとコンパイル(エラボレーション)の時点でエラーとなり、ミスの発見がシミュレーション実行前に前倒しされます。値の集合や演算はstd_logicと同一で、両者は互いに代入互換のサブタイプ関係にあるため、混在しても変換の手間はほとんどありません。VHDL-2008対応環境ではstd_logic_vectorとstd_ulogic_vectorも相互に扱いやすくなっています。運用としては、「内部の単一ドライバであるべき信号はstd_ulogic系、トライステートを扱うトップレベルの双方向ピンのみstd_logic」という方針が理想形ですが、既存資産やIPとの接続性を考慮し、まずは新規モジュールの内部信号から適用する、といった段階的な導入も現実的です。多重駆動をツール警告任せにせず言語仕様で防ぐ、という発想は、レビューでは見つけにくいこの種のミスに対する確実な防御になります。

【コード例】
signal a, b : std_ulogic; — 非解決型
signal y : std_ulogic;

y <= a and b; — ドライバ1つ:OK
— y <= a or b; — 2つ目のドライバ:コンパイル時にエラーで検出

— 双方向が必要なトップレベルのピンのみstd_logic(解決型)を使用

VHDL記述のポイント:std_ulogicでマルチドライバを検出する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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