전공지식정리/디지털시스템설계

VHDL5. 고급문법(구조 내부의 detail)

TimeSave 2020. 12. 8. 23:23

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