실무급 VHDL에서 프로세스는 일반적으로 wait 문 대신 민감도 리스트(sensitivity list)에 의해 구동됩니다. 민감도 리스트는 프로세스를 깨워야 할 모든 신호를 열거합니다.
wait on과 wait until은 시뮬레이션에 편리하지만, 합성 가능한 RTL에서는 거의 사용되지 않습니다. 합성에서 wait 문은 종종 무시되어 예측 불가능한 하드웨어를 초래합니다. 반면 민감도 리스트는 합성 도구가 신뢰성 있게 구현할 수 있는 조합 논리 또는 클럭 동기 블록에 직접 매핑됩니다.
기본 VHDL 튜토리얼 – 프로세스 민감도
시뮬레이터용 코드를 작성할 때는 타이밍 제어를 위해 항상 wait 문을 사용합니다. 실리콘으로 합성될 설계에서는 wait을 완전히 피하고 민감도 리스트를 사용합니다.
민감도 리스트가 있는 프로세스의 구문은 다음과 같습니다:
process( signal1, signal2, ... ) is begin -- 메인 로직 여기 end process;
프로세스 내부에서 읽는 모든 신호가 리스트에 나타나야 합니다. VHDL 컴파일러는 누락된 신호를 플래그하지 않지만, 하나를 생략하면 합성 후 동작이 변경됩니다.
VHDL-2008은 모든 읽기 신호를 자동으로 포함하는 키워드 all을 도입했습니다(예: process(all)). 그러나 대부분의 상용 합성기는 아직 이 기능을 지원하지 않습니다.
실습
동반 비디오 튜토리얼에서는 민감도 리스트를 사용하는 프로세스 구축을 안내합니다.
이 강의에서 생성된 최종 VHDL 스니펫:
entity T09_SensitivityListTb is end entity;
architecture sim of T09_SensitivityListTb 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;
-- Wait On으로 트리거되는 프로세스
process is
begin
if CountUp = CountDown then
report "Process A: Jackpot!";
end if;
wait on CountUp, CountDown;
end process;
-- 민감도 리스트를 사용하는 동등한 프로세스
process(CountUp, CountDown) is
begin
if CountUp = CountDown then
report "Process B: Jackpot!";
end if;
end process;
end architecture;