VHDL
이전 자습서에서는 Wait When 문과 함께 조건식을 사용했습니다. 표현식은 두 카운터가 동일한 경우에만 프로세스가 트리거되도록 했습니다. 그러나 프로세스의 프로그램이 다른 입력에 따라 다른 작업을 수행하도록 하려면 어떻게 해야 할까요?
If-Then-Elsif-Else 문을 사용하여 프로그램에서 분기를 만들 수 있습니다. 변수의 값이나 표현식의 결과에 따라 프로그램은 다른 경로를 취할 수 있습니다.
이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다.
기본 구문은 다음과 같습니다.
if <condition> then
elsif <condition> then
else
end if;
elsif
및 else
선택 사항이며 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
이전 자습서에서 For-Loop를 사용하여 정수 범위를 반복하는 방법을 배웠습니다. 그러나 고정된 정수 범위보다 루프를 더 자세히 제어하려면 어떻게 해야 할까요? 이를 위해 While 루프를 사용할 수 있습니다. While 루프는 테스트하는 표현식이 true로 평가되는 한 계속해서 동봉된 코드를 반복합니다. . 따라서 While-Loop는 얼마나 많은 반복이 필요한지 미리 알 수 없는 상황에 적합합니다. 이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다. While 루프의 구문은 다음과 같습니다. while <
이전 튜토리얼에서 wait for를 사용하여 시간을 지연시키는 방법을 배웠습니다. 성명. 프로세스 루프에 대해서도 배웠습니다. 이제 허용하면 프로세스 스레드가 프로세스 내에서 영원히 반복된다는 것을 알고 있습니다. 그러나 프로세스의 시작 부분에서 한 번만 무언가를 하고 싶다면 어떻게 해야 할까요? 그런 다음 끝에 다른 코드를 반복합니까? VHDL에서 가장 단순한 종류의 루프는 loop을 사용하여 생성할 수 있습니다. 성명서. 이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다. 단순 루프의 구문은 다음과 같습니다.