산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> VHDL

VHDL Wait 문 마스터하기: Wait On, Wait Until, 복합 사용법

이전 튜토리얼에서는 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;

ModelSim의 콘솔 출력은 이벤트 순서를 보여줍니다:

VSIM 2> run
# ** Note: CountUp=1 CountDown=9
# Time: 0 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=2 CountDown=8
# Time: 10 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=3 CountDown=7
# Time: 20 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=4 CountDown=6
# Time: 30 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=5 CountDown=5
# Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=6 CountDown=4
# Time: 50 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=7 CountDown=3
# Time: 60 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=8 CountDown=2
# Time: 70 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=9 CountDown=1
# Time: 80 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=10 CountDown=0
# Time: 90 ns Iteration: 1 Instance: /t07_waitonuntiltb
# ** Note: CountUp=11 CountDown=-1
# Time: 100 ns Iteration: 1 Instance: /t07_waitonuntiltb

분석

첫 번째 프로세스는 CountUp과 CountDown을 10ns마다 동시에 업데이트합니다. 신호 할당은 wait 문 이후에만 효과가 발생하므로, 두 카운터는 각 시뮬레이션 단계에서 함께 업데이트됩니다.

두 번째 프로세스는 wait on CountUp, CountDown;을 사용하여 어느 카운터든 변경될 때까지 일시 중단됩니다. 표시된 대로 초기 업데이트 시점인 0ns와 이후 어느 신호든 변경될 때마다 트리거됩니다.

세 번째 프로세스는 wait until CountUp = CountDown;을 사용합니다. 모든 신호 변경 시 깨어나지만 등식이 성립할 때만 진행합니다. 결과적으로 "Jackpot!" 메시지는 두 카운터가 모두 5에 도달하는 40ns에 한 번만 나타납니다.

VHDL Wait 문 마스터하기: Wait On, Wait Until, 복합 사용법

핵심 요약

VHDL 동기화에 대한 더 깊은 통찰을 위해 다음 튜토리얼로 진행하세요.

VHDL

  1. 프로세스 내 프로시저로 VHDL FSM 설계 깔끔하게 만들기
  2. VHDL 비순수 함수 활용: FSM 가독성과 유지보수성 높이기
  3. VHDL 함수 마스터하기: 효율적 설계를 위한 실전 가이드
  4. VHDL 프로시저 활용: 재사용 코드로 설계 단순화하기
  5. VHDL 상수와 제네릭 맵으로 유연한 모듈 설계하기
  6. VHDL 포트 맵 인스턴스화 마스터하기: 실전 가이드
  7. VHDL Case-When 문 마스터하기: 효율적 멀티플렉서 설계
  8. 무료 VHDL 시뮬레이터 & 에디터 설정: 학생 가이드
  9. PIC18F452 마이크로컨트롤러 완벽 가이드: 특징, 핀아웃, 프로그래밍, 응용
  10. 레퍼런스 디그네이터 이해: PCB 어셈블리 연결 라벨링 방법