Download presentation
Presentation is loading. Please wait.
1
VHDL Package & Subprogram
Lecture #7
2
VHDL Package & Subprogram
강의 순서 VHDL Library & Package VHDL Subprogram Function Procedure VHDL Package & Subprogram
3
VHDL Library & Package (1)
Library - 저장장소(directory)의 개념 Package - data type, constant, function, procedure 등을 한 장소(File)에 모아 선언한 것 프로그래밍 언어의 라이브러리와 같은 개념 주로 사용되는 Library Work Library 현재 실행 중인 작업을 저장하는 곳 특별히 VHDL파일의 Library를 지정하지 않으면 work Library에 저장된다 IEEE Library std_logic_1164, std_logic_unsigned 등과 같은 package가 저장되어있는 곳 VHDL Package & Subprogram
4
VHDL Library & Package (2)
IEEE Library의 주요 Package 내용 std_logic_1164 ( std1164.vhd, std1164b.vhd ) standard for describing interconnection data types for VHDL std_logic_signed ( signed.vhd, signedb.vhd ) functions that allow to use std_logic_vector types as if they are signed types std_logic_unsigned ( unsigned.vhd, unsignedv.vhd ) functions that allow to use std_logic_vector types as if they are unsigned types std_logic_arith ( arith.vhd, arithb.vhd ) signed and unsigned types, conv_signed and conv_unsigned, arithmetic and comparision function VHDL Package & Subprogram
5
VHDL Library & Package (3)
ieee Library를 사용하겠다고 선언 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Package 이름 = Std_logic_1164, Std_logic_unsigned Library 이름 = ieee Package 의 모든 내용 Work Library인 경우에만 생략가능. 이 경우는 생략해도 좋음. library work; use work.mytest_lib.all; Package 의 모든 내용 Library 이름 = work Package 이름 = mytest_lib VHDL Package & Subprogram
6
VHDL Library & Package (4)
package package_name is Type Declaration; Constant Declaration; Subprogram Declaration; end package_name; package body package_name is Subprogram 구문; Package 선언 Package 몸체 VHDL Package & Subprogram
7
VHDL Library & Package (5)
자료형 선언(data type declaration) 상수 선언(constant declaration) 신호 선언(signal declaration) 부프로그램 선언(subprogram declaration) 컴포넌트 선언(component declaration) Package 몸체의 내용 자료형 및 상수 선언(data type & constant declaration) 부프로그램 선언 및 몸체(subprogram declaration & body) VHDL Package & Subprogram
8
VHDL Library & Package (6)
VHDL Package & Subprogram
9
VHDL Library & Package (7)
VHDL Package & Subprogram
10
VHDL Library & Package (8)
Package를 이용한 VHDL Description 작성 예: 다음의 게이트 회로에 대해 VHDL package를 이용하여 VHDL description을 작성한다 VHDL Package & Subprogram
11
VHDL Library & Package (9)
Package를 이용한 VHDL Description 작성 예: 컴포넌트로 사용할 게이트에 대한 VHDL description을 작성하고 컴파일한다 VHDL Package & Subprogram
12
VHDL Library & Package (10)
VHDL Package & Subprogram
13
VHDL Library & Package (11)
Package를 이용한 VHDL Description 작성 예: Gate package description을 작성하고 컴파일하여 VHDL package ‘gate_package’를 만든다 Package 파일명: gate_package.vhd 주의 - 패키지 파일은 현재 작업중인 working directory 내에서 작성한다 VHDL Package & Subprogram
14
VHDL Library & Package (12)
Package를 이용한 VHDL Description 작성 예: 제시된 게이트 회로에 대한 VHDL description을 작성하고 컴파일한다 VHDL 파일명: logic_system.vhdl Working directory 내의 ‘gate_package’ 패키지 사용을 선언 ‘logic_system’에 대한 구조적 표현 방식의 VHDL Description VHDL Package & Subprogram
15
VHDL Library & Package (13)
Package를 이용한 VHDL Description 작성 예: 타이밍 시뮬레이션 결과 : VHDL Package & Subprogram
16
VHDL Package & Subprogram
서브프로그램 이름과 매개 변수를 이용하여 호출함으로써 서브프로그램을 실행하고 계산된 결과를 반환 받는다 VHDL Subprogram Procedure VHDL 문장의 일반화 VHDL 문장과 같은 방법 사용 Function VHDL 수식의 일반화 VHDL 수식에서 호출하여 사용 VHDL Package & Subprogram
17
Subprogram 개요 (2) VHDL Subprogram Procedure와 Function의 비교 : 항목
반환값 문자에 의해 호출되고, 매개 변수를 통해 여러 개의 값을 반환 할 수 있다 수식에 의해 호출되고, 반환 값은 단 하나로서 함수 이름을 통해 반환된다 매개변수모드 in, out, inout in 수식 계산 수식의 중간 사용 불가능 지연없는 계산에 쓰이는 수식의 중간 사용이 가능 대기문 사용 가능 사용 불가능 문장 모드 순차문 VHDL Package & Subprogram
18
VHDL Package & Subprogram
Architecture 몸체 내의 선언부 Process 문장 내의 선언부 Package 문장 내의 선언부 정의 위치에 따라 호출 범위가 결정됨에 유의 Subprogram 호출 서브프로그램 이름과 실제 매개 변수를 이용하여 호출함으로써 서브프로그램을 실행하고 계산 결과를 반환 받을 수 있다 호출 방법 및 반환값 – 비교표 참조 VHDL Package & Subprogram
19
VHDL Package & Subprogram
순차 호출(Sequential Call) – process 또는 subprogram 내에서 순차문을 사용하여 호출 병행 호출(Concurrent Call) – architecture 내의 병행 처리문을 사용하여 호출 VHDL Package & Subprogram
20
VHDL Package & Subprogram
Subprogram 정의에서 모드 in으로 정의된 매개 변수는 ‘상수’ 객체로 가정하고, 모드 out 또는 inout으로 정의된 매개 변수는 ‘변수’ 객체로 가정한다 Procedure는 매개 변수를 통해 결과값을 반환 반환 매개 변수는 모드 out 으로 정의 반환 매개 변수를 ‘변수’ 객체로 가정 병행 호출 시에는 procedure 내부와 외부에서 동시에 매개 변수에 해당하는 실 변수를 변환 가능하여 예외적인 결과를 유발 procedure는 순차 호출만 사용하도록 한다 Function는 모든 매개 변수가 모드 in으로 정의 모든 매개 변수를 상수로 가정 매개 변수에 대한 동시 변환이 발생하지 않는다 순차 호출 및 병행 호출이 가능 VHDL Package & Subprogram
21
VHDL Package & Subprogram
Function (1) Function 지연 시간 없이 계산 결과를 반환하는 부프로그램 오직 하나의 반환값을 가지며, 내부에서 return 문장을 이용하여 결과를 반환 입력 매개 변수는 모두 모드 in 으로 정의 선언문에서는 Variable만 선언이 가능 지연 시간 없이 반환함으로 function 내부에서는 대기문을 사용할 수 없다 Function 호출은 수식 문장 중간에서 호출 VHDL Package & Subprogram
22
VHDL Package & Subprogram
Function (2) Function 선언 및 몸체 정의 형식 Function 선언 형식 : function 함수_이름(매개변수_리스트) return 반환값_자료형; Function 몸체 형식 : function 함수_이름(매개변수_리스트) return 반환값_자료형 is { 선 언 문 } begin { 순 차 문 } end 함수_이름 VHDL Package & Subprogram
23
VHDL Package & Subprogram
Function (3) Architecture의 선언부에 function을 작성 library ieee; use ieee.std_logic_1164.all; entity func_test is port( a, b : in std_logic_vector(7 downto 0); y : out std_logic_vector(7 downto 0) ); end func_test; architecture a of func_test is function and2_8bit(x,y: in std_logic_vector) return std_logic_vector is variable temp : std_logic_vector(7 downto 0); begin temp := x and y; return(temp); end and2_8bit; y <= and2_8bit(a,b); end a; adder2_8bit 는 8비트 병렬가산기임. 함수 선언 함수 호출 VHDL Package & Subprogram
24
VHDL Package & Subprogram
Function (4) Process의 선언부에 function을 작성 library ieee; use ieee.std_logic_1164.all; entity func_test2 is port( a, b : in std_logic_vector(7 downto 0); y : out std_logic_vector(7 downto 0) ); end func_test2; architecture a of func_test2 is begin process(a,b) function and2_8bit(x,y: in std_logic_vector) return std_logic_vector is variable temp : std_logic_vector(7 downto 0); temp := x and y; return(temp); end and2_8bit; y <= and2_8bit(a,b); end process; end a; adder2_8bit 는 8비트 병렬가산기임. 함수 선언 함수 호출 VHDL Package & Subprogram
25
File 이름 : Mytest_lib.vhd
Function (5) Package에서 function을 작성 함수 선언 library ieee; use ieee.std_logic_1164.all; package mytest_lib is function and2_8bit(x,y: in std_logic_vector) return std_logic_vector; end mytest_lib; package body mytest_lib is function and2_8bit(x,y: in std_logic_vector) return std_logic_vector is variable temp : std_logic_vector(7 downto 0); begin temp := x and y; return(temp); end and2_8bit; File 이름 : Mytest_lib.vhd library ieee; use ieee.std_logic_1164.all; use work.mytest_lib.all; entity func_test3 is port( a, b : in std_logic_vector(7 downto 0); y : out std_logic_vector(7 downto 0) ); end func_test3; architecture dataflow of func_test3 is begin y <= and2_8bit(a,b); end dataflow; File 이름 : func_test3.vhd 함수 호출 VHDL Package & Subprogram
26
VHDL Package & Subprogram
Function (6) Function 사용 예: 두 개의 입력 X와 Y를 비교하여 큰 값을 출력하는 크기 비교 회로를 Package에 function를 선언하여 설계한다 VHDL Package & Subprogram
27
VHDL Package & Subprogram
Function (7) Function 사용 예: Package 내에 크기 비교 함수를 구현하고 컴파일한다 Package 파일명: mag_comp_pack.vhd VHDL Package & Subprogram
28
VHDL Package & Subprogram
Function (8) Function 사용 예: 크기 비교 회로의 VHDL description 작성 및 컴파일 파일명: mag_comp4.vhd VHDL Package & Subprogram
29
VHDL Package & Subprogram
Function (9) Function 사용 예: 타이밍 시뮬레이션 결과: VHDL Package & Subprogram
30
VHDL Package & Subprogram
Procedure (1) Procedure 반복적으로 사용되는 VHDL 코드를 모듈로 나누어 작성하기 위해 사용하는 서브프로그램 출력 매개변수를 이용하여 여러 개의 계산 결과를 반환 매개 변수의 mode는 입,출력(in, out, inout) 모두 가능 선언부에서는 Variable만을 선언가능 일반적으로 순차문에 의해 순차 호출 병행 호출은 사용하지 않는다 VHDL Package & Subprogram
31
VHDL Package & Subprogram
Procedure (2) Procedure 선언 및 몸체 정의 형식 Procedure 선언 형식 : procedure 함수_이름(매개변수_리스트); Procedure 몸체 형식 : procedure 함수_이름(매개변수_리스트) is { 선 언 문 } begin { 순 차 문 } end 함수_이름 VHDL Package & Subprogram
32
Andor2_8bit는 8비트 입력신호 a,b에 대한 and, or출력을 내보냄..
Procedure (3) Architecture의 선언부에 procedure을 작성 library ieee; use ieee.std_logic_1164.all; entity proc_test is port( a, b : in std_logic_vector(7 downto 0); and_out, or_out : out std_logic_vector(7 downto 0) ); end proc_test; architecture a of proc_test is procedure andor2_8bit( a,b : in std_logic_vector; y1,y2 : out std_logic_vector) is begin y1 := a and b; y2 := a or b; end andor2_8bit; process(a,b) variable tand_out, tor_out : std_logic_vector(7 downto 0); andor2_8bit(a, b, tand_out, tor_out); and_out <= tand_out; or_out <= tor_out; end process; end a; Andor2_8bit는 8비트 입력신호 a,b에 대한 and, or출력을 내보냄.. Procedure 선언 Procedure 호출 VHDL Package & Subprogram
33
Andor2_8bit는 8비트 입력신호 a,b에 대한 and, or출력을 내보냄..
Procedure (4) Process의 선언부에 procedure 을 작성. library ieee; use ieee.std_logic_1164.all; entity proc_test2 is port( a, b : in std_logic_vector(7 downto 0); and_out, or_out : out std_logic_vector(7 downto 0) ); end proc_test2; architecture a of proc_test2 is begin process(a,b) procedure andor2_8bit( a,b : in std_logic_vector; y1,y2 : out std_logic_vector) is y1 := a and b; y2 := a or b; end andor2_8bit; variable tand_out, tor_out : std_logic_vector(7 downto 0); andor2_8bit(a, b, tand_out, tor_out); and_out <= tand_out; or_out <= tor_out; end process; end a; Procedure 선언 Andor2_8bit는 8비트 입력신호 a,b에 대한 and, or출력을 내보냄.. Procedure 호출 VHDL Package & Subprogram
34
File 이름 : Mytest1_lib.vhd
Procedure (5) Package에서 procedure 을 작성 File 이름 : Mytest1_lib.vhd library ieee; use ieee.std_logic_1164.all; package mytest1_lib is procedure andor2_8bit( a,b : in std_logic_vector; y1,y2 : out std_logic_vector); end mytest1_lib; package body mytest1_lib is y1,y2 : out std_logic_vector) is begin y1 := a and b; y2 := a or b; end andor2_8bit; Procedure 선언 library ieee; use ieee.std_logic_1164.all; use work.mytest1_lib.all; entity proc_test3 is port( a, b : in std_logic_vector(7 downto 0); and_out, or_out : out std_logic_vector(7 downto 0) ); end proc_test3; architecture a of proc_test3 is begin process(a,b) variable tand_out, tor_out : std_logic_vector(7 downto 0); andor2_8bit(a, b, tand_out, tor_out); and_out <= tand_out; or_out <= tor_out; end process; end a; File 이름 : proc_test3.vhd VHDL Package & Subprogram Procedure 호출
35
VHDL Package & Subprogram
Procedure (6) Procedure 사용 예: 4비트의 2진수 2개를 더하는 병렬 이진 가산기를 Package 내에 procedure을 정의하여 구현한다 Package 내에 병렬 이진 가산을 수행하는 procedure 정의하고 컴파일 (파일명: add_pack.vhd) VHDL Package & Subprogram
36
VHDL Package & Subprogram
Procedure (7) Procedure 사용 예: 병렬 이진 가산기의 VHDL description 정의 및 컴파일 파일명: bin_adder.vhd VHDL Package & Subprogram
37
VHDL Package & Subprogram
Procedure (8) Procedure 사용 예: 타이밍 시뮬레이션 결과: VHDL Package & Subprogram
Similar presentations