1. declaration( = 선언)
; designator(지정어)를 named entity에 연결시키는 작업.
1.1 designator
; identifier(식별어) + operator symbol(연산자 기호)
+ character literal(문자 리터럴)를 총칭하는 말.
1.2 named entity(=네임드엔티티)
; declaration 정의하는 개별 entity
ex) entity, architecture, 구성, procedure, function, package, 형, 특수형, 신호, 상수, 변수, 파일, component, literal, 그룹 등등..
1.3 ex) 실제적인 선언 예
실제적인 선언의 예
1.4 type declaration(= 형 선언) bnf와 예
type declaration bnf
type declaration ex.
1.5 subtype declaration (= 특수형 선언)
subtype declaration bnf
subtype 예
1.6 Object(객체)
- 특정 type(형)과, type 범위의 value를 가지는
- named entity(네임드 엔티티)
ex1)
- 객체 선언에 의해서 선언된 객체
- loop문이나 생성문의 매개변수
- 부프로그램의 형식 매개변수
- 엔티티 선언에서 사용되는 포트
- 엔티티 선언에서 사용되는 제네릭 상수
- 콤포넌트 선언에서 사용되는 포트
- 콤포넌트 선언에서 사용되는 제네릭 상수
- 블록문의 경호절에서 선언된 GUARD 신호
ex2) 네임드 엔티티는 아니지만 객체가 되는 예
- 미리 정의된 속성 중
‘Delayed, ‘Stable, ‘Quiet, ‘Transaction 속성에 의해
암시적으로 정의되는 신호
- 다른 객체의 원소
- 접근형 값에 의해서 지정되는 객체
1.6.1 객체 클래스의 분류
- constant(=상수) : 초기값을 배정하면서 이 값이 바뀌지 않음
- signal(=신호) : 아키텍처 선언부에서 선언되며 신호 배정문을 이용
- variable(=변수) : 프로세스 선언부에서 선언되며 변수 배정문을 이용
- file(=파일) : 파일 형태의 데이터를 처리하는 용도로 사용
1.6.2 객체 선언
1.6.2.1constant declaration(= 상수 선언) bnf와 예
- deferred constant (=유예 상수)
; 초기화 되지 않는 상수
; 패키지 선언에서만 가능, 본체에서는 반드시 상수 값을 배정 해야 함
.2 variable declaration(= 변수 선언)
- shared variable(= 공유변수)
; 여러 개의 프로세스가 공유하는 변수.
- 보호형(protected type)
- 아키텍처 선언부에서 정의.
.3 file declaration (= 파일선언) bnf 와 예시
- subtype indication : 파일형이 와야 함
- file open kind expression : 없을 경우 read_mode
- file logical name : 스트링 표현이 와야 함
- 호스트 컴퓨터 파일 시스템 내의 파일을 지정
.4 signal declaration(= 신호 선언) bnf와 예
- expression: 초기값의 배정 용도
=> 논리 합성이 안되니 시뮬레이션 용도로만 사용할 것
.4.1 signal kind(=신호 유형)
.4.1.1 bus : 컴퓨터 구조의 버스와 같은 하드웨어를 표현
- 다중 신호들이 연결되는 버스 구조 표현
- resolution function(=해결함수)에 의해, 경호된 신호값 결정
- 엔티티 선언 시 포트 부분에 사용 가능
.4.1.2 register : 다중 배정이 가능한 저장 장치를 표현
- 다중 신호 배정이 가능한 소프트웨어 모델
- 연결이 끊어 졌을 경우 이전 값을 유지
- 포트 사용이 불가능하고 내부 신호로만 사용
.4.2 guarded signal(=경호된 신호)
; 선언시 신호 유형(signal kind)이 bus나 register로 선언된 신호
-> signal kind 부분이 없는 경우가 일반적, 이런 신호를 무경호 신호
(unguarded signal)라 함
-> 해결된 신호(resolved signal)형에 대해서 guarded signal 선언 가능
.4.2.2 guarded signal 사용
- 경호 조건(guard condition)에 의해서만 값이 배정 가능
- boolean형의 guard 신호가 암시적 혹은 명시적으로 선언
- 이 guard 신호에 의해서 제어됨
.4.2.3 경호된 신호/ 무경호 신호
경호 조건이 TRUE에서 FALSE로 변경될 때 발생
- 무경호 신호
-> TRUE 경호조건:입력 신호의 변화가 무경호 신호에 배정
=> 경호 조건이 FALSE로 변경 이후
==> 변경 순간의 값을 유지, 입력 신호의 변화는 무시
- 경호된 신호
-> TRUE 경호조건:입력 신호의 변화가 경호된 신호에 배정
=> 경호 조건이 FALSE로 변경 이후
==> 경호된 신호와 입력 신호와의 연결이 끊김 ,다른 입력 신호가 경호된 신호에 제어권을 가질 수 있음
.4.2.4 disconnect time(분리 시간)
; 경호된 신호와 입력 신호의 분리 시점을 조정
-> 경호된 신호 선언 이후 disconnect 예약어를 이용해서 정의.
-> 미 선언시 delta delay(델타 지연)
분리 시간 선언 예
분리시간 선언의 실제 예
경호 조건이 TRUE가 될 때
-> d_in 신호의 변화가 2 ns 지연 되어서 guarded_signal 신호에 배정
경호 조건이 FALSE가 될 때
-> FALSE로 변경되는 순간의 입력이 10 ns 동안 유지
-> 10 ns 이후 guard_signal과 d_in 신호와의 연결이 끊김
경호조건의 실제 예
경호조건의 실제 예
경호조건의 실제 예
1.7 Component 선언
; 콤포넌트 실체화문에서 사용되는 콤포넌트 외부와의 인터페이스를 선언
-> 선언 이전에 해당 콤포넌트의 설계 엔티티가 존재해야 함
-> 설계 엔티티, 엔티티 선언의 generic 선언, port 선언과 일치
1.8 Group template(그룹 틀) 선언
; 그룹으로 같이 존재할 수 있는 named entity 종류를 선언.
=> entity를 그룹으로 묶는건가?????
-> entity 개수, 해당위치에서의 entity 종류로 구분
-> ' <> ' : 해당 위치에 0개 이상의 entity가 그룹으로 올 수 있음.
그룹 틀 선언의 예
1.9 그룹 선언
네임드 엔티티들의 모임을 새로운 이름으로 지정
-> group constituent list : 그룹틀 선언에서 사용된 entity class list와 같은 종류가 와야 함
-> 공통되는 성질들을 하나의 그룹으로 관리
-> C언어의 structure 같은 느낌?
그룹 선언의 예
==> 그룹틀로 선언할 수 있는 그룹 형태를 선언한다. 그후 그룹틀을 이용해 그룹을 선언한다.
1.10 alias(=가명) 선언
; 기존 named entity의 다른 이름을 선언
=> 프로그램의 가독성이 올라감
=> named entity에 접근하는 별개의 경로를 제공
가명선언 사용 예
1.10.1 벡터신호 가명선언
가명선언 사용 예
-> 벡터 신호의 일부분에 별도의 이름 부여
-> 긴 경로명을 단순한 이름으로 정의
-> 복잡한 함수명을 간단한 이름으로 명명.
ex)
벡터 신호 가명 선언 예
가명 선언을 활용하지 않은 코드
가명 선언을 활용한 코드(위의 코드와 등가)
=> 코드에 의미 부여. 가독성 증가.
1.10.2 가명 선언이 제한되는 네임드 엔티티들
-> 레이블, 루프 매개변수, 생성문 매개변수
-> 이 외의 모든 네임드 엔티티에 대해서 가명 선언
alias designator 부분이 name[signature] 부분의 새로운 이름이 됨
1.10.3 object alias(= 객체 가명화)
-> name 부분이 신호, 변수, 상수, 파일인 경우
-> signature 부분이 올 수 없음
1.10.4 non-object alias (= 비객체 가명화)
객체 가명화 이외의 가명화 : name 부분이 객체가 아님
-> subtype indication 부분이 올 필요 없음
-> 부프로그램이나 열거형 리터럴에 대한 가명화의 경우 signature 부분이 와야 함
ex)
2.1 Attribute(=속성)
2.1.1 네임드 엔티티들이 가지는 속성
; 값, 함수, 형, 범위, 신호, 상수
-> value, function, type, range, signal, constant
ex) 스칼라 형 : HIGH 속성은 해당 스칼라형의 최대값을 가짐
이산형 : POS(V) 함수 속성은 V값의 위치정보를 리턴
2.1.2 속성의 분류
- predefined attribute(=미리 정의된 속성)
; 약 40개의 속성이 미리 정의
- user-defined attribute(=사용자 정의 속성)
; 사용자의 필요에 의해서 정의
2.1.3 user-defined attribute(=사용자 정의 속성)
- designator : 사용자가 정의하는 속성의 이름
- type mark : 속성의 형을 정의 ,
접근형, 파일형, 보호형, 접근형,
복합형(= 접근형을 원소로 가짐)이 올 수 없음
2.1.4 사용자 정의 속성의 사용
-> VHDL 개발 도구 정보를 효과적으로 표현 가능
-> 속성 선언과 함께 속성 명세 작업 필요
2.1.4.1 속성 명세
- 사용자가 정의한 속성을 하나 이상의 네임드 엔티티와 연결시키는 작업 수행 ; 해당 엔티티에 속성 값을 정의
- 속성 명세는 속성 선언 바로 다음에 와야 함
- 속성 명세 과정은 사용자 정의 속성에 대해서만 허용
ex) 속성 선언 및 명세
2.1.4.2 entity name list
; 속성이 연결될 네임드 엔티티
- 명시적으로 지정된 경우
-> 해당 네임드 엔티티에 대해 속성 연결 작업 수행
- others 예약어가 사용된 경우
-> 같은 엔티티 클래스에 대해 속성 선언부에서 선언되고 명세 과정에서
언급되지 않은 모든 네임드 엔티티에 대해 속성 명세 작업 수행
- all 예약어가 사용된 경우
-> 같은 엔티티 클래스에 대해 앞서 선언된 모든 네임드 엔티티에 대해 속
성 명세 작업 수행
- others, all 예약어가 사용된 경우의 주의점
-> 주어진 엔티티 클래스의 제일 마지막에서 명세를 해야함
2.1.5 미리 정의된 속성
2.1.5.6 속성이름
- 속성 이름을 이용하여 실제적인 속성을 표현
-> 속성 선언 및 명세화된 속성을 호출하는 방법
-> 값, 함수, 형, 범위, 신호, 상수를 표현
-> 사용자 정의 속성에서는 상수만을 표현
ex)
2.1.5.7 미리 정의된 속성
; 활용도가 높은 속성들을 미리 정의해 둠
38개의 속성 지정어(attribute designator)를 가짐
- prefix 위치의 네임드 엔티티 분류
1. 형(type) : T로 표현
2. 객체(object) : O로 표현
3. 배열(array) : A로 표현
4. 신호(signal) : S로 표현
5. 기타 네임드 엔티티(named entity) : E로 표현
ex)
속성이 표현하는 값들의 분류
type attribute : 형의 이름을 리턴
value attribute : 상수값을 리턴
function attribute : 값을 리턴하는 함수를 호출
signal attribute : 새로운 신호를 생성
range attribute : 값의 범위를 리턴
1. 형 => prefix T
1.1 T’BASE
T : 임의의 형이나 특수형이 옴
T형에 대한 기본형을 출력
자체로 표현식이 될 수 없고 다른 속성의 접두어로 사용
ex)
sub_primitives'BASE'RIGHT
sub_primitives 특수형의 기본형 gfx_primitives의
RIGHT 값인 srcblt 값을 출력
1.2 T’LEFT
T : 스칼라형이나 스칼라 형의 특수형이 옴
스칼라형의 왼쪽 끝값을 출력
gfx_primitives‘LEFT
제일 왼쪽 값인 point 출력
1.3 T’HIGH
T : 임의의 형이나 특수형이 옴
스칼라형의 최대값을 출력
T가 열거형인 경우 왼쪽값이 최소, 오른쪽값이 최대
T가 수치형인 경우 to를 사용할 때에는 왼쪽값이 최소,
downto를 사용할 경우에는 왼쪽값이 최대
위의 예에서는 다음 조건을 만족
input range'LEFT = 0 = input range'LOW
input_range'RIGHT = 15 = input_range'HIGH
reverse range'LEFT = 15 = reverse range'HIGH
reverse_range'RIGHT = 0 = reverse_range'LOW
1.4 T’POS(X)
T : 이산형, 물리형이나 이들의 특수형이 옴
X : T와 같은형의 표현식이 옴
X의 위치정보 출력
gfx_primitives'POS(rect)
rect 의 위치 정보인 1을 출력
point의 위치 정보는 0이며 오른쪽 값들은 1씩 증가
1.5 T’VAL(X)
T : 이산형, 물리형이나 이들의 특수형이 옴
X : 정수형의 표현식이 옴
X의 위치에 있는 값을 출력
gfx_primitives‘VAL(3)
위치 정보 3을 갖는 text2를 출력
2. A
2.1 A’LENGTH[(N)]
A : 배열형이 옴
N : 배열의 차원값이 오며 기본값은 1
배열 A의 N번째 차원 값의 길이를 출력
rom_word'LENGTH
1차원 배열의 길이 8을 출력
2.2 A’RANGE[(N)]
A : 배열형이 옴
N : 배열의 차원값이 오며 기본값은 1
배열 A의 N번째 차원의 범위 값을 출력
rom_word‘RANGE
1차원 배열의 범위 값인 7 downto 0 를 출력
3.S
3.1 S'DELYED[(T)]
S : 신호의 이름이 옴
T : TIME형의 표현식이 오며 생략된 경우에는 0 ns 의미
S신호가 T시간동안 지연된 신호가 출력됨
속성값으로 출력된 신호에 대해서는 새로운 값의 배정은
불가
sel'DELAYED(7 ns)
신호 sel 이 7 ns 지연된 신호가 출력됨
3.2 S‘EVENT
S : 신호의 이름이 옴
현재의 시뮬레이션 사이클에서 이벤트가 발생하면
TRUE를 리턴하고 아닌 경우 FALSE를 리턴
플립플롭의 모델링에 많이 사용
클럭 신호에 이벤트가 발생하고 이때 클럭 값이 ‘1’ 인
경우 if 조건이 TRUE가 됨
즉 클럭 신호의 상승 에지에서만 입력 신호가 출력으로 전달
출처 : http://dasan.sejong.ac.kr/~dihan/vhdl.htm
'전공지식정리 > 디지털시스템설계' 카테고리의 다른 글
VHDL7. 조합회로 (0) | 2020.12.08 |
---|---|
VHDL6. 해석 및 정교화, 표현식 (0) | 2020.12.08 |
VHDL4.부프로그램(Sub program) ,패키지 (0) | 2020.12.08 |
VHDL 3.병렬문 (0) | 2020.12.08 |
VHDL2.순차문 (0) | 2020.12.08 |