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

VHDL에서 조건문을 사용하는 방법:If-Then-Elsif-Else

이전 자습서에서는 Wait When 문과 함께 조건식을 사용했습니다. 표현식은 두 카운터가 동일한 경우에만 프로세스가 트리거되도록 했습니다. 그러나 프로세스의 프로그램이 다른 입력에 따라 다른 작업을 수행하도록 하려면 어떻게 해야 할까요?

If-Then-Elsif-Else 문을 사용하여 프로그램에서 분기를 만들 수 있습니다. 변수의 값이나 표현식의 결과에 따라 프로그램은 다른 경로를 취할 수 있습니다.

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

기본 구문은 다음과 같습니다.

if <condition> then
elsif <condition> then
else
end if;

elsifelse 선택 사항이며 elsif 여러 번 사용할 수 있습니다. <condition> 부울 true일 수 있습니다. 또는 false 또는 true로 평가되는 표현식일 수 있습니다. 또는 false .

true인 표현식의 예 MyCounter인 경우 10 미만:

MyCounter < 10

관계 연산자:

= 같음
/= 같지 않음
< 미만
<= 작거나 같음
> 보다 큼
>= 크거나 같음

논리 연산자:

아니요 참이면 a 거짓입니다
a 그리고 참이면 a 그리고 b 사실입니다
a 또는 참이면 a 또는 b 사실입니다
a 참이면 a 또는 b 거짓입니다
a 아니요 참이면 a 그리고 b 거짓입니다
a xor a 중 정확히 하나인 경우 true 또는 b 사실입니다
a xnor 참이면 a 그리고 b 평등하다

운동

이 비디오 자습서에서는 VHDL에서 If-Then-Elsif-Else 문을 사용하는 방법을 배웁니다.

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

entity T08_IfTb is
end entity;

architecture sim of T08_IfTb 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

        if CountUp > CountDown then
            report "CountUp is larger";
        elsif CountUp < CountDown then
            report "CountDown is larger";
        else
            report "They are equal";
        end if;

        wait on CountUp, CountDown;

    end process;

end architecture;

ModelSim에서 실행 버튼을 눌렀을 때 시뮬레이터 콘솔에 대한 출력:

VSIM 2> run
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 0  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 10 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 20 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 30 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: They are equal
#    Time: 40 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 50 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 60 ns  Iteration: 1  Instance: /t08_iftb
...

분석

우리는 CountDown을 주었습니다. 초기 값 10 및 CountUp 값 0. 첫 번째 프로세스는 10ns마다 정확히 동시에 두 카운터 값을 변경합니다. 이 경우 프로그램이 항상 wait on CountUp, CountDown;에서 대기하기 때문에 두 번째 프로세스가 트리거됩니다. 선. If-Then-Elsif-Else 및 보고서 문이 시뮬레이션 시간을 0으로 소모하기 때문에 프로그램은 항상 그곳에서 기다리고 있을 것입니다.

If-Then-Elsif-Else 문은 프로그램이 우리가 만든 세 가지 분기 중 하나를 사용하도록 합니다. 두 개의 첫 번째 분기는 두 카운터가 다른 값을 갖는 경우를 다룹니다. 단일 else을 삭제할 수 있습니다. , elsif CountUp = CountDown then 사용 같은 결과를 얻었을 것입니다. 그러나 모든 분기를 다루는 것이 좋은 디자인 방법이며 else 이 조항은 모든 의도적이거나 예상치 못한 경우를 다룹니다.

출력물에서 볼 수 있듯이 두 번째 프로세스는 카운터가 변경될 때마다 세 가지 분기 중 하나를 사용합니다.

테이크아웃

다음 튜토리얼로 이동 »


VHDL

  1. 몰리브덴은 어떻게 사용합니까?
  2. VHDL에서 문자열 목록을 만드는 방법
  3. VHDL 테스트벤치에서 시뮬레이션을 중지하는 방법
  4. VHDL에서 PWM 컨트롤러를 만드는 방법
  5. VHDL에서 난수를 생성하는 방법
  6. VHDL의 프로세스에서 프로시저를 사용하는 방법
  7. VHDL에서 불순 함수를 사용하는 방법
  8. VHDL에서 함수를 사용하는 방법
  9. VHDL에서 유한 상태 기계를 만드는 방법
  10. 커터 그라인더 사용 방법