std_ulogicとstd_logicと

Effective Coding with VHDL: Principles and Best Practice (The MIT Press), p.319, 第3段落目から

(非公式訳)
複数ビットの信号、および複数ビットのポートを実装するときにstd_logic_vectorstd_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_vectorstd_logic_vector)を使うと、型変換が多く発生しかねません。VHDL-2008よりも前のバージョンでは互いに直接割り当てることができなかったためです。この場合、お使いの開発ツールで両方の型が本来の意図どおりに使えるようになるまでは、std_logicstd_logic_vectorとを使い続けたほうがよいでしょう。この方針には、依然として多くの設計者が従っています。

よくある混乱の原因としてもう一つ、ポートはすべてスタンダードロジック型にする必要があるのか、そうしたほうがよいのかというものがあります。いえ、そんなことはありません。std_logic_1164の主眼は、さまざまなVHDLモデルどうしの相互運用性と相互接続性とにあります。複数のエンティティから成る回路を設計し、その一部のポートを内部でしか使用しないのであれば、そのポートをスタンダードロジック型にする必要はありません。範囲制限をした整数型、排列型、レコード型など、最も理にかなった型を使えばよいのです。

――――――――――――――――――――――――
訳註:
要するにstd_ulogicよりもstd_logicstd_ulogic_vectorよりもstd_logic_vectorのほうが安全であるということ、ポート(信号)は好きな型にすればよいということ。