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

VHDL4.부프로그램(Sub program) ,패키지

TimeSave 2020. 12. 8. 23:22

1. Subprogram(= 부프로그램)
 ;  function(함수) & procedure(프로시저)의 총칭
 -> 별도의 모듈, 특정 값 계산.
 -> 반복 동작을 표현.

2. Subprogram 구조
 2.1 Declaration(선언) ; 호출방법 정의
 2.2 Body (본체) ; 동작내용 서술

3. 함수/프로시저
 3.1 function
   -> 'in' mode(형식 매개변수)
   -> 리턴값 사용
   -> 호출은 하나의 표현식(expression)을 구성.
   -> 특정 값을 계산/동작을 표현

 3.2 Procedure
 -> in/ inout/ out mode(형식 매개변수)
-> return값 X => 형식 매개변수의 out모드.
 -> 호출은 statement를 구성
 -> 특정 값의 계산이나 동작을 표현.

4. Subprogram 선언

ex)

4.1 일반적인 선언
 4.1.1 프로시저
 ; procedure + 지정어 + 형식 매개변수
 4.1.2 함수
 ; function + 지정어 + 매개변수 선언 + return + 리턴형
  -> 지정어 자리에 연산자가 올 수 있음

  4.1.2.1 pure function : 순수 함수
      -> 같은 매개변수 입력에 같은 값 리턴
      -> 함수의 기본값으로 pure(예약어) 생략 가능
 4.1.2.2 impure function : 비순수 함수
      -> 같은 매개변수 입력에 다른 값 리턴
                => 예 : 현재의 시간을 리턴하는 함수
      -> impure(예약어)를 반드시 사용

4.2 Formal parameter(형식매개변수)의 class
 - file 
      => 입출력 관련 모드 정보 필요X
 - constant,signal,variable
      => 사용환경에 의해 결정

4.3 Formal parameter(형식매개변수)의 mode
 4.3.1 프로시저
   -> in, inout, out
   -> in의 기본 클래스 : constant 
   -> inout, out의 기본 클래스 : variable
   
 4.3.2 함수
 -> in
 -> 클래스 미지정 시, default는 constant

5. Subprogram Body(본체)
; Signal(신호), shared variable(공유변수) 선언 불가

- ex)


7. 부프로그램 활용 설계 예 : 반가산기

7.1 함수 이용

7.2 프로시저 이용



8. Subprogram overloading(부프로그램 오버로딩)
서로 다른 시그니처를 이용, 하나의 지정어를 여러 부프로그램에서 사용 하는 것.[?]

8.1 시그니처(signature)
- 지정어(designator)
- 형식 매개변수의 개수
- 형식 매개변수들의 형과 순서
- 함수인 경우 리턴값의 형

8.2 연산자 오버로딩(operator overloading)
; 함수 선언 시 지정어가 연산자일 경우 => 연산자 오버로딩 이용 가능[?]


8.3 ex)Subprogram overloading 예, Call(호출) 예

9. Resolution function(해결함수)
; 하나의 신호에 여러 개의 소스로부터 값이 입력될 때 최종적으로 하나의 값으로 조정해주는 함수  -> 다중 신호 배정 문제의 해결 방법 제공

ex)
- 연결 논리합(wired-OR), 버스 구조에 많이 사용 
- 대표적인 해결 함수 : std_logic_1164패키지의 resolved function

9.1 Resoloved signal(해결된 신호)
; 해결 함수가 선언 된 신호. ex) std_logic

9.2 ex)해결함수

ex2) std_logic신호 정의.

10. Package(패키지)
; 단일 목적을 위한 선언(declaration)들의 모임
-> 공통적으로 사용되는 선언이나 자원을 공유하기 위한 용 도
-> 자주 사용되는 부프로그램들을 패키지로 관리

10.1 패키지의 구조 (선언 +본체)
-  패키지 선언(subprogram declaration)
      ; 패키지의 가시적인 부분 정의  
      ; 패키지 선언으로 완료되고 본체 부분이 필요 없을 수도 있음

-  패키지 본체(subprogram body) 
   ; 부프로그램의 숨겨진 동작을 처리

 - VHDL 표준 라이브러리 제공 패키지
 -> standard(자동 선언), textio, env, std_logic_1164, std_logic_arith
 , std_logic_signed, std_logic_unsigned, std_logic_textio
 , std_logic_misc

10.2 Package declaration(패키지 선언)

- ex)

10.3 Package body(패키지 본체)

10.3.1 패키지 선언 내의 선언
 ; 본 패키지를 사용하는 모든 설계 단위에서 사용 가능

10.3.2 패키지 본체 내의 선언
 ; 패키지 본체 내부에서만 사용. 패키지 밖에서는 보이지 않음.

10.3.3 ex)패키지 본체

11. 설계 라이브러리
11.1 VHDL 라이브러리 구조

11.2 Design unit(= 설계 단위)
 = 독립적으로 컴파일,관리 되는 서술내용
   ex)엔티티 선언, 아키텍처 본체, 구성선언, 패키지 본체 등..
- Design file 형성 (설계 단위 가 1개~ 수십개가 모인 것)

11.3 Design library(= 설계 라이브러리)
= 컴퓨터 파일 시스템 내의 저장 장소
- 컴파일 된 design unit은 design library에 저장 됨.
   -> VHDL 문법과 무관
   -> VHDL 개발 환경별로 정의

ex) design file의 bnf

11.3.1 library unit(라이브러리 단위)
= 문장 서술 순서에 따라 해석되고 컴파일 완료되는 설계 단


3.1.1 주 라이브러리 단위 : 독립적으로 해석됨
- entity declaration(=엔티티 선언) 
- configuration declaration(=구성 선언) 
- package declaration(=패키지 선언)
- context declaration(=정황 선언)
- ex) context declaration

=> 바로 다음의 설계 단위에서 참조할 라이브러리를 연결시키는 작업 수행

- library 절을 먼저 선언한 후 use 절을 이용하여 필요한 패키지를 연결
-> library 절 : 해당 설계 단위에서 참조할 라이브러리의 논리적 이름 정의
-> use 절 : 앞서 선언된 라이브러리 내의 필요 패키지 연결

3.1.2 보조 라이브러리 단위 : 주 라이브러리 단위의 body
- architecture body(= 아키텍처 본체)
- package body(= 패키지 본체)

.3.2 설계 라이브러리의 구분
; work는 하나만 된다.

.2.1 working library(작업 라이브러리)
- 라이브러리 논리적 이름 : work
- 파일 시스템 상의 저장소(생성된 library unit 저장)
- 하나의 library만 working library가 될 수 있다.

.2.2 resource library(자원 라이브러리)
- design unit 해석의 참고를 위한, library unit들을 보유하는 저장소.
- 임의의 개수가 가능
ex) work, std, IEEE....

2.2.1 std library
 ; standard package, context declaration
제외한 모든 design unit에 자동적으로 선언 되는 library.

- 암시적 선언 내용
library STD, WORK; use STD.STANDARD.all;

- STD library 내의 package들.
 -> standard, textio, env

출처 :  http://dasan.sejong.ac.kr/~dihan/vhdl.htm