process文

if や case を使って順次処理を行うとき process 文を用います。
loop も process 文の1つですが、今まで必要性を感じたことが無く、使ったことも無いのでここでは書きません。


case

データセレクタやデコーダのように、同じレベルの信号の切替に適しています。
例として、データセレクタの式を次に示します。

process (dtSel, dt0, dt1, dt2, dt3) begin    --()内には全入力信号を記入
 case dtSel is
  when "00"  => outDt  <= dt0;
  when "01"  => outDt  <= dt1;
  when "10"  => outDt  <= dt2;
  when "11"  => outDt  <= dt3;
  when others => outDt  <= (others => 'X'); --この項目は必ず追加すべき
 end case;
end process;


if

データに優先順位がある場合に適しています。
例として正論理入出力エンコーダの式を示します。

process (encdIn) begin
 if (encdIn (7) = '1') then
  encdOut <= "111";
 elsif (encdIn (6) = '1') then
  encdOut <= "110";
 elsif (encdIn (5) = '1') then
  encdOut <= "101";
 elsif (encdIn (4) = '1') then
  encdOut <= "100";
 elsif (encdIn (3) = '1') then
  encdOut <= "011";
 elsif (encdIn (2) = '1') then
  encdOut <= "010";
 elsif (encdIn (1) = '1') then
  encdOut <= "001";
 else
  encdOut <= "000";
 end if;
end process;

if 命令は最初から順番にチェックしていくため、この式は、最初にbit7が'1'であれば、他のビットの値に影響されず "111"が出力されることを示しています。


VHDL目次          MAIL  HOME