5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/vhdl05_full.pdf ·  ·...

47
VHDL 프로그래밍 VHDL 프로그래밍 5. 순차문과 병렬문 한동일 학습 목표 학습 목표 순차문들의 종류와 활용 방법에 대해서 배운다. 병렬문들의 종류와 활용 방법에 대해서 배운다 병렬문들의 종류와 활용 방법에 대해서 배운다. 순차문으로도 사용이 가능하고 병렬문으로도 사 용이 가능한 신호 배정문의 정의 사용법을 용이 가능한 신호 배정문의 정의 사용법을 운다. 프로세스문과 부프로그램 내부에서 사용되는 변 배정문의 정의 사용법을 배운다 배정문의 정의 사용법을 배운다. if 문, case 문, loop 문 등 주요 순차문들을 활용 있다 있다. 프로세스문, 콤포넌트 실체화문 주요 병렬문들 2/93 프로세스문, 콤포넌트 실체화문 주요 병렬문들 을 활용할 수 있다.

Upload: dangnhi

Post on 07-May-2018

220 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

VHDL 프로그래밍VHDL 프로그래밍

5. 순차문과 병렬문

한 동 일

학습 목표학습 목표

순차문들의 종류와 활용 방법에 대해서 배운다.

병렬문들의 종류와 활용 방법에 대해서 배운다 병렬문들의 종류와 활용 방법에 대해서 배운다.

순차문으로도 사용이 가능하고 병렬문으로도 사용이 가능한 신호 배정문의 정의 및 사용법을 배용이 가능한 신호 배정문의 정의 및 사용법을 배운다.

프로세스문과 부프로그램 내부에서 사용되는 변수 배정문의 정의 및 사용법을 배운다수 배정문의 정의 및 사용법을 배운다.

if 문, case 문, loop 문 등 주요 순차문들을 활용할 수 있다할 수 있다.

프로세스문, 콤포넌트 실체화문 등 주요 병렬문들

2/93

프로세스문, 콤포넌트 실체화문 등 주요 병렬문들을 활용할 수 있다.

Page 2: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문과 병렬문순차문과 병렬문

VHDL을 이용한 하드웨어 설계 과정 VHDL을 이용한 하드웨어 설계 과정 아키텍처 문장부의 서술

모두 병렬문으로 구성

대부분 프로세스문의 서술

프로세스문의 서술 프로세스문 내부는 순차문으로 서술

프로시저나 함수와 같은 부프로그램 서술 부프로그램 내부는 순차문으로 서술

나머지 부분은 문법을 이용한 기계적인 서술이 가능 각종 형, 속성, 인터페이스, 가명, 콤포넌트 선언 등등

식별 의 선정 엔 텍 신 변수 식별어의 선정 – 엔티티, 아키텍처, 신호, 변수 등등

콤포넌트 실체화, 부프로그램 호출, 생성문 등등

패키지 라이브러리의 사용 등등

3/93

패키지, 라이브러리의 사용 등등

.

순차문과 병렬문순차문과 병렬문

순차문 순차문 부프로그램이나 프로세스문의 수행을 위한 알고리즘을

서술하는 용도 함수나 프로시저의 내부 알고리즘 서술

프로세스문의 내부 알고리즘 서술

서술된 순서대로 동작 소프트웨어 언어와 동작 방식이 유사

병렬문 회로의 동작이나 구조를 서술하는 용도

프로세스나 블록 사이의 연결 상태 서술

아키텍처 내부에서 서술

각각의 병렬문들은 독립적으로 비동기적으로 동작

4/93

하드웨어의 동작을 표현

.

Page 3: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

순차문의 종류 순차문의 종류

sequence_of_statements ::=

{ sequential_statement }

ti l t t tsequential_statement ::=

wait_statement | report_statement

| ti t t t | i l i t t t t| assertion_statement | signal_assignment_statement

| variable_assignment_statement | if_statement

| d ll t t t | t t t| procedure_call_statement | case_statement

| loop_statement | next_statement

| it t t t | t t t t| exit_statement | return_statement

| null_statement

5/93

순차문(sequential statement)순차문(sequential statement)

대기문( it t t t)의 BNF 정의 대기문(wait statement)의 BNF 정의wait_statement ::=

[ label : ] wait [ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ;

sensitivity clause ::= on sensitivity listsensitivity_clause :: on sensitivity_list

sensitivity_list ::= signal_name { , signal_name }

condition clause ::= until conditioncondition_clause :: until condition

condition ::= expression

timeout clause ::= for time expression

프로세스문이나 프로시저의 동작을 주어진 조건에 따라정지시키는 역할을 수행

timeout_clause :: for time_expression

정지시키는 역할을 수행 함수 및 함수에서 호출된 프로시저 내부에서는 사용 불가

감지절을 가진 프로세스문 내부에서 사용 불가

6/93

감지절을 가진 프로세스문 내부에서 사용 불가

보호형 본체에서 선언되거나 호출된 부프로그램 내부에서도 사용 불가

Page 4: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

대기문(wait statement)대기문(wait statement)

대기문( it t t t)의 예 대기문(wait statement)의 예

) it A Ba) wait on A, B;

b) wait until en = '1';

) it f 10c) wait for 10 ns;

d) wait on A, B until en = '1';

) it A B f 10e) wait on A, B for 10 ns;

f) wait until en = '1' for 10 ns;

) it A B til '1' f 10g) wait on A, B until en = '1' for 10 ns;

h) wait ;

i) it f 0i) wait for 0 ns;

7/93

대기문(wait statement)대기문(wait statement)

감지절( iti it l ) 감지절(sensitivity clause) on 예약어 사용

감지 리스트(sensitivity list) 이용 감지 리스트에 존재하는 신호의 변화를 감지한 후 다음 명령 진행

감지 리스트 신호의 변화가 없는 경우에는 계속 대기

조건절(condition clause) until 예약어 사용until 예약어 사용

조건절이 TRUE가 되면 다음 문장 수행 조건절이 FALSE인 경우에는 계속 대기 조건절이 FALSE인 경우에는 계속 대기

조건절이 없으면 until TRUE가 생략되어 있는 것으로 가정

8/93.

Page 5: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

대기문(wait statement)대기문(wait statement)

타임아웃절(ti t l ) 타임아웃절(timeout clause) for 예약어 사용

대기 상태에 있는 최대 시간을 규정 타임아웃 시간을 결정하기 위해 time expression 값 이용

time expression 값이 음수이면 에러

기타기타 복합절 :

wait (sensitivity clause AND condition clause) OR timeout clausewait (sensitivity_clause AND condition_clause) OR timeout_clause 감지절과 조건절이 동시에 오면 서로 AND 관계

타임아웃절이 오면 다른 절과 OR 관계로 동작 타임아웃절이 오면 다른 절과 OR 관계로 동작

wait ;

9/93

무한 대기

.

대기문(wait statement)대기문(wait statement)

대기문의 예 대기문의 예

constant HALF PERIOD 100M : time := 5 ns ;constant HALF_PERIOD_100M : time : 5 ns ;

-- 중략

clk gen : processclk_gen : process

begin

while (true) loopwhile (true) loop

clk <= '0' ; wait for HALF_PERIOD_100M ;

clk <= '1' ; wait for HALF PERIOD 100M ;clk < 1 ; wait for HALF_PERIOD_100M ;

end loop;

end process;end process;

10/93

Page 6: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

보고문( t t t t)의 BNF 정의 보고문(report statement)의 BNF 정의

report_statement ::=

[ label : ] report expression

[ severity expression ] ;

메시지를 출력하는 역할을 수행expression 부분에 문자열이 와야 함 expression 부분에 문자열이 와야 함

심각 수준(severity level) 값을 동시에 출력 가능severity 항이 없을 때 보고문의 기본 심각 수준 : NOTE severity 항이 없을 때 보고문의 기본 심각 수준 : NOTE

심각 수준(severity level)의 종류NOTE NOTE

WARNING

ERROR

11/93

RROR

FAILURE

보고문

보고문( t t t t)의 예

보고문

보고문(report statement)의 예

report " Interrupt is detected "report Interrupt is detected

-- A report statement with default severity NOTE.

report " ROM Read data is not Correct"

severity error;severity error;

report " The ROM file End "report The ROM file End

severity Note;

12/93

Page 7: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

주장문( ti t t t)의 BNF 정의 주장문(assertion statement)의 BNF 정의assertion_statement ::= [ label : ] assertion ;

assertion ::= assert condition

[ report expression ]

[ severity expression ]

특정 조건이 참임을 주장하는 용도 조건 부분이 참이 아니면(주장 위반이 발생) 에러를 보고 조건 부분이 참이 아니면(주장 위반이 발생) 에러를 보고

주장 위반이 발생 시 보고문의 유무 파악

보고문이 있으면 보고문을 출력

보고문이 없으면 “Assertion violation.”이란 기본 문자열 출력

severity 항이 없을 때 주장문의 기본 심각 수준 : ERROR

심각 수준 값이 f il 일 경우 주장문 내용 출력 후 시뮬레이션 중단

13/93

심각 수준 값이 failure일 경우 주장문 내용 출력 후 시뮬레이션 중단

.

주장문주장문

주장문( ti t t t)의 예 주장문(assertion statement)의 예

-- 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

14/93

Page 8: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

신호 배정문의 BNF 정의 신호 배정문의 BNF 정의signal_assignment_statement ::=

[ label : ] simple_signal_assignment

| [ label : ] conditional_signal_assignment

기존의 신호 값에 새로운 신호 값을 인가하거나 인가하

| [ label : ] selected_signal_assignment

기존의 신호 값에 새로운 신호 값을 인가하거나 인가하던 신호 값을 풀어주거나 신호 값을 변경하는 용도

신호 배정 연산자 “<=“를 이용 신호 배정 연산자 <= 를 이용 프로세스문 내부에서 사용되면 순차문을 구성

프로세스문 외부에서 사용되면 병렬문을 구성 프로세스문 외부에서 사용되면 병렬문을 구성

조건 신호 배정문, 선택 신호 배정문은 1076-2008 버전부터 추가된 사양

15/93

부터 추가된 사양

신호 배정문신호 배정문

단순 신호 배정을 위한 BNF 정의 단순 신호 배정을 위한 BNF 정의

simple signal assignment ::=simple_signal_assignment ::

target <= [ delay_mechanism ] waveform ;

target ::=

name | aggregate

delay_mechanism ::=

transport | [ reject time_expression ] inertial

waveform ::=

waveform_element { , waveform_element } | unaffected

waveform_element ::= value_expression [ after time_expression ]

| null [ after time_expression ]

16/93

Page 9: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

신호 배정문신호 배정문

단순 신호 배정의 예 단순 신호 배정의 예

S <= A xor B;;

C <= A and B after 10 ns;

out_pin <= in_pin after 10 ns;

Output_pin1 <= inertial Input_pin after 10 ns;

Output_pin2 <= reject 10 ns inertial Input_pin after 10 ns;

i iOutput_pin <= transport Input_pin after 10 ns;

test_pattern <= '0', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns, '0' after 40 ns;

mem1(0) <= "00001000";mem1(0) <= 00001000 ;

mem2(0)(7) <= '0';

17/93

신호 배정문신호 배정문

지연 메커니즘(d l h i ) 지연 메커니즘(delay mechanism) 델타 지연(delta delay)

관성 지연(inertial delay)

전달 지연(transport delay) 전달 지연(transport delay)

지연 메커니즘의 BNF 정의 지연 메커니즘의 BNF 정의

simple signal assignment ::=p _ g _ g

target <= [ delay_mechanism ] waveform ;

d l h idelay_mechanism ::=

transport

| [ j i ] i i l

18/93

| [ reject time_expression ] inertial

.

Page 10: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

지연 메커니즘지연 메커니즘

지연 메커니즘의 예 지연 메커니즘의 예

S <= A xor B; -- 델타 지연 1S < A xor B; -- 델타 지연 1

C <= A and B; -- 델타 지연 2

C1 <= A and B after 10 ns; -- 관성 지연 1C1 < A and B after 10 ns; -- 관성 지연 1

Output_pin1 <= inertial Input_pin after 10 ns; -- 관성 지연 2

Output pin2 <= reject 10 ns inertial Input pin after 10 ns; -- 관성 지연 3Output_pin2 < reject 10 ns inertial Input_pin after 10 ns; -- 관성 지연 3

Output_pin3 <= transport Input_pin after 10 ns; -- 전달 지연

19/93

지연 메커니즘지연 메커니즘

델타 지연(d lt d l ) 델타 지연(delta delay) 신호 배정문에서 after 예약어를 이용한 지연이 정의되

지 않은 경우

신호 지연이 0 ns 인 경우

델타 지연만 발생하고 실제적인 시간 지연이 발생하지는않음않음

델타 지연으로 이벤트들의 순서를 정함이벤트들의 순서의 차이를 델타 지연으로 모델링 이벤트들의 순서의 차이를 델타 지연으로 모델링

델타 지연의 개수에 무관하게 시간 지연은 0 ns

20/93.

Page 11: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

지연 메커니즘지연 메커니즘

델타 지연(d lt d l )의 예 (프로세스문 내부) 델타 지연(delta delay)의 예 (프로세스문 내부)

B A C B Y CB <= not A; C <= not B; Y <= not C;

A B C Y

A

B

C

Y

21/93

10 ns 10+1 10+2 10+3=10 ns

지연 메커니즘지연 메커니즘

관성 지연(i ti l d l ) 관성 지연(inertial delay) 신호 배정문에서 after 예약어를 이용하되 transport 예

약어를 이용하지 않은 경우

지연이 있을 경우의 기본 지연 메커니즘

스위치 회로의 특성을 모델링하기 위한 용도스위칭 시간보다 짧은 주기의 펄스는 무시 스위칭 시간보다 짧은 주기의 펄스는 무시

reject 예약어를 이용하여 펄스 제거 범위(pulse j ti ti ) 설정 가능rejection time) 설정 가능

reject 예약어 다음에 오는 시간 표시가 펄스 제거 범위

펄스 제거 범위 시간보다 짧은 펄스는 제거됨 펄스 제거 범위 시간보다 짧은 펄스는 제거됨

reject 예약어가 없는 경우는 첫번째 after 예약어 다음에 오는 시간 표시가 펄스 제거 범위가 됨

22/93.

Page 12: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

지연 메커니즘지연 메커니즘

관성 지연(i ti l d l )의 예 관성 지연(inertial delay)의 예

Y j 4 A f 10Y <= reject 4 ns A after 10 ns;

delay = 10 ns

reject limit 4 nsA Y

reject limit = 4 ns

5 8 10 25 28 30 45 48

A

Y

20 40

23/93

지연 메커니즘지연 메커니즘

전달 지연(t t d l ) 전달 지연(transport delay) 신호 배정문에서 after 예약어와 transport 예약어를 동

시에 사용하는 경우

순수한 전달 지연을 의미

무한대의 주파수 응답을 가지는 전송 선로를 모델링하기 위한 용도링하기 위한 용도 아무리 짧은 주기의 펄스라도 출력으로 전달

24/93.

Page 13: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

지연 메커니즘지연 메커니즘

전달 지연(t t d l )의 예 전달 지연(transport delay)의 예

Y A f 10Y <= transport A after 10 ns;

delay = 10 nsA Y

5 8 10 25 28 30 45 48

A

Y

15 18 20 35 38 40 55 58

25/93

지연 메커니즘지연 메커니즘

지연 메커니즘을 이용한 신호 배정 예

Output pin <= Input pin ; -- Assignments using delta delay, a)

지연 메커니즘을 이용한 신호 배정 예

p _p p _p ; g g y, )

-- The following three assignments are equivalent to each other:

O t t i < I t i ft 10 b)Output_pin <= Input_pin after 10 ns; -- b)

Output_pin <= inertial Input_pin after 10 ns; -- c)

O t t i < j t 10 i ti l I t i ft 10 d)Output_pin <= reject 10 ns inertial Input_pin after 10 ns; -- d)

-- Assignments with a pulse rejection limit less than the time expression:

O t t i < j t 5 i ti l I t i ft 10 )Output_pin <= reject 5 ns inertial Input_pin after 10 ns; -- e)

-- Assignments using transport delay:

Output_pin <= transport Input_pin after 10 ns; -- f)

-- Their equivalent assignments:

26/93

Output_pin <= reject 0 ns inertial Input_pin after 10 ns; -- g)

Page 14: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

신호 배정문신호 배정문

ff t d 예약어를 이용한 신호 배정문 unaffected 예약어를 이용한 신호 배정문

target <= [ delay_mechanism ] unaffected;

target 신호에 null 문장(null statement)를 배정한 것과같은 의미같은 의미 target 신호가 이전 값을 유지

target 신호에 변화가 생기지 않음

27/93

신호 배정문신호 배정문

ff t d 예약어의 사용 예 unaffected 예약어의 사용 예

result <= detect after 5 ns when strb = ‘0’ else

strb = ‘0’ 이 아닌 경우 result는 이전 값을 유지

unaffected ;

strb 0 이 아닌 경우 result는 이전 값을 유지

위의 코드와 등가 로직

process(strb, detect)

begin

if strb = ‘0’ then

result <= detect after 5 ns ;

else null;

end if ;

28/93

end process;

Page 15: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

신호 배정문신호 배정문

파형 요소( f l t)의 BNF 정의 파형 요소(waveform element)의 BNF 정의

waveform element ::= value expression [ after time expression ]

목표 신호에 파형을 인가하는 방법

_ _ p [ _ p ]

| null [ after time_expression ]

목표 신호에 파형을 인가하는 방법 특정 시간에 특정한 구동값을 인가

value_expression 이용

null 요소를 이용하여 목표 신호에 인가되던 기존의 신호를 특정 시간에 중지 null 이용

경호된 신호(guarded signal)에 대해서만 사용 가능

null 문장의 배정이 아님, null 파형의 배정에 의해서 기존에 인가되던신호의 배정이 중지됨

29/93

신호의 배정이 중지됨

.

신호 배정문신호 배정문

파형 요소( f l t)의 배정 예 파형 요소(waveform element)의 배정 예

Y '0' '1' f 10 '0' f 25Y <= '0', '1' after 10 ns, '0' after 25 ns;

Y

10 25

30/93

Page 16: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)

조건 신호 배정문 ( diti l i l i t)

순차문(sequential statement)

조건 신호 배정문 (conditional signal assignment)target <= delay_mechanism

waveform1 when condition1 else

waveform2 when condition2 else

···

waveformN-1 when conditionN-1 else

waveformN when conditionN;waveformN when conditionN;

target <= delay_mechanism

waveform1 when condition1 else

waveform2 when condition2 else

···

waveformN-1 when conditionN-1 else

waveformN;

31/93

waveformN;

조건 신호 배정문조건 신호 배정문

조건 신호 배정문의 등가 코드 조건 신호 배정문의 등가 코드

if condition1 then

target <= delay_mechanism waveform1;

elsif condition2 then

target <= delay_mechanism waveform2;

···

elsif conditionN-1 then

target <= delay_mechanism waveformN-1;

elsif conditionN then

target <= delay_mechanism waveformN;

end if;

32/93

Page 17: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

조건 신호 배정문조건 신호 배정문

조건 신호 배정문의 등가 코드 조건 신호 배정문의 등가 코드

if condition1 then

target <= delay_mechanism waveform1;

elsif condition2 then

target <= delay_mechanism waveform2;

···

elsif conditionN-1 then

target <= delay_mechanism waveformN-1;

else

target <= delay_mechanism waveformN;

end if;

33/93

조건 신호 배정문조건 신호 배정문

실제 예 왼쪽과 등가인 코드 실제 예

h l “00” l if l “00” h

왼쪽과 등가인 코드

y <= a when sel = “00” else

b when sel = “01” else

h l “10” l

if sel = “00” then y <= a;

elsif sel = “01” then y <= b;

l if l “10” hc when sel = “10” else

d when sel = “11” ;

elsif sel = “10” then y <= c;

elsif sel = “11” then y <= d;

d ifend if;

if l “00” h

y <= a when sel = “00” else

b h l “01” l

if sel = “00” then y <= a;

elsif sel = “01” then y <= b;

l if l “10” hb when sel = “01” else

c when sel = “10” else

d

elsif sel = “10” then y <= c;

else y <= d;

d if

34/93

d ; end if;

Page 18: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

선택 신호 배정문( l t d i l i t) 선택 신호 배정문(selected signal assignment) select 다음에 ? 가 올 경우 case 다음에 ? 가 오는 등가

의 case 문으로 변환 가능

with expression select

target <= delay_mechanism waveform1 when choice_list1,

waveform2 when choice_list2,

···

waveformN-1 when choice_listN-1,

waveformN when choice_listN;

35/93

선택 신호 배정문선택 신호 배정문

선택 신호 배정문의 등가 코드 선택 신호 배정문의 등가 코드case expression is

when choice_list1 =>

target <= delay_mechanism waveform1;

when choice_list2 =>

target <= delay_mechanism waveform2;

···

when choice_listN-1 =>

target <= delay_mechanism waveformN-1;

when choice_listN =>

target <= delay_mechanism waveformN;

end case;

36/93

Page 19: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

선택 신호 배정문선택 신호 배정문

실제 예 왼쪽과 등가인 코드 실제 예 select 다

왼쪽과 등가인 코드

with sel select

"00"

case sel is

when "00" => q <= a;q <= a when "00",

b when "01",

"10"

q ;

when "01" => q <= b ;

when "10" => q <= c ;c when "10",

d when others;

q ;

when others => q <= d ;

end case;;

조건 신호 배정문과 선택 신호 배정문은 병렬문으로만사용되다 2008년 버전부터 순차문으로도 사용할 수 있

37/93

게 됨

순차문(sequential statement)순차문(sequential statement)

변수 배정문의 BNF 정의 변수 배정문의 BNF 정의variable_assignment_statement ::=

[ label : ] simple_variable_assignment

| [ label : ] conditional_variable_assignment

기존의 변수 값에 새로운 변수 값을 인가하는 용도

| [ label : ] selected_variable_assignment

기존의 변수 값에 새로운 변수 값을 인가하는 용도

변수 배정 연산자 “:=“를 이용프로세스문 내부에서 사용 프로세스문 내부에서 사용

부프로그램 내부에서 사용

조건 변수 배정문 선택 변수 배정문은 1076-2008 버전 조건 변수 배정문, 선택 변수 배정문은 1076 2008 버전부터 추가된 사양

38/93

Page 20: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

변수 배정문변수 배정문

단순 변수 배정을 위한 BNF 정의 단순 변수 배정을 위한 BNF 정의simple_variable_assignment ::=

target := expression;

target ::=target ::=

name | aggregate

기존의 소프트웨어 언어에서 사용되는 변수와 같은 의미

변수 배정문의 RHS 식의 계산 결과가 LHS에 즉시 할당 지연 시간, 델타 지연이 없음

시간 지연 없이 계산값이 즉시 할당됨

39/93

변수 배정문변수 배정문

단순 변수 배정의 예 단순 변수 배정의 예

S := A xor B;S : A xor B;

C := A and B;

mem1(0) := "00001000";( )

mem2(0)(7) := '0';

40/93

Page 21: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

변수 배정문변수 배정문

단순 변수 배정의 사용 예 단순 변수 배정의 사용 예

architecture behavioral of variable test is_

signal s : std_logic;

begin

process (a, s)

variable v : std_logic;

begin

s <= not a;

t < tsout <= not s;

v := not a;

vout <= not v;

end process;

41/93

end behavioral;

순차문(sequential statement)순차문(sequential statement)

프로시저 호출문의 BNF 정의 프로시저 호출문의 BNF 정의

procedure call statement ::= [ label : ] procedure call ;procedure_call_statement :: [ label : ] procedure_call ;

procedure_call ::= procedure_name [ ( actual_parameter_part ) ]

프로시저 호출에 의해서 프로시저 본체가 수행됨

호출 이전에 프로시저 본체가 먼저 정의되어 있어야 함 호출 이전에 프로시저 본체가 먼저 정의되어 있어야 함

프로시저 호출문의 위치 프로세스문 내부에 존재 시 : 순차 프로시저 호출문

프로세스문 외부에 존재 시 : 병렬 프로시저 호출문

프로시저 프로시저 이름 : 호출 시 사용될 프로시저 본체를 결정하는 용도

실 매개변수: 프로시저 내부에서 사용되는 실제 매개변수 정보 제공

42/93

실 매개변수: 프로시저 내부에서 사용되는 실제 매개변수 정보 제공

.

Page 22: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로시저 호출문프로시저 호출문

프로시저 호출문의 예

architecture sim of procedure test is

프로시저 호출문의 예

p _

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 ;

43/93

;

순차문(sequential statement)순차문(sequential statement)

if 문의 BNF 정의 if 문의 BNF 정의if_statement ::=

[ if_label : ]

if condition then

sequence_of_statements

{ elsif condition then

sequence_of_statements }

[ else

sequence_of_statements ]

end if [ if_label ] ;

elsif 문은 0 ~ 임의의 개수 만큼 반복 가능

else 문은 안 올수도 있고 나머지 조건에 대한 실행문으

44/93

else 문은 안 올수도 있고 나머지 조건에 대한 실행문으로 마지막에 한 번 올 수 있음

Page 23: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

If 문If 문

if 문의 예

if (ADDR >= "1110000") then

if 문의 예

if (ADDR > 1110000 ) then

ECHO(" ERROR : Illegal read address!");

end if;end if;

count_check :

if (one = '1' and count = 7) then

count := 7; one := '0';

elsif (count = 0) then

count := 15; one := '1';

else

count := count - 1;

45/93

end if count_check;

순차문(sequential statement)순차문(sequential statement)

문의 BNF 정의 case 문의 BNF 정의case_statement ::=

[ case_label : ]

case [ ? ] expression is

case_statement_alternative

{ case_statement_alternative }

end case [ ? ] [ case_label ] ;

case statement alternative ::=

i 이산형 문자형을 원소로 하는 1차원 배열형

case_statement_alternative ::=

when choices => sequence_of_statements

expression: 이산형, 문자형을 원소로 하는 1차원 배열형

? 기호 존재 : 정합 case 문 (1076-2008 버전부터 추가)

46/93

된 사양) – bit, std_ulogic 형의 1차원 배열형

Page 24: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

case 문case 문

문의 예 case 문의 예

case bit_value is

when "0000" => result := '0';

when "0001" => result := '1';

when "0010" => result := '2';

-- 중략

h "1010" > lt 'A'when "1010" => result := 'A';

when "1011" => result := 'B';

when "1100" => result := 'C';when 1100 > result : C ;

when "1101" => result := 'D';

when "1110" => result := 'E';;

when "1111" => result := 'F';

when others => result := 'X';

47/93

end case ;

순차문(sequential statement)순차문(sequential statement)

l 문의 BNF 정의 loop 문의 BNF 정의

loop statement ::=p_

[ loop_label : ]

[ iteration scheme ] loop[ _ ] p

sequence_of_statements

end loop [ loop label ] ;p [ p_ ] ;

iteration_scheme ::=

di iwhile condition

| for loop_parameter_specification

ifi i id ifi di

반복적으로 수행되어야 할 문장들을 구현

parameter_specification ::= identifier in discrete_range

48/93

반복적으로 수행되어야 할 문장들을 구현

Page 25: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

loop 문loop 문

it ti h iteration scheme while, for 를 이용한 반복

없을 경우에는 무한 루프 loop 문 내의 next, exit, return을 통해서 종료

while을 이용하는 경우 condition이 TRUE일 경우 내부 문장 수행 condition이 TRUE일 경우 내부 문장 수행

false일 경우 내부 문장의 수행 없이 loop문이 완료

for를 이용하는 경우 for를 이용하는 경우 루프 변수의 이산값이 미완료일 경우 내부 문장 수행

루프 변수는 이산형이어야 함

loop문의 내부 문장에 의해서 루프 변수값이 변경되어도 안됨

루프 변수의 이산값이 null인 경우 loop 문은 종료

49/93

루프 변수의 이산값이 null인 경우 loop 문은 종료

외부에서 별도의 선언 없이 loop문 내에서 루프 변수 사용.

loop 문loop 문

l 문의 예 loop 문의 예

while (true) loop( ) p

vdclk <= '1' ; wait for 10 ns ;

vdclk <= '0' ; wait for 10 ns ;; ;

end loop;

f i i 'RANGE l f i i 0 t 63 lfor i in rpt'RANGE loop -- for i in 0 to 63 loop

case zbus(i) is

h '1' (i) '1' ft 2when '1' => rpt(i) <= '1' after 2 ns;

when 'H' => rpt(i) <= '1' after 2 ns;

h th (i) '0' ft 2when others => rpt(i) <= '0' after 2 ns;

end case;

d l

50/93

end loop;

Page 26: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

t 문의 BNF 정의 next 문의 BNF 정의

next statement ::=

반복 실행되는 l 문에서 현재 단계의 실행을 완료

_

[ label : ] next [ loop_label ] [ when condition ] ;

반복 실행되는 loop문에서 현재 단계의 실행을 완료

when condition이 사용될 경우 true일 경우 next 다음의 문장들은 무시되고 현재 단계 수행 종료

false일 경우 next 다음의 문장들을 계속 수행

h diti 이 없을 경우 when condition이 없을 경우 next 문을 만나면 다음의 문장들은 무시되고 현재 단계 수행 종료

l l b l loop_label loop_label이 존재할 경우 현재 단계 종료 후 loop_label로 이동

loop label이 없을 경우 가장 안쪽 loop의 시작으로 이동

51/93

loop_label이 없을 경우 가장 안쪽 loop의 시작으로 이동

.

next 문next 문

t 문의 예 next 문의 예outer_loop :

for i in 3 downto 0 loop

inner_loop :

for j in 7 downto 0 loop

next inner_loop when i > j;

mem2 (i) (j) := '0';

end loop;

i > j 조건이 참이 되면 아래의 메모리 초기화를 생략하

end loop;

i > j 조건이 참이 되면 아래의 메모리 초기화를 생략하고 다음의 inner_loop로 실행을 옮김

52/93

Page 27: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

it 문의 BNF 정의 exit 문의 BNF 정의

exit statement ::=

반복 실행되는 l 문에서 현재의 l 문을 종료시킴

_

[ label : ] exit [ loop_label ] [ when condition ] ;

반복 실행되는 loop문에서 현재의 loop문을 종료시킴

when condition이 사용될 경우 true일 경우 해당 loop문의 수행을 종료

false일 경우 exit 다음의 문장들을 계속 수행

h diti 이 없을 경우 when condition이 없을 경우 exit 문을 만나면 해당 loop문의 수행을 종료

l l b l loop_label loop_label이 존재할 경우 해당 loop가 종료

loop label이 없을 경우 가장 안쪽 loop가 종료

53/93

loop_label이 없을 경우 가장 안쪽 loop가 종료

.

exit 문exit 문

it 문의 예 exit 문의 예outer_loop :

for i in 3 downto 0 loop

inner_loop :

for j in 7 downto 0 loop

mem2 (i) (j) := '0';

exit outer_loop when i = 1 and j = 0;

end loop;

i = 1 and j = 0 조건이 참이 되면 전체 loop(outer loop)

end loop;

i 1 and j 0 조건이 참이 되면 전체 loop(outer_loop)를 종료하고 그 다음 문장 실행

54/93

Page 28: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

t 문의 BNF 정의 return 문의 BNF 정의

return statement ::=_

[ label : ] return [ expression ] ;

현재의 실행을 종료시키는 용도

함수나 프로시저 내부에서만 사용 가능 함수나 프로시저 내부에서만 사용 가능 return문을 만나면 해당 함수나 프로시저를 호출한 문장으로 복귀

expression expression 프로시저에서는 expression 부분이 올 수 없음

함수에서는 반드시 expression 부분이 와야 함

함수의 return 형과 일치해야 함

55/93.

return 문return 문

t 문의 예 return 문의 예

function DATA MAX( data a data b : in std logic vector )function DATA_MAX( data_a, data_b : in std_logic_vector )

return std_logic_vector is

beginbegin

if ( data_a > data_b ) then

return data a;return data_a;

else

return data b;return data_b;

end if;

end DATA MAX;end DATA_MAX;

56/93

Page 29: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

순차문(sequential statement)순차문(sequential statement)

ll 문의 BNF 정의 null 문의 BNF 정의

null statement ::=_

[ label : ] null ;

아무런 동작도 수행하지 않는 경우를 나타냄

null literal과의 차이를 구분할 것 null literal과의 차이를 구분할 것 문장과 리터럴의 차이

보통 case문에서 others 예약어와 같이 사용 보통 case문에서 others 예약어와 같이 사용 when others => null;

57/93

null 문null 문

ll 문의 예 null 문의 예

case bit value iscase b t_va ue s

when "0000" => result := '0';

-- 중략중략

when "1111" => result := 'F';

when others => null;

ll 리터럴의 예

when others null;

end case ;

null 리터럴의 예

new NODE'(15 ns null)new NODE (15 ns, null)

new NODE'(Delay => 5 ns, \Next\=> Stack)

58/93

Page 30: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

병렬문(concurrent statement)병렬문(concurrent statement)

병렬문의 종류 병렬문의 종류

concurrent statement ::=_

process_statement

| block statement| _

| concurrent_procedure_call_statement

| concurrent assertion statement| _ _

| concurrent_signal_assignment_statement

| component instantiation statement| p _ _

| generate_statement

59/93

병렬문(concurrent statement)병렬문(concurrent statement)

프로세스문( t t t)의 BNF 정의 프로세스문(process statement)의 BNF 정의

process statement ::=p _

[ process_label : ]

[ postponed ] process [ ( sensitivity list ) ] [ is ][ p p ] p [ ( y_ ) ] [ ]

process_declarative_part

beging

process_statement_part

end [ postponed ] process [ process label ] ;[ p p ] p [ p _ ] ;

process_statement_part ::=

{ i l }{ sequential_statement }

process_declarative_part ::=

{ d l i i }

60/93

{ process_declarative_item }

Page 31: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로세스문프로세스문

프로세스문의 BNF 정의 계속 프로세스문의 BNF 정의 – 계속

process declarative item ::=process_declarative_item ::

subprogram_declaration | subprogram_body | package_body

| package declaration | subprogram instantiation declaration| package_declaration | subprogram_instantiation_declaration

| package instantiation_declaration | type_declaration

| subtype declaration | constant declaration | variable declaration| subtype_declaration | constant_declaration | variable_declaration

| file_declaration | alias_declaration

| attribute declaration | attribute specification| attribute_declaration | attribute_specification

| use_clause | group_template_declaration

| group declaration

신호 선언 불가

| group_declaration

61/93

신호 선언 불가

프로세스문프로세스문

순차적으로 서술할 수 있는 독립구조의 모듈화 순차적으로 서술할 수 있는 독립구조의 모듈화 알고리즘을 표현할 수 있는 도구

프로세스문 자체는 병렬문

프로세스문 내부는 순차문 프로세스문 내부는 순차문

프로세스문의 동작일종의 무한 루프 일종의 무한 루프

감지 리스트 신호의 변화에 의해서 순차문 수행

감지 리스트 시작 부분의 process 예약어 다음에 위치 혹은 시작 부분의 process 예약어 다음에 위치, 혹은

프로세스 내 마지막 순차문으로 서술되는 wait 문에 위치

62/93

.

Page 32: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로세스문프로세스문

프로세스문의 예 왼쪽과 등가인 코드 프로세스문의 예 process 예약어 다음에

왼쪽과 등가인 코드 wait on 다음에p

sensitivity list 위치

가급적 아래의 코드를

sensitivity list 위치

두 서술 기법 중 택일 가급적 아래의 코드를사용할 것

process ( A, B)

process

begin

두 서술 기법 중 택일

process ( A, B)

begin

if A > B then

g

if A > B then

Y <= '0' ; if A B then

Y <= '0' ;

else

;

else

Y <= '1' ; else

Y <= '1' ;

end if;

;

end if;

wait on A, B;

63/93

end if;

end process;

, ;

end process;

프로세스문프로세스문

델타 지연(d lt d l ) 델타 지연(delta delay) 감지 리스트 신호의 변화 무 : 시뮬레이션 타임 진행

감지 리스트 신호의 변화 발생 : 델타 지연으로 모델링

델타 지연 델타 지연 순차문들이 순차적으로 진행

순차문들의 논리적인 실행 순서의 차이를 델타 지연으로 모델링

실제적인 시간 지연은 없음

신호 배정문 : 델타 지연 발생

변수 배정문 : 델타 지연도 발생되지 않음 소프트웨어적인 값의 배정을 의미

64/93.

Page 33: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로세스문프로세스문

프로세스문의 델타 지연 프로세스문의 델타 지연 20 ns : b 신호의 변화 delta cycle : process (a b c) 40 ns : b 신호의 변화

60 ns : a 신호의 변화

delta_cycle : process (a,b,c)

variable x,y,z : std_logic;

begin 60 ns : a 신호의 변화

80 ns : c 신호의 변화

begin

x := a;

y := x;y : x;

b <= y;

c <= b;시간 b c d c < b;

d <= c;

z := y;

시 b c d

20 ns ‘1’ ‘0’ ‘0’

20 ns + ‘1’ ‘1’ ‘0’ z : y;

end process;

20 ns + 1 1 0

20 ns + 2 ‘1’ ‘1’ ‘1’

65/93

프로세스문프로세스문

프로세스문의 델타 지연 프로세스문의 델타 지연

del

ta

elta

elta

elta

시간 a b c d

60 ns ‘1’ ‘0’ ‘0’ ‘0’

de de de

60 ns + ‘1’ ‘1’ ‘0’ ‘0’

60 ns + 2 ‘1’ ‘1’ ‘1’ ‘0’

del

ta

del

ta

del

ta

del

ta 60 ns + 3 ‘1’ ‘1’ ‘1’ ‘1’

20

ns

40 60 80 100 120 140

66/93

Page 34: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로세스문프로세스문

지연된 프로세스( t d ) 지연된 프로세스(postponed process) postponed 예약어가 사용되는 프로세스

다음 사이클이 델타 지연이 아닐 경우만 실행 재개

현재 단계에서의 최종 델타 지연값만 가짐 현재 단계에서의 최종 델타 지연값만 가짐

델타 지연을 일으키는 문장은 사용 불가 after 예약어가 없는 경우 사용 불가 after 예약어가 없는 경우 사용 불가

논리 합성의 의도는 없음

비지연 프로세스 비지연 프로세스 일반적인 프로세스

모든 단계에서의 델타 지연값을 가짐

67/93.

프로세스문프로세스문

지연된 프로세스( t d ) 지연된 프로세스(postponed process) 최종 델타값만을 가짐

elta

de

시간 a b c d

60 ns ‘1’ ‘0’ ‘0’ ‘0’

del

ta

del

ta

del

ta 60 ns + ‘1’ ‘1’ ‘0’ ‘0’

60 ns + 2 ‘1’ ‘1’ ‘1’ ‘0’

elta

elta

del

ta

del

ta

60 ns + 3 ‘1’ ‘1’ ‘1’ ‘1’

20

d

ns

40

d

60

d

80

d

100 120 140

68/93

20 40 60 80 100 120 140

Page 35: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

프로세스문프로세스문

지연된 프로세스의 예 지연된 프로세스의 예

postponed process (A, B)p p p ( , )

begin

if ( A = B) then( )

Z <= '1' after 2 ns;

else

Z <= '0' after 2 ns;

end if;;

end postponed process;

69/93

병렬문(concurrent statement)병렬문(concurrent statement)

블록문(bl k t t t)의 BNF 정의 블록문(block statement)의 BNF 정의

block statement ::=_

block_label :

block [ ( guard condition ) ] [ is ][ ( g _ ) ] [ ]

block_header

block declarative part_ _p

begin

block statement part_ _p

end block [ block_label ] ;

반복되는 구조의 모듈화에 주로 사용

70/93

Page 36: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

블록문(block statement)블록문(block statement)

블록문(bl k t t t)의 BNF 정의 계속 블록문(block statement)의 BNF 정의 - 계속

block statement part ::=block_statement_part ::=

{ concurrent_statement }

block_header ::=

[ generic_clause ]

[ generic_map_aspect ; ]

[ port_clause ]

[ port_map_aspect ; ]

block declarative part ::=block_declarative_part ::=

{ block_declarative_item }

71/93

블록문(block statement)블록문(block statement)

블록문(bl k t t t)의 BNF 정의 계속 블록문(block statement)의 BNF 정의 - 계속

block declarative item ::=block_declarative_item ::=

subprogram_declaration | subprogram_body | package_body

| subprogram instantiation declaration | package declaration| subprogram_instantiation_declaration | package_declaration

| package_instantiation_declaration | shared_variable_declaration

| type declaration | subtype declaration | constant declaration| type_declaration | subtype_declaration | constant_declaration

| signal_declaration | file_declaration | alias_declaration

| component declaration | attribute declaration| component_declaration | attribute_declaration

| attribute_specification | configuration_specification

| disconnection specification | use clause| disconnection_specification | use_clause

| group_template_declaration | group_declaration

72/93

Page 37: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

블록문(block statement)블록문(block statement)

bl k h d block header 블록의 외부 인터페이스를 표현

포트와 제네릭 선언 사용 가능

block declarative part block declarative part 프로세스 선언부와 비슷한 형식

아키텍처 선언부와 일치 아키텍처 선언부와 일치 신호, 공유 변수(shared variable) 선언 가능

콤포넌트 선언 가능 콤포넌트 선언 가능

block declarative part 병렬문으로 구성

73/93.

블록문(block statement)블록문(block statement)

블록문의 예 블록문의 예

fifoWrCntrl: block

signal flushFifoSync: std_logic;

begin

flush_gen: process (synclk, reset_syn_n)

begin

-- 중략

end process;

write_address_gen: process (synclk, reset_syn_n)

begin

-- 중략

end process;

74/93

end block;

Page 38: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

블록문(block statement)블록문(block statement)

경호 조건( d diti ) 경호 조건(guard condition) boolean형의 guard 신호가 암시적으로 선언됨

guard 신호를 이용하여 block 내의 동작 제어

경호 조건 값이 guard 신호값을 정의 경호 조건 값이 guard 신호값을 정의

guarded 예약어를 사용하는 신호에 적용

d d 예약어를 사용하는 신호 guarded 예약어를 사용하는 신호 guard 신호가 암시적으로 선언됨

guard 신호에 경호 조건이 암시적으로 배정됨

프로세스문의 감지 리스트에 guard 신호가 선언된 것처 프로세스문의 감지 리스트에 guard 신호가 선언된 것처럼 동작

75/93.

블록문(block statement)블록문(block statement)

경호 조건을 이용하는 블록문의 예 경호 조건을 이용하는 블록문의 예

entity latch is

port(d, en : in bit; q : out bit);

end latch;

architecture behave of latch is

begin

latch_blk : block (en = '0') is

signal s : bit;

begin

s <= guarded d;

q <= s;

end block latch_blk;

76/93

end behave;

Page 39: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

블록문(block statement)블록문(block statement)

앞장의 l t h blk 블록문과 등가인 코드 앞장의 latch_blk 블록문과 등가인 코드latch_blk : block (en = '0') is

signal s : bit;

-- signal guard : boolean;

begin -- guard <= (en = '0');

process (d, guard)

latch_blk : block (en = '0') is

signal s : bit;

begin

if guard then

begin

s <= guarded d;

s <= d;

end if;

q <= s;

end block latch_blk;

end process;

q <= s;

77/93

end block latch_blk;

병렬문(concurrent statement)병렬문(concurrent statement)

병렬 프로시저 호출문의 BNF 정의 병렬 프로시저 호출문의 BNF 정의

concurrent_procedure_call_statement ::=

내부에 순차 프로시저 호출문을 가진 프로세스와 동일

[ label : ] [ postponed ] procedure_call ;

내부에 순차 프로시저 호출문을 가진 프로세스와 동일

병렬 프로시저 호출문의 예

CheckTiming (tPLH, tPHL, Clk, D, Q); -- 병렬 프로시저 호출문

process (Clk, D, Q ) – 등가의 순차 프로시저 호출문

beginbegin

CheckTiming (tPLH, tPHL, Clk, D, Q);-- tPLH, tPHL is constant.

end process;

78/93

end process;

Page 40: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

병렬문(concurrent statement)병렬문(concurrent statement)

병렬 주장문의 BNF 정의 병렬 주장문의 BNF 정의

concurrent assertion statement ::=concurrent_assertion_statement ::

[ label : ] [ postponed ] assertion ;

assertion ::=

assert condition

[ report expression ]

[ severity expression ]

내부에 순차 주장문을 가진 프로세스와 동일

79/93

병렬문(concurrent statement)병렬문(concurrent statement)

병렬 신호 배정문의 BNF 정의 병렬 신호 배정문의 BNF 정의

concurrent signal assignment statement ::=concurrent_signal_assignment_statement ::

[ label : ] [ postponed ] concurrent_simple_signal_assignment

| [ label : ] [ postponed ] concurrent_conditional_signal_assignment

| [ label : ] [ postponed ] concurrent_selected_signal_assignment

concurrent simple signal assignment ::=concurrent_simple_signal_assignment ::

target <= [ guarded ] [ delay_mechanism ] waveform ;

concurrent_conditional_signal_assignment ::=_ _ g _ g

target <= [ guarded ] [ delay_mechanism ] conditional_waveforms ;

concurrent_selected_signal_assignment ::=

with expression select [ ? ]

target <= [ guarded ] [ delay_mechanism ] selected_waveforms ;

80/93

내부에 순차 신호 배정문을 가진 프로세스와 동일

Page 41: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

병렬 신호 배정문병렬 신호 배정문

병렬신호배정문의 예 왼쪽과 등가인 코드 병렬신호배정문의 예 왼쪽과 등가인 코드

X <= A and B;process ( A, B)

begin

Y <= A and B;X <= A and B;

end process;

process ( A, B)

begin

Y <= A and B;

end process;

81/93

병렬문(concurrent statement)병렬문(concurrent statement)

콤포넌트 실체화문의 BNF 정의 콤포넌트 실체화문의 BNF 정의

component_instantiation_statement ::=

instantiation_label :

instantiated_unit

[ generic_map_aspect ]

[ port_map_aspect ] ;

instantiated unit ::=instantiated_unit ::

[ component ] component_name

| entity entity name [ ( architecture identifier ) ]| entity entity_name [ ( architecture_identifier ) ]

| configuration configuration_name

82/93

Page 42: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

콤포넌트 실체화문콤포넌트 실체화문

콤포넌트 실체화문의 BNF 정의 계속 콤포넌트 실체화문의 BNF 정의 - 계속

generic_map_aspect ::=

generic map ( generic_association_list )

port_map_aspect ::=

port map ( port association list )port map ( port_association_list )

association_list ::=

association_element { , association_element }

association element ::=association_element ::

[ formal_part => ] actual_part

83/93

콤포넌트 실체화문콤포넌트 실체화문

콤포넌트의 입출력 신호들과 다른 내부 신호들의 콤포넌트의 입출력 신호들과 다른 내부 신호들의연결 관계를 정의 먼저 아키텍처 선언부에서 사용할 콤포넌트를 선언

아키텍처 문장부에서 콤포넌트 실체화문을 사용 아키텍처 문장부에서 콤포넌트 실체화문을 사용

콤포넌트의 입출력 신호와 설계 엔티티 내의 입출력 신호 내부 신호들과의 연결 관계를 정의호, 내부 신호들과의 연결 관계를 정의 generic map aspect : 제네릭 신호들의 연결 관계 정의

port map aspect : 포트 신호들의 연결 관계 정의p p p

84/93.

Page 43: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

콤포넌트 실체화문콤포넌트 실체화문

콤포넌트 실체화문의 예 콤포넌트 실체화문의 예

U0: FullAdder1

port map (X=>DA(0), Y=>DB(0), Cin=>Ci, Cout=>t(1), Sout=>S(0));

C0: cpu_model

generic map ("code rom.txt")ge e c p ( code_ o . )

port map (

reset n => reset n, ncs => host nCS, nd stb => host nD STB,ese _ ese _ , cs os _ CS, d_s b os _ _S ,

cpu_addr => host_addr(10 downto 1), rnw => host_RnW,

cpu data => host data(15 downto 0), ready => host Ready,cpu_d os _d ( 5 dow o 0), e dy os _ e dy,

ndma_req => ndma_req, ndma_ack => nDMA_ACK,

nirq => nIRQ);

85/93

q Q);

콤포넌트 실체화문콤포넌트 실체화문콤포넌트의 연결 콤포넌트의 연결 콤포넌트의 형식 매개변수를 실 매개변수에 연결

형식 매개변수 : formal parameter 콤포넌트 선언에 사용되는 매개변수

함수나 프로시저의 경우 해당 부프로그램 선언에 사용되는 매개변수

실 매개변수 : actual parameter 콤포넌트에 연결되는 매개변수

콤포넌트의 연결 방식 위치 연결(positional association)

콤포넌트 선언에 사용된 형식 매개변수 위치에 실 매개변수를 대응

이름 연결(named association) 선언된 위치에 무관하게 형식 매개변수에 대응되는 실 매개변수를 연결

86/93 두 방법을 모두 적용시킨 방법을 추천

.

Page 44: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

콤포넌트 실체화문콤포넌트 실체화문

콤포넌트의 연결 예 콤포넌트의 연결 예

component half_adder

port ( a, b: in std_logic;

s, c : out std_logic);

end component;

-- 중략

U0 : half_adder port map (a=>A, b=>B, s=>open, c=>open); -- recommended

U1 : half_adder port map (s=>open, a=>A, b=>B, c=>open); -- OK

U2 : half_adder port map (A, B, open, open); -- OK

U3 : half_adder port map (B, A, open, open); -- possibly malfunction

U4 : half_adder port map (A, open, B, open); -- error

87/93

병렬문(concurrent statement)병렬문(concurrent statement)

생성문의 BNF 정의 생성문의 BNF 정의

generate_statement ::=

for_generate_statement

| if_generate_statement

| case_generate_statement

for_generate_statement ::=

generate label :generate_label :

for generate_parameter_specification generate

generate statement bodygenerate_statement_body

end generate [ generate_label ] ;

88/93

Page 45: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

생성문생성문

생성문의 BNF 정의 계속 생성문의 BNF 정의 - 계속

if_generate_statement ::=

generate_label :

if [ alternative_label : ] condition generate

generate_statement_body

{ elsif [ alternative_label : ] condition generate

generate_statement_body }

[ else [ alternative_label : ] generate

generate_statement_body ]

end generate [ generate_label ] ;

89/93

생성문생성문

생성문의 BNF 정의 계속 생성문의 BNF 정의 - 계속

case_generate_statement ::=

generate_label :

case expression generate

case_generate_alternative

{ case_generate_alternative }

end generate [ generate_label ] ;

case_generate_alternative ::=

when [ alternative label : ] choices =>when [ alternative_label : ] choices

generate_statement_body

90/93

Page 46: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

생성문생성문

생성문의 BNF 정의 계속 생성문의 BNF 정의 – 계속

t t t t b dgenerate_statement_body ::=

[ block_declarative_part

b i ]begin ]

{ concurrent_statement }

[ d [ lt ti l b l ] ][ end [ alternative_label ] ; ]

label ::= identifier

반복 구조와 조건적인 분기 구조를 이용한 정교화( )(elaboration) 매커니즘

이를 이용한 효율적인 회로 서술 도모

91/93

생성문생성문

생성문의 예 생성문의 예

Gen: blockGen: block

begin

L1: CELL port map (Top Bottom A(0) B(0));L1: CELL port map (Top, Bottom, A(0), B(0));

L2: for I in 1 to 3 generate

L3: for J in 1 to 3 generateL3: for J in 1 to 3 generate

L4: if I+J>4 generate

L5: CELL port map (A(I 1) B(J 1) A(I) B(J));L5: CELL port map (A(I-1),B(J-1),A(I),B(J));

end generate;

end generate;end generate;

end generate;

end block Gen;

92/93

end block Gen;

Page 47: 5. 순차문과병렬문 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL05_full.pdf ·  · 2014-03-26심각수준값이fil ... report" Unstable ouput of SR-FF due to nCS and ready at

생성문생성문

반복 구조의 생성문 표현 예 반복 구조의 생성문 표현 예

반복 구조의 예-- 반복 구조의 예

U0: FullAdder1 port map (X=>A(0), Y=>B(0), Cin=>Ci, Cout=>t(1), Sout=>S(0));

U1: FullAdder1 port map (X=>A(1) Y=>B(1) Cin=>t(1) Cout=>t(2) Sout=>S(1));U1: FullAdder1 port map (X >A(1), Y >B(1), Cin >t(1), Cout >t(2), Sout >S(1));

U2: FullAdder1 port map (X=>A(2), Y=>B(2), Cin=>t(2), Cout=>t(3), Sout=>S(2));

U3: FullAdder1 port map (X=>A(3), Y=>B(3), Cin=>t(3), Cout=>Co, Sout=>S(3));

-- 반복 구조의 생성문 표현 예

gen0 : for i in 0 to 3 generate

U0: FullAdder1 port map

(X A(i) Y B(i) Ci (i) C (i 1) S S(i))(X=>A(i), Y=>B(i), Cin=>t(i), Cout=>t(i+1), Sout=>S(i));

end generate ;

t(0) <= Ci; Co <= t(4);

93/93

t(0) <= Ci; Co <= t(4);