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

VHDL 조건문 마스터하기: If-Then-Elsif-Else 완벽 가이드

이전 튜토리얼에서는 두 카운터 신호가 일치할 때만 프로세스를 트리거하기 위해 Wait Until 문과 조건식을 사용했습니다. 만약 다양한 입력에 따라 프로그램이 다른 동작을 취해야 한다면 어떻게 할까요?

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

이 기사는 기본 VHDL 튜토리얼 시리즈의 일부입니다.

기본 구문

표준 형식은 다음과 같습니다:

if <조건> then elsif <조건> then else end if;

elsif와 else 절은 선택 사항이며, elsif는 여러 번 나타날 수 있습니다. <조건>은 부울 리터럴이거나 true 또는 false로 평가되는 표현식일 수 있습니다.

예: MyCounter < 10은 MyCounter가 10보다 작을 때 참입니다.

관계 연산자

=같음
/=같지 않음
<작음
<=작거나 같음
>큼
>=크거나 같음

논리 연산자

not aa가 거짓이면 참
a and ba와 b가 모두 참이면 참
a or ba 또는 b가 참이면 참
a nand ba 또는 b가 거짓이면 참
a nor ba와 b가 모두 거짓이면 참
a xor ba와 b 중 정확히 하나만 참이면 참
a xnor ba와 b가 같으면 참

실습

아래는 If-Then-Elsif-Else 구조를 실제로 보여주는 완전한 VHDL 예제입니다.

최종 코드:

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마다 동시에 업데이트됩니다. 두 번째 프로세스는 이 신호들을 대기하므로 변경될 때마다 트리거됩니다. If-Then-Elsif-Else 블록은 CountUp > CountDown, CountUp < CountDown, CountUp = CountDown 세 가지 분기 중 하나를 선택합니다. 명시적 else는 필수는 아니지만, 모든 예외 상황을 처리하기 위해 포함하는 것이 모범 사례입니다.

콘솔 추적은 두 번째 프로세스가 각 업데이트 후 조건을 평가하여 적절한 메시지를 출력함을 확인시켜 줍니다.

VHDL 조건문 마스터하기: If-Then-Elsif-Else 완벽 가이드

핵심 요약

다음 튜토리얼로 계속 »

VHDL

  1. 몰리브덴이 현대 산업을 형성하는 방식: 용도, 이점, 공급 역학
  2. VHDL 문자열 리스트 구현: 모범 사례와 예제
  3. VHDL 테스트벤치 시뮬레이션 우아하게 종료하기
  4. VHDL PWM 컨트롤러 구현: 설계, 시뮬레이션, FPGA 데모
  5. VHDL 난수 생성: 균일 분포부터 OSVVM까지
  6. 프로세스 내 프로시저로 VHDL FSM 설계 깔끔하게 만들기
  7. VHDL 비순수 함수 활용: FSM 가독성과 유지보수성 높이기
  8. VHDL 함수 마스터하기: 효율적 설계를 위한 실전 가이드
  9. VHDL 유한 상태 머신 설계: 신호등 실전 예제
  10. 커터 그라인더(Cutter Grinder) 마스터하기: 실전 기술 가이드