プロセスステートメント、センシティビティリスト

pp.12-14

何らかの条件に合致したときに実行するシーケンシャル領域はプロセスステートメントで定義する。プロセスの内部にはシーケンシャルステートメントしか使えない。ただしプロセス自体はコンカレントステートメントであるため、すべてのプロセスは並列実行される。

どのプロセスも、一時停止状態か実行中かいずれかの状態をとる。プロセスの実行再開のきっかけとなる条件は、センシティビティリスト、waitステートメントのどちらでプロセスを記述するのかによって違ってくる。センシティビティリストを持つプロセスは、そのリストに列挙されたシグナルのいずれかが変化したときに実行される。waitステートメントを使用するプロセスは~

プロセスは繰り返し実行される。つまり最後のステートメントに達するとまた最初から実行される。センシティビティリストを使って記述したプロセスは、そのプロセスの末尾のステートメントとしてwaitステートメントが暗黙的に挿入されるので、センシティビティリストに列挙したシグナルのいずれかが変化するまで一時的停止状態に置かれる。

プロセスは組み合わせ論理回路、順序論理回路のどちらもモデル化できる。組み合わせ論理回路をモデル化する場合は、そのプロセスの内部で読み取られるすべてのシグナルをセンシティビティリストに列挙しなければならない。順序論理回路をモデル化する場合は、クロックシグナルと非同期制御シグナル(リセットなど)とをセンシティビティリストに列挙すればよい。

これが順序論理回路をモデル化したもの:

process (clock) begin
    if rising_edge(clock) then
        q <= not q;
    end if;
end process;

これが組み合わせ論理回路をモデル化したもの:

process (all)
begin
    if d3 then
        q <= "11";
    elsif d2 then
        q <= "10";
    elsif d1 then
        q <= "01";
    else
        q <= "00";
    end if;
end process;