if や case を使って順次処理を行うとき process 文を用います。
loop も process 文の1つですが、今まで必要性を感じたことが無く、使ったことも無いのでここでは書きません。
データセレクタやデコーダのように、同じレベルの信号の切替に適しています。
例として、データセレクタの式を次に示します。
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;
データに優先順位がある場合に適しています。
例として正論理入出力エンコーダの式を示します。
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"が出力されることを示しています。