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 자습서 시리즈의 일부입니다. 단순 루프의 구문은 다음과 같습니다.