VHDL의 아키텍처를 설계할때는 크게 병렬문과 순차문으로 나뉜다.
일반적으로 아키텍처는 문장부 서술은 병렬문으로 서술하지만
병렬문 내부 혹은 부프로그램(프로시저, 함수)은 순차문으로 동작을 하기 때문에 두가지 동작을 명확히 이해한 상태에서 설계를 진행해야 한다.
이번 포스팅에서는 순차문에 대해 알아보자.
순차문(Sequential Statement)
• 병렬문의 부프로그램이나 프로세스문 수행을 위한 알고리즘 서술 용도로 사용
• 반드시 앞의 문장이 진행되어야 뒤에 문장이 진행할 수 있다.
• 순차문 종류 : 대기문, 주장문, 신호배정문, 변수배정문, 프로시저 호출문, if문, case문, next문 등..
1. 대기문(wait statement)
- process문이나 procedure의 동작을 주어진 조건에 맞추어 정지시키는 역할
- function및 함수에 의해 호출된 procedure내부에서 사용 불가
- process문이 신호 감지절을 가질 경우 사용 불가
- 감지절이 있는 process에서 호출된 procedure내에서도 사용 불가 process(A, B)
//wait문 사용을 통한 클럭 신호 모델링
clk_gen : process
begin
while (true) loop
clk <= '0'; wait for 5ns;
clk <= '1'; wait for 5ns;
end loop;
end process;
2. 신호배정문(signal assignment statement)
- 기존 신호값에 새로운 신호 값을 인가하거나 인가하고 있던 값을 풀어주거나 특정 출력 파형 형태를 가지도록 기존 신호값을 변경하는 역할
- 프로세스문 내부, 외부 모두 사용될수 있음
프로세스 문 내부에서 사용될 경우 순차문이 되고
프로세스 문 외부에서 사용될 경우 병렬문이 됨
- 조건신호 배정문 ex) if문 (when ~ else는 병렬문)
- 선택신호 배정문 ex) case문 (with ~ select ~ when은 병렬문)
3. if문
- if문은 하나 이상의 조건절의 진리값에 의해서 실행되어야 할 문장들을 결정하는 순차문이며 가장 널리 사용되는 문장이다.
//if문 사용 예
if(one = '1' and count = 7) then
count := 7;
one := '0';
elsif(count = 0) then
count := 15;
one := '1';
else
count := count - 1;
end if;
4. case문
- 여러개의 문장 집합 중에서 하나를 고르는 동작을 수행
- if문과 달리 회로에 우선순위를 부여하지 않는다(if는 조건1이 최우선순위)
- 마지막 선택 조건으로 when others 예약어 사용을 통해 예상치 못한 선택조건을 고려하는것이 좋다.
- 사용되지 않는 경우에 대해서 예약어 'null'을 사용하여 아무런 동작이 일어나지 않도록 처리(불필요한 래치 발생을 안하기 때문에 gate소모를 줄일 수 있음)
// case문 사용 예
case win_id_var is
when "0001" | "0011" => win_id <= "00";
when "0101" | "1110" => win_id <= "01";
when "1111" => win_id <= "10";
when others => null;
end case;
'[verilog | VHDL]' 카테고리의 다른 글
[VHDL] MUX, DEMUX, 4비트 비교기 설계 (0) | 2022.04.19 |
---|---|
[VHDL] 4비트 병렬 가감산기(4-bit Full adder / subtractor) (0) | 2022.04.19 |
[VHDL] 1비트 가감산기 설계(half / full, adder / subtractor) (0) | 2022.04.19 |
[VHDL] 병렬문(Concurrent Statement) (0) | 2022.04.19 |
[VHDL] 기본 문법 (0) | 2022.04.17 |