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

VHDL에서 Wait On 및 Wait until을 사용하는 방법

이전 튜토리얼에서 우리는 신호와 변수의 주요 차이점을 배웠습니다. 신호는 하나의 프로세스 내에서만 액세스할 수 있는 변수보다 범위가 더 넓다는 것을 배웠습니다. 그렇다면 여러 프로세스 간의 통신을 위해 신호를 어떻게 사용할 수 있습니까?

우리는 이미 wait; 사용법을 배웠습니다. 무한히 대기하고 wait for 특정 시간 동안 기다리기. VHDL에는 두 가지 유형의 대기 명령문이 더 있습니다.

이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다.

Wait On 문은 지정된 신호 중 하나가 변경될 때까지 프로세스를 일시 중지합니다.
wait on <signal_name1>, <signal_name2> ...;

Wait When 문은 이벤트로 인해 조건이 true가 될 때까지 일시 중지됩니다.
wait until <condition>;

실제로 Wait On, Wait When 및 Wait For는 다음과 같이 결합될 수 있습니다.
wait on <signal_name1> until <condition> for <time_value>;

이 예는 10나노초 동안 또는 signal1까지 일시중지됩니다. 변경 사항 및 signal2 signal3과 같습니다. :
wait on signal1 until signal2 = signal3 for 10 ns;

운동

이 비디오 자습서에서는 VHDL에서 프로세스 간 통신을 위해 Wait On 및 Wait When 문을 사용하는 방법을 배웁니다.

이 튜토리얼에서 만든 최종 코드:

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 감소 카운터. 동시에 업데이트됩니다. 두 신호의 신호 할당은 프로세스에서 서로 다른 라인에 있지만 할당된 신호 값은 프로그램이 Wait 문에 도달할 때만 유효합니다. 프로세스는 시뮬레이션이 시작될 때 이 작업을 수행한 다음 10나노초마다 수행합니다.

두 번째 프로세스의 첫 번째 줄은 wait on CountUp, CountDown;입니다. . 프로그램은 신호 중 하나 또는 둘 모두가 변경될 때까지 이 라인에서 기다립니다. 출력물에서 볼 수 있듯이 이것은 카운터가 처음으로 변경되는 0ns 시뮬레이션 시간에 발생하고 그 이후에는 변경될 때마다 발생합니다.

세 번째 프로세스의 첫 번째 줄은 wait until CountUp = CountDown;입니다. . 프로그램은 첫 번째 프로세스와 마찬가지로 두 신호 중 하나가 변경될 때마다 깨어납니다. 그러나 표현식이 true으로 평가되는 경우에만 계속됩니다. , 그렇지 않으면 다시 절전 모드로 전환됩니다. 출력물에서 볼 수 있듯이 "대성공!" 두 카운터가 동일한 값을 가질 때 40ns에서 한 번만 인쇄됩니다.

테이크아웃

다음 튜토리얼로 이동 »


VHDL

  1. VHDL의 프로세스에서 프로시저를 사용하는 방법
  2. VHDL에서 불순 함수를 사용하는 방법
  3. VHDL에서 함수를 사용하는 방법
  4. VHDL에서 프로시저를 사용하는 방법
  5. VHDL에서 상수 및 일반 맵을 사용하는 방법
  6. VHDL에서 포트 맵 인스턴스화를 사용하는 방법
  7. VHDL에서 Case-When 문을 사용하는 방법
  8. VHDL 시뮬레이터 및 편집기를 무료로 설치하는 방법
  9. PIC18 마이크로컨트롤러:정의 및 사용 방법
  10. 참조 지정자는 무엇이며 어셈블리에서 어떻게 사용합니까?