VHDLのif文でelseが無い場合

出典: Wikimura

VHDLの本で「if文でelseが無いとラッチができて良くない」と書かれているらしい。

if( C = '1') then
    X <= A;
end if;

これは何を意味するかと言うと、トランスペアレントラッチ(レベルラッチ)になる。

      +---+
A >---|   |---> X
      +-+-+
        |
C-------+

条件Cがラッチ信号になっていて、Aがラッチの入力、Xが出力となっている。 条件が真の間は、XにAが透過する。(これがif文)

ただ、それ以外の場合について書かれていない。 条件が偽の場合何もしない...これが前の値の保持と解釈される(そうでないと、勝手に変えられたら困る)。 この動作はトランスペアレントラッチとして合成されることになる。

if( C = '1') then
    X <= A;
else
    X <= B;
end if;

elseを付けると、今度はセレクタになる。

      +---+
A >---|   |
      |   |----> X
B >---|   |
      +-+-+
        |
C >-----+