Effective Coding with VHDL: Principles and Best Practice (The MIT Press), p.319, 第3段落目から
(非公式訳)
複数ビットの信号、および複数ビットのポートを実装するときにstd_logic_vector
とstd_ulogic_vector
のどちらを選んだらよいのか、少し混乱があります。VHDL-1993とVHDL-2008との間に推奨事項に変化があったためです。VHDL-1993のときは、ベクタ信号およびベクタポートにはstd_logic_vector
を使うべしとなっていました。VHDL-2008では、単一ソースによってドライブされる(これが普通)ベクタ信号およびベクタポートにはstd_ulogic_vector
を使うべしとなっていて、複数ソースによってドライブされるベクタ信号およびベクタポート(例: ハイインピーダンスバスを実装するときなど)にのみstd_logic_vector
を使うべしとなっています。表13.2に(略)
実際問題として、VHDL-2008にまだフル対応していない開発ツールで両方のベクタ型(std_ulogic_vector
、std_logic_vector
)を使うと、型変換が多く発生しかねません。VHDL-2008よりも前のバージョンでは互いに直接割り当てることができなかったためです。この場合、お使いの開発ツールで両方の型が本来の意図どおりに使えるようになるまでは、std_logic
とstd_logic_vector
とを使い続けたほうがよいでしょう。この方針には、依然として多くの設計者が従っています。
よくある混乱の原因としてもう一つ、ポートはすべてスタンダードロジック型にする必要があるのか、そうしたほうがよいのかというものがあります。いえ、そんなことはありません。std_logic_1164
の主眼は、さまざまなVHDLモデルどうしの相互運用性と相互接続性とにあります。複数のエンティティから成る回路を設計し、その一部のポートを内部でしか使用しないのであれば、そのポートをスタンダードロジック型にする必要はありません。範囲制限をした整数型、排列型、レコード型など、最も理にかなった型を使えばよいのです。
――――――――――――――――――――――――
訳註:
要するにstd_ulogic
よりもstd_logic
、std_ulogic_vector
よりもstd_logic_vector
のほうが安全であるということ、ポート(信号)は好きな型にすればよいということ。