1. 순차문 & 병렬문
1.1 순차문 : 부프로그램이나 프로세스문의 수행을 위한 알고리즘 서술.
-> 순서대로 동작
-> 함수, 프로시저,프로세스문 내부알고리즘
순차문의 종류
-> 대기문, 보고문, 주장문, 지연 메커니즘, 배정문, 프로시저 호출문
if, case, loop, next, exit, return, null
1.2 병렬문 : 회로의 동작이나 구조 서술
병렬문의 종류 -> 프로세스, 블록사이 연결상태
-> 아키텍쳐 내부 부분
-> 각 병렬문은 독립,비동기적 동작.(하드웨어 동작 표현)
-> 프로세스문, 블록문, 병렬 프로시저 호출문, 병렬 주장문, 병렬 신호 배정문, 콤포넌트 실체화 문, 생성문,
-----------------------------------------------------------------------
1.3 순차문 상세
1.3.1 대기문( wait statement)
; 프로세스문, 프로시저 동작을 정지시키는 역할.
- 사용불가
-> 함수, 함수에서 호출된 프로시저 내부
-> 감지절을 가진 프로세스문 내부
-> 호출된 부프로그램 내부
-> 보호형(guard) 본체에서 선언
wait ~ on, until, for 의 형태
1.3.1.1 감지절(sensitivity clause)
; 감지대상 신호의 변화가 없으면 계속 대기
- on 예약어 사용
- 감지리스트 이용
-> 감지리스트 속의 신호 변화를 감지 후 다음명령 진행.
1.3. 1.2 조건절(condition clause)
; 조건이 false 일 경우 계속 대기.
- True일 시, 다음 문장 수행
- until 예약어 사용
- 조건절이 없으면 until True의 생략으로 가정.
1.3.1.3 타임 아웃절(timeout clause)
; 대기 상태에 있는 최대 시간을 규정.(time expression)
- for 예약어 사용
1.3.1.4 복합절
wait(sensitivity_clause and condition_clause) OR timeout_clause
- 감지절과 조건절이 동시에 오면 AND관계
- 타임아웃 절이 오면 다른 절과 OR관계로 동작.
1.5 wait;
<=> 무한대기
ex)
a) wait on A, B;
b) wait until en = '1';
c) wait for 10 ns;
d) wait on A, B until en = '1';
e) wait on A, B for 10 ns;
f) wait until en = '1' for 10 ns;
g) wait on A, B until en = '1' for 10 ns;
h) wait ;
i) wait for 0 ns;
j)
constant HALF_PERIOD_100M : time := 5 ns ;
-- 중략
clk_gen : process
begin
while (true) loop
clk <= '0' ; wait for HALF_PERIOD_100M ;
clk <= '1' ; wait for HALF_PERIOD_100M ;
end loop;
end process;
1.3.2 보고문(report statement)
; 메세지 출력 기능 (expression 부분에 문자열)
- severity level(심각수준) 값 동시에 출력 가능
- severity level 종류 : NOTE, WARNING, ERROR, FAILURE
ex)
report " Interrupt is detected "
-- A report statement with default severity NOTE.
report " ROM Read data is not Correct"
severity error;
report " The ROM file End "
severity Note;
1.3. 3 주장문(assertion statement)
; 특정 조건이 참임을 주장하는 용도
- 조건이 참이 아니면 에러 보고.
-> 보고문의 유무 파악 -> 있으면 출력
-> 없으면 'Assertion violation." 이란 default 출력 - severity 항이 없을 때 default level : ERROR
-> failure 경우, 주장문 내용 출력 후 시뮬레이션 중단.
-- synthesis translate_off
ready_check_process:
process(ready, nCS)
begin
assert not (ready = '1' and nCS = '1')
report " Unstable ouput of SR-FF due to nCS and ready at logic 1."
severity Error;
end process ready_check_process;
-- synthesis translate_on
-----------------------------------------------------------------------------
1.3.4 신호 배정문
; 기존 신호의 값에 새로운 신호값 인가,
인가하던 신호 값을 풀어 줌 or 값 변경
신호배정문 BNF,
- 신호 배정 연산자 '<=' 이용
-> 프로세스 내부에서 사용시 순차문
-> 프로세스 외부에서 사용시 병렬문
- 1076-2008부터 추가된 사항.
-> 조건신호배정문(conditional signal), 선택신호배정문(selected signal)
a) S <= A xor B;
b) C <= A and B after 10 ns;
c) out_pin <= in_pin after 10 ns;
d) Output_pin1 <= inertial Input_pin after 10 ns;
e) Output_pin2 <= reject 10 ns inertial Input_pin after 10 ns;
f) Output_pin <= transport Input_pin after 10 ns;
g) test_pattern <= '0', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns, '0' after 40 ns;
h) mem1(0) <= "00001000";
i) mem2(0)(7) <= '0';
1.3.4.1 지연 메커니즘(delay mechanism)
; delta delay, inertial delay(관성지원), transport delay(전달 지연)
ex) 예시
1.3.4.1.1 delta delay(델타지연)
; 신호배정문에서 after를 이용한 지연이 정의 되지 않은 상황.
- 신호지연이 0ns => delta 지연만 발생(실제 시간 지연 X)
- 델타지연으로 이벤트 순서를 정함
-> 이벤트 순서의 차이를 모델링
-> 델타 지연 개수에 무관하게 시간지연 0ns
ex) B <= not A; C <= not B; Y <= not C; [프로세스문 내부]
1.3.4.1.2 inertial delay(관성 지연)
; after는 사용했으나 transport 는 사용하지 않았을 때.
- 기본적인 지연 매커니즘
1.3.4.1.3 transport delay(전달지연)
; after + transport 예약어 사용.
- 무한대의 주파수 응답을 가진 전송선로 모델링 용
=> 모든 펄스를 출력으로 전달(아무리 짧은 주기 펄스도)
ex) Y <= transport A after 10 ns;
1.3.4.2 unaffected 예약어
; target 신호에 null을 배정한 것과 같은 의미
-> target 신호가 이전 값을 유지
-> target 신호에 변화가 생기지 않음.
ex)
result <= detect after 5 ns when strb = ‘0’ else
unaffected ;
-> strb = ‘0’ 이 아닌 경우 result는 이전 값을 유지
-> 등가 코드(등가 로직)
process(strb, detect)
begin
if strb = ‘0’ then
result <= detect after 5 ns ;
else null;
end if ;
end process;
1.3.4.3 waveform element(파형요소)
파형인가 방법
- 특정 시간에 특정한 구동값 인가 : value_expression 이용.
- null을 이용하여 인가되던 기존 신호를 특정 시간에 중지
-> guarded signal(경호된 신호)에서만 가능
-> null문장의 배정 X, null 파형의 배정 O
=> 기존에 인가되던 신호의 배정이 중지.
ex)
Y <= '0', '1' after 10 ns, '0' after 25 ns;
1.3.4.4 조건신호 배정문/ 선택신호 배정문
1.3.4.5 변수배정문
; 기존 변수 값에 새로운 변수 값 인가함.
변수 배정문
- 변수 배정 연산자 :=
-> 프로세스문 내부, 부프로그램 내부
- 단순 변수 배정 BNF
; 기존 언어의 변수와 같은 의미. RHS식 계산 결과가 LHS에 즉시 할당.
=> 즉시할당 : 지연시간, 델타지연 없음,
단순 변수 배정
ex)
a) S := A xor B;
b) C := A and B;
c) mem1(0) := "00001000";
d) mem2(0)(7) := '0';
e)
architecture behavioral of variable_test is
signal s : std_logic;
begin
process (a, s)
variable v : std_logic;
begin
s <= not a;
sout <= not s;
v := not a;
vout <= not v;
end process;
end behavioral;
-------------------------------------------------------------------------------------
1.3.5 프로시저 호출문
- 프로시저 호출에 의해, 본체가 수행됨.
=> 호출 이전에 프로시저 본체가 정의되어 있어야 함.
- 위치 : 프로세스문 내부 : 순차 프로시저 호출문
: 프로세스문 외부 : 병렬 프로시저 호출문
- 프로시저
-> 이름 : 호출시 사용될 프로시저 본체 결정
-> 실 매개변수 : 프로시저 내부에서 사용되는 실 매개변수 정보 제공.
ex)
architecture sim of procedure test is
procedure ECHO(STR : string) is
variable DLINE : line;
begin
write(DLINE, STR, left, 20);
writeline(output, DLINE);
end;
begin
-- 중략
ECHO(" ERROR : Illegal read operation.");
end sim ;
1.3.6 if문
- elsif 는 임의 개수 만큼 반복간능
- else는 안와도 됨.
ex)
1.3.7 case 문
- expression : 이산형, 문자형을 원소로 하는 1차원 배열
- ? 기호 : 정합 case문(1076-2008 부터 추가됨)
; bit, std_ulogic 1차원 배열 형
ex)
1.3.8 loop문
; 반복적으로 수행되어야 할 문장
4.9.1 iteration scheme
while, for 이용한 반복 ; 없다면 무한루프
=> loop문 내, next, exit, return으로 종료
4.9.1.1 while 이용하는 경우
; condition이 true일 경우 내부 문장 진입(수행)
=> false면 진입 없이 loop 종료
4.9.1.2 for를 이용하는 경우
; loop변수의 이산값이 미완료일 경우 내부문장 진입(수행)
-> loop 변수는 이산형이여야함
-> loop 내부 문장으로 loop 변수 값 변경하면 안 됨.
-> 외부 선언 없이 loop문 에서 loop변수 사용 가능.
ex)
1.3.9 next문
; loop문에서 현재 단계의 실행을 완료.
- when condition 있을 때.
-> true : next 다음 문장 무시, 현재 단계 종료.
-> false : next 다음 문장 계속 수행.
- when condition 없을 때.
-> true와 같은 동작.
- loop_label (goto랑 비슷?)
-> 존재할 경우 : 현재 단계 종료 후, loop_label로 이동
-> 없을 경우 : 가장 안쪽 loop의 시작으로 이동.
- ex)
i > j 조건이 참이 되면 아래의 메모리 초기화를 생략하고 다음의 inner_loop로 실행을 옮김
1.3.10 exit문 ; 현재의 loop문 종료
- when condition 있을 때.
-> true : 해당 loop 종료.
-> false : exit 다음 문장 계속 수행.
- when condition 없을 때.
-> true와 같은 동작.
- loop_label (goto랑 비슷?)
-> 존재할 경우 : 해당 loop 종료
-> 없을 경우 : 가장 안쪽 loop 종료
- ex)
i = 1 and j = 0 조건이 참이 되면 전체 loop(outer loop) 를 종료하고 그 다음 문장 실행
1.3.11 return 문
; 현재의 실행을 종료
- >해당 함수, 프로시저를 호출한 문장으로 복귀
-> 함수, 프로시저 내부에서만 사용
expression
- 프로시저는 못 옴, 함수는 옴
- 함수의 return 형과 일치해야 함.
-ex)
function DATA_MAX( data_a, data_b : in std_logic_vector )
return std_logic_vector is
begin
if ( data_a > data_b ) then
return data_a;
else
return data_b;
end if;
end DATA_MAX;
1.3.12 null문
; 아무런 동작도 수행하지 않는 경우를 표현.
-> null literal이 아니다(문장과 리터럴 차이)
-> case 문에서 others와 함께 사용
ex) when others => null;
출처 : http://dasan.sejong.ac.kr/~dihan/vhdl.htm
'전공지식정리 > 디지털시스템설계' 카테고리의 다른 글
VHDL4.부프로그램(Sub program) ,패키지 (0) | 2020.12.08 |
---|---|
VHDL 3.병렬문 (0) | 2020.12.08 |
VHDL1.개발과정, 특징, 구조, 검증, 엔티티, 설계과정 (0) | 2020.12.08 |
Practical Combinational Logic design3 (0) | 2020.12.08 |
Practical Combinational Logic design2 (0) | 2020.12.08 |