アダルト・ヴァイオリン May the force be with you..

2006年4月26日

VHDL:真理値から論理値への変換関数

Filed under: 組込みシステム — @ 7:59 AM

VHDLで当たり前のように欠けていた(200Xではextraパッケージに入ったので過去形だがFPGAベンダーツールでは未サポート)ものに、真理値から論理値への変換関数がある。

論理設計者は真理値と論理値を自由に交換して、当たり前のように使うのだが、VHDLでは厳密に型が一致しないと利用できないので、真理値と定義されたものを自由に論理の中で信号としては使えない。

実は、簡単な関数で変換できるのであるが、こんな当たり前のものが何でIEEEの標準ライブラリに最初からないのか、とっても不思議なものだ。

function to_std_logic(b: boolean) return std_logic is
begin
if b then return ‘1’; else return ‘0’; end if;
end to_std_logic;

上の関数は真理値を論理値に変換する。
パッケージとして自分のプロジェクトに追加するか、architecture定義の中に書くことで利用できる。extraパッケージがベンダーツールで利用可能になる将来を考えればパッケージ化しておいたほうが役に立つ。

to_std_logicという関数名は他の論理値への変換関数と同一の名前である。VHDLでは引数の型が違えば同一関数名を利用しても問題にならない。多様体を許しているからである。

この関数はFPGAベンダーツールで普通にコンパイルできるので、少し仕事が楽になった。std_logicとstd_logic_vectorの違いも標準関数を呼び出し、何とかできるので、どんどん記述が長くなり人の読むものではなくなるが、一応、VHDLでもVerilogHDL並みの記述は作成できる(読みたくもないものを書くなんてとんでもなく、私にとって、あくまでもVHDLはアセンブラもしくは中間言語以上のものではないが)ことになったので、VHDLターゲットの仕事もこれで請けられそうだ。

Powered by WordPress