이전 튜토리얼에서는 VHDL에서 신호와 변수의 차이점을 탐구했으며, 신호는 변수보다 넓은 범위를 가지며 변수는 단일 프로세스에 국한됨을 강조했습니다. 다음 논리적 질문은 신호를 사용하여 여러 프로세스를 조정하는 방법입니다.
친숙한 wait;(무한 대기)와 wait for(시간 기반 대기) 외에도, VHDL은 이벤트 기반 동기화를 위한 두 가지 강력한 문을 제공합니다: Wait On과 Wait Until. 이들은 wait for와 결합하여 정교한 제어 흐름을 만들 수도 있습니다.
Wait On
wait on 문은 나열된 신호 중 어느 것이든 값이 변경될 때까지 프로세스를 일시 중단합니다.
wait on <신호명1>, <신호명2>, ...;
Wait Until
wait until 문은 지정된 부울 조건이 참이 될 때까지 실행을 일시 중지합니다.
wait until <조건>;
Wait 문 결합
세 가지 구조를 모두 함께 사용하여 미묘한 타이밍 동작을 생성할 수 있습니다:
wait on <신호명1> until <조건> for <시간값>;
예를 들어, 다음 줄은 10ns 동안 대기하거나 signal1이 변경되고 signal2가 signal3과 같아질 때까지 대기합니다:
wait on signal1 until signal2 = signal3 for 10 ns;
실제 예제
아래는 wait on과 wait until을 프로세스 간 통신에 사용하는 방법을 보여주는 완전한 테스트벤치입니다.
entity T07_WaitOnUntilTb is end entity;
architecture sim of T07_WaitOnUntilTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
process is
begin
wait on CountUp, CountDown;
report "CountUp=" & integer'image(CountUp) & " CountDown=" & integer'image(CountDown);
end process;
process is
begin
wait until CountUp = CountDown;
report "Jackpot!";
end process;
end architecture;