290 likes | 786 Views
2002 대학교육컨텐츠개발원고. 디지털시스템의 설계를 위한 VHDL 의 기본과 활용. " 이 내용은 2002 년도 한국학술진흥재단의 연구비에 의하여 수행된 것임 (KRF-2002-048-D00058)" " This work was supported by Korea Research Foundation Grant. (KRF-2002-048-D00058)". [ 제 2 장 VHDL 의 기본구성 ]. 제 1 절 VHDL 의 기초 표현. ■ VHDL 에서의 주석문 (comments)
E N D
2002대학교육컨텐츠개발원고 디지털시스템의 설계를 위한 VHDL의 기본과 활용 "이 내용은 2002년도 한국학술진흥재단의 연구비에 의하여 수행된 것임 (KRF-2002-048-D00058)" " This work was supported by Korea Research Foundation Grant. (KRF-2002-048-D00058)"
[제2장 VHDL의 기본구성] 제1절 VHDL의 기초 표현 • ■ VHDL에서의 주석문(comments) • ▪ 설계의 내용을 설계자가 쉽게 이해할 수 있도록 기술한 것으로 VHDL 컴파일러(compiler)입장 • 에서는 무시하고 넘어가는 부분. • ▪ 두 개의 하이픈(hyphen) 즉, “--”으로 시작하고, 그 끝 줄에서 종료 • ▪ 주석문의 활용 • [예제 2.1] 주석문의 활용 예 • 1 process(rst, clk) • 2 begin • 3 -- if문 • 4 if rst='0' then -- low active reset • 5 cnt <= (others => '0'); • 6 E <= '0'; RS <= '0'; RW <= '0'; • 7 DB <= "00000000"; • 8 elsif clk'event and clk='1' then-- clock's rising edge • 9 if 10000 = '1' then • 10 -- if 100 = '1' then • 11 cnt <= cnt+1; • 12 if cnt = 1 then • 13 E <= '1'; RS <= '0'; RW <= '0'; • 14 DB <= "00111000"; -- function • 15 elsif cnt =3 then • 16 E <= '1'; RS <= '0'; RW <='0'; • 17 DB <= "00001110"; -- DB : display on • 18 end if;
[제2장 VHDL의 기본구성] 제1절 VHDL의 기초 표현 • ■ 식별자(identifiers) • 이름을 의미, 즉 VHDL 코드(code)를 구성하는 엔티티(entity), 아키텍처(architecture) • , 포트(port) 등 여러 가지 기능을 정의하여 식별하기 위한 공백이 없는 문자열 • ▪ 식별자 활용 • [예제 2.2] 식별자의 활용(4bit 비교기) • 1 library ieee; • 2 use ieee.std_logic_1164.all; • 3 -- entity structure • 4 entity compare_4 is • 5 port(x, y : in std_logic_vector( 3 downto 0); • 6 equal : out std_logic); • 7 end compare_4; • 8 -- 아키텍처 몸체 • 9 architecture equal_logic of compare_4 is • 10 begin • 11 equal <= '1' when (x=y) else '0'; • 12 end equal_logic; • ▪ 식별자의 규칙 • ① 첫 번째 문자는 반듯이 영문자(a~z)로 시작, 두 번째 문자부터 영문자, 숫자(0~9) • 및 밑줄 문자 등의 혼합이 가능 • ② 마지막 문자는 밑줄 문자와 밑줄 문자를 두 개 이상 연속 사용 불가 • ③ 대문자, 소문자의 구별은 없으며, VHDL구문의 예약어는 식별자로 사용 불가
[제2장 VHDL의 기본구성] 제1절 VHDL의 기초 표현 • ▪ 올바른 식별자의 사용 • [예제 2.3] 올바른 식별자의 사용 • ꋻ 올바른 식별자 • FET • Decoder_4 • sig_N • compare_eq • main_clock • ꋻ 잘못된 식별자 • ① _ Decoder_4 -- 첫 문자는 영문자로 시작 • ② 2FET_2 -- 첫문자는 영문자로 시작 • ③ sig_*R -- 문자, 숫자, 밑줄 문자로만 구성 • ④ MOS-FET -- 문자, 숫자, 밑줄 문자로만 구성 • ⑤ Decoder_ -- 밑줄 문자가 마지막에 기술되면 안됨 • ⑥ Main__clk -- 밑중 문자가 연속 2개 사용 불가
[제2장 VHDL의 기본구성] 제1절 VHDL의 기초 표현 • ■ 리터럴(literals) • VHDL 코드로 설계를 할 때, 직접적으로 표현하는 값 또는 문자를 말함. • ▪ 리터럴(literal)의 사용 • [예제 2.4] 리터럴의 사용 • 1 elsif cnt =3 then • 2 E <= '1'; RS <= '0'; RW <= '0'; • 3 DB <= "00001100"; • ▪ 리터럴의 표현법 • 숫자(numbers)의 표현: 숫자는 10진수 표현(decimal literals)과 • 2진, 8진, 16진과 같이 밑 수(base)에 따라 표시되는 방법 • (based literals)이 있으며, 숫자에 소수점이 있으면 실수(real literal) • , 없으면 정수(integer literal) 표현 • [예제 2.5] 10진수에 의한 표현 • 0 1 123_456_78- 9987E6 -- 정수 • 0.0 0.5 2.718_28 12.4E-9 -- 실수 • [예제 2.6] 밑 수에 의한 표현 • 16#FE -- 16진수 : FE = 정수 254 • 2#1111_1110# -- 2진수 : 11111110 = 정수 254 • 16#D#E1 -- 16진수 : D=13, E1= 161 = 13 x 161 = 실수 208
[제2장 VHDL의 기본구성] 제1절 VHDL의 기초 표현 • ▪ 문자(characters literals)의 표현 • [예제 2.7] 문자의 표현 • ‘1’, '?', 'B', 'b' • ▪ 문자열(strings literals)의 표현법 • ① 단일문자들의 집합인 문자열은 이중 인용 부호(큰 따옴표: “ ”)에 • 넣어 표시 • ② 한 줄을 벗어나는 길이의 문자열은 접합연산자 &를 사용하여 구성 • [예제 2.8] 문자열의 표현 • "B string", "A string in a strong" • ▪ 비트 열(bit string)의 표현 • ① 비트는 단일 인용 부호(작은 따옴표:‘ ’) 사이에 숫자를 넣어 ‘1’ 또는 • ‘0’으로 표시하고, 비트 열은 이중 인용 부호(큰 따옴표:“ ”) 사이에 • 비트 열을 표시 • ② 비트 벡터의 값을 정의하기 위해 사용하며, 기수를 정의하는 문자가 • 앞에 표시되는 수열을 나타내고, 2진수는 B, 8진수는 O, 16진수는 • X로 시작 • [예제 2.9] 비트열의 표현 • B"1010110" -- 2진수로 bit의 길이가 7 • O"127" -- 8진수로 bit의 길이가 9이며, 2진수로 “001_010_111”과 동등 값 • X"FF" -- 16진수로 bit길이가 8이며, 2진수로 “1111_1111”과 동등 값
[제2장 VHDL의 기본구성] 제2절 VHDL의 설계단위 표현 • ■ 기본 설계단위(desgin unit) • VHDL에서 독립적으로 분석할 수 있는 VHDL Source File(또는 VHDL • Code) • ▪ VHDL 설계단위의 분류 • ꋻ 1단계(Primary unit) : 설계 단위을 외적 관점에서 본 것 • ꋻ 2단계(Secondary unit): 설계 단위을 내적 관점에서 본 것 [표 2.1] 설계단위구분 [그림 2.1]VHDL의 기본 설계단위
[제2장 VHDL의 기본구성] 제2절 VHDL의 설계단위 표현 • ■ 설계단위의 VHDL 구문 예 • [예제 2.10] 설계단위의 예 • <VHDL 구문> • 1 entity nor_2 is-- Primary unit • 2 port (x, y : in bit; -- NOR 게이트의 외적 표현 • 3 z : out bit); • 4 end nor_2; • 5 architecture example of nor_2 is-- secondary unit • 6 begin • 7 z <= x nor y; -- NOR 게이트의 내적 표현 • 8 end example; [그림 2.2] 2입력 NOR게이트 설계
[제2장 VHDL의 기본구성] 제2절 VHDL의 설계단위 표현 • ■ VHDL의 기본 구성 • ▪ 필수적인 설계단위 - 엔티티(entity)와 아키텍처 • 몸체(architecture body) • ① 제1단계 : 엔티티(entity)를 선언 • ꋻ 하드웨어 외부의 입ㆍ출력 Interface를 정의한 디지털 시스템의 본체 • ꋻ 하드웨어 블럭의 이름과 입ㆍ출력 port를 선언 • ② 제2단계 : 아키텍처 몸체(architecture body)를 표현 • ꋻ 디지털 시스템인 하드웨어 내부를 표현 • ꋻ 내부회로의 연결, 동작 또는 구조 등을 표현 • ▪ VHDL의 기본구조 [그림 2.3] VHDL의 기본 구조
[제2장 VHDL의 기본구성] 제2절 VHDL의 설계단위 표현 • ■ 선택적인 설계단위 -구성(configuration)과 패키지(package) • ▪ 구성(configuration) • 임의의 엔티티(entity)에 어떤 아키텍처가 결합되어 구성되었는가를 나 • 타내는 결합정보를 기술하는 부분 • ▪ 패키지(package) • 이미 선언하거나 기술된 정보를 중복으로 선언 또는 기술하지 않도록 • 서로 다른 설계에서 공동으로 사용할 수 있게 모아 놓은 꾸러미.
[제2장 VHDL의 기본구성] 제2절 VHDL의 설계단위 표현 • ■ VHDL의 설계단위와의 관계 (a) 기본 개념 (b) VHDL code 개념 [그림 2.4] VHDL의 기본 설계단위 구조
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 기본 형식 • ▪ 엔티티(entity) 선언 • 설계할 영역의 이름과 외부 환경과의 입ㆍ출력 정보를 나타낸 포트 • (port) 부분을 합한 것 • [예제 2.11] 엔티티 선언(NAND게이트) • ꋻ 엔티티(entity)의 영역 • ꋻ NAND게이트의 엔티티 선언 • <VHDL 구문> • 1 entity nand_2 is-- 하드웨어 블록 이름이 nand_2 • 2 port ( x, y : in bit; -- 단자(port)신호: x, y는 입력, bit형 데이터 • 3 z : out bit ); -- z는 출력, bit형 데이터 • 4 end nand_2 ; -- nand_2의 마감 [그림 2.5] entity nand_2 영역
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • [예제 2.12] 엔티티 선언(1bit full_adder) • ꋻ 엔티티(entity) 영역과 회로도 • ꋻ VHDL의 엔티티 선언 • 1 entity adder_1 is • 2 port ( X, Y, Ci : in bit; • 3 S : inout bit; • 4 Co : out bit); • 5 end adder_1; • (a) 엔티티 영역(b) 회로도 • [그림 2.6] 1비트(bit) 전가산기 회로
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 엔티티(entity)의 일반적 형식 • [형식 2.1] 일반적 형식 • entity 엔티티_이름 is • port( 포트_이름 : [모드] 자료형; • 포트_이름 : [모드] 자료형); • end엔티티_이름; • ■ 엔티티(entity)의 모델과 구성 • (a) 엔티티의 모델 • (b)엔티티의 구성 • [그림 2.7] 엔티티(entity)의 구조
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 엔티티의 기본활용 • [예제 2.13] 엔티티 선언(2_입력 NAND게이트) • <VHDL 구문> • 1 entity NAND2_system is • 2 port ( x, y : in bit; • 3 z : out bit ); • 4 end NAND2_system ; • 5 architecture example of NAND2_system is • 6 begin • 7 z <= x nand y ; • 8 end example ; • [그림 2.8] 2_입력 NAND게이트
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • [예제 2.14] 엔티티의 구조(간단한 조합논리회로) • <VHDL구문> • 1 entity combi_sys is • 2 port ( a, b, c, d : in bit ; • 3 out1, out2, out3 : out bit ); • 4 end combi_sys ; • 5 architecture example of combi_sys is • 6 begin • 7 out1 <= a or b ; • 8 out2 <= b nand c ; • 9 out3 <= not(d); • 10 end example ; • [그림 2.9] 간단한 조합논리회로
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 포트(port) 기능의 이해 • 하드웨어 부품(component)상의 단자들을 표현하며 포트의 이름, 신호의 • 흐름 및 자료형으로 나타내는 부분으로 엔티티 내 외부 신호선의 • 연결상태를 기술 • [형식 2.2] 포트(port)의 일반적 형식 • port(포트_이름, 포트_이름 : [모드] 자료형; • 포트_이름,포트_이름 : [모드] 자료형); • [예제 2. 15] 포트(port)의 활용 • port(X, Y, Ci : in bit; • S : inout bit; • Co : out bit);
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 모드(mode)의 종류 • ▪ in(안으로) : 입력(input)으로 신호가 해당 엔티티로 들어가는 경우에 사용 • ▪ out(밖으로) : 출력(output)으로 해당 엔티티에서 신호가 출력되는 경우에 사용 • ▪ inout(안 밖으로) : 입/출력(input/output)으로 해당 엔티티에서 신호가 양방향으로 • 사용 • ▪ buffer(밖으로, 되 읽음) : 출력기능과 같으나, 단지 자신의 신호를 되 읽는 경우에 • 사용 • ▪ linkage : 동작에 영향을 주지 않으며 단지 포트의 연결상태만 나타냄 • [그림 2.10] 포트(port)에서 모드(mode)의 종류
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ■ 포트 신호(port signal)의 자료형태 • ▪ 자료형에 대한 bit와 bit_vector • ꋻ bit : signal의 개수가 1개인 경우에 사용 • ꋻ bit_vector: signal의 개수가 여러 개인 경우에 사용 • ꋻ 오름차순: bit_vector(0 to 7), 내림차순: bit_vector(7 downto 0) • 1 entity block_port is • 2 port( x, c : in bit; • 3 y : in bit_vector (7 downto 0); • 4 z : out bit_vector (3 downto 0); • 5 d : out bit); • 6 end block_port; • ▲ ▲ • 모드(mode) 형태(type) • [그림 2.11] 포트(port)에서 자료의 형태
[제2장 VHDL의 기본구성] 제3절 엔티티(entity)의 구조 • ▪ bus signal의 내림차순과 오름차순 • ꋻ downto : 내림차순 표현 • port ( clk : in bit ; • z : buffer bit_vector (3 downto 0)) ; • z <="0011" ; -- z(3)=0, z(2)=0, z(1)=1, z(0)=1 • ꋻ to : 오름차순표현 • port ( clk : in bit ; • z : buffer bit_vector (0 to 3)) ; • z <="0011" ; -- z(0)=0, z(1)=0, z(2)=1, z(3)=1 • [그림 2.12] bus signal의 내림차순과 오름차순
[제2장 VHDL의 기본구성] 제4절 아키텍처(architecture)의 구조 • ■ 기본 형식 • ▪ 아키텍처(architecture) • ꋻ 설계할 회로의 실질적인 내부 동작 또는 각 부품들 사이의 연결구조 • 를 기술하는 부분. • ꋻ 하나의 엔티티 선언에는 여러 개의 아키텍처 몸체(architecture body) • 가 연결 가능. • ꋻ 아키텍처 기술방법은 동작적ㆍ자료흐름적 기법과 구조적 기법. • [예제 2.16] 아키텍처 활용(NAND게이트) • ꋻ <VHDL구문> 아키텍처 몸체 선언 • 1 architecture example of nand2_system is-- nand2_system의 • -- 회로의 이름이 example • 2 begin--내용의 시작 • 3 z <= x nand y; -- z에 x nand y를 대입 • 4 end example; -- example의 끝 • [그림 2.13] 아키텍처 example의 영역
[제2장 VHDL의 기본구성] 제4절 아키텍처(architecture)의 구조 • [예제 2.17] 아키텍처의 활용(1bit full_adder) • ꋻ 아키텍처의 영역과 회로도 • ꋻ VHDL의 아키텍처 구문(선언문이 없는 경우) • architecture combi_logic of ADDER1_system is • begin • S <= (X xor Y) xor Ci; -- 덧셈 결과 • Co <= (X and Y) or (S and Ci); • end combi_logic; • ꋻ VHDL의 아키텍처 구문(선언문이 있는 경우) • 1 architecture combi_logic of ADDER1_system is • 2 signal n1, n2, n3 : bit; -- n1, n2, n3을 신호로 선언 • 3 begin • 4 n1 <= X xor Y; -- n1 : 내부 신호 연결 • 5 S <= n1 xor Ci; -- 덧셈 결과 • 6 n2 <= X and Y; -- n2 : 내부 신호 연결 • 7 n3 <= S and Ci; -- n3 : 내부 신호 연결 • 8 Co <= n2 or n3; -- 자리올림수 결과 • 9 end combi_logic; • ▪ 아키텍처(architecture)의 일반적 형식 • [형식 2.3] 일반적인 형식 • architecture 아키텍처_이름 of 엔티티_이름 is • {선언문} • begin • {내부적 동작표현} • end 아키텍처_이름; • [그림 2.14] 1비트(bit) 전가산기 회로
[제2장 VHDL의 기본구성] 제4절 아키텍처(architecture)의 구조 • ■ 아키텍처의 기술방법 • ▪ 동작적 표현(behavioral description) • ① 자료 흐름 표현(data flow description) : 부울대수, 논리연산자를 이용하여 자료흐름적으로 • 기술하는 방법 • ② 동작적 표현 : 디지털 시스템의 동작을 알고리즘으로 기술하는 방법 • ▪ 구조적 표현(structural description) • ① 디지털 시스템인 하드웨어에서 컴포넌트(component)의 상호연결로 표현 • ② 하드웨어 표현에 매우 가까운 표현 방식으로 계층구조의 하드웨어 설계에 유리 • [예제 2.18] 아키텍처 표현방법 • ■ 구성 선언(configuration declaration) • 하나의 엔티티에 여러 개의 아키텍처가 있을 때, 특정 • 앤티티와 아키텍처를 연결하여 주거나 계층적 설계에서 • 특정 엔티티와 부품 개체를 연결할 때 사용. [그림 2.15] architecture body의 표현방식
[제2장 VHDL의 기본구성] 제5절 구성(configuration) • [형식 2.4] 구성(configuration)의 일반적인 형식 • configuration 구성_이름 of 엔티티_이름 is • for 아키텍처_이름 • { for개체_레이블 : 부품_이름 • use entity라이브러리_이름. 엔티티_이름(아키텍처_이름); • end for; } • end for; • end[구성_이름]; • [예제 2.19] 구성(configuration)의 활용(전가산기) • 1 entity ADDER1_system is • 2 port(X, Y, Ci : in std_logic; • 3 S : inout std_logic; Co : out std_logic); • 4 end ADDER1_system; • 5 architecture combi_logic1 of ADDER1_system is -- first architecture • 6 begin • 7 S <= (X xor Y) xor Ci; • 8 Co <= (X and Y) or (S and Ci); • 9 end combi_logic1; • 10 -- second architecture • 11 architecture combi_logic2 of ADDER1_system is • 12 signal n1, n2, n3 : std_logic; -- n1,n2,n3가 신호라고 선언 • 13 begin • 14 n1 <= X xor Y; • 15 S <= n1 xor Ci; • 16 n2 <= X and Y; • 17 n3 <= S and Ci; • 18 Co <= n2 or n3; • 19 end combi_logic2; • 20 -- configuration coding • 21 configuration combi_logic1 of ADDER1_system is • 22 for combi_logic1 --엔티티 ADDER1과 아키텍처 combi_logic1을 연결하는 구문 • 23 end for; • 24 end combi_logic1;
[제2장 VHDL의 기본구성] 제6절 패키지(package) • ■ 패키지(package)와 라이브러리(library) • ▪ 패키지(package) • ① 자료형(data type)과 부 프로그램(sub program)을 하나의 파일로 만든것 • ② 자료형, 부 프로그램 등을 중복으로 선언 또는 기술하지 않고, 한번 기술한 • 것을 여러설계에서 공동으로 사용할 수 있도록 모아둔 꾸러미. • ▪ 라이브러리(library) • ① VHDL을 구성하는 설계단위 즉, 엔티티(entity), 아키텍처(architecture), 패키지 • (package)등을 저장하고, 필요시에 사용할 수 있는 저장장소(directory). • ■ 미리 정의된 패키지(defined package) • ▪ IEEE standard package : 표준 형(types), 연산자(operators), 객체(objects)들을 • 선언. library와 use를 사용할 필요가 없음. • ▪ IEEE Textio package : IEEE에서 만든 문서 파일의 입ㆍ출력용 패키지로 문서의 • 입출력 관련형과 객체들을 정의. • [형식 2.5] 패키지를 부르기 위한 library의 형식 • library example • use example. test. all; • ꀺ ꀺ ꀺ • ① ② ③ ①library 이름, ②패키지 이름, ③패키지의 모든 내용 • ▪ IEEE std_logic_1164 package : IEEE에서 만든 확장된 표준 로직 패키지 • [형식 2.6] 패키지를 부르기 위한 library의 형식 • library IEEE; • use IEEE. std_logic_1164.all;
[제2장 VHDL의 기본구성] 제6절 패키지(package) • ■ 사용자 선언 패키지(user defined package) • ▪ 패키지 선언(package declaration) • ꋻ 외부에서 사용할 수 있도록 인터페이스를 담당하는 역할 • ꋻ 외부에서 필요한 자료형, 부품, 부프로그램(함수,프로시저)을 선언 • ▪ 패키지 몸체(package body) • ꋻ 패키지 선언부분에서 선언된 부프로그램의 구체적 내용을 정의 • [형식 2.7] package의 구조 • -- package 선언부 • package 패키지_이름 is • {자료형 선언}; • {부프로그램 선언}; • end 패키지_이름; • -- package 몸체부 • package body패키지_이름 is • {부프로그램 기술} • end 패키지_이름;
[제2장 VHDL의 기본구성] 제6절 패키지(package) • ■ 부 프로그램 : 함수(function), 프로시저(procedure) • ▪ 함수(function) • ꋻ 선언부분과 몸체부분으로 구분되며, 호출이 수식이고, 되돌려 주는(return) 값이 • 하나로서 매개변수의 모드는 in 모드. • ꋻ 지연 없는 계산에 쓰이는 수식의 중간에 사용하며, wait문을 사용할 수 없음. • ꋻ 순차처리문이며, 호출방식은 순차호출과 병행호출이 있음. • [형식 2. 8] 함수(function)의 선언과 몸체의 형식 • function 함수_이름 [(매개변수_항목)] return 자료형; -- 함수 선언부 • function 함수_이름[(매개변수_항목)] return 자료형 is -- 함수 몸체부 • {선언문} • begin • {순차문} • end 함수_이름; • [예제 2.20] 함수(function) 활용 • 1 function inverter2(X:bit) return bit is • 2 begin • 3 if X ='1' then return '0'; • 4 else return '1'; • 5 end if; • 6 end "and"; • 7 end inverter2;
[제2장 VHDL의 기본구성] 제6절 패키지(package) • ■ 프로시저(procedure) • ▪ 선언과 몸체로 구분되며, 호출이 문장이고 되돌려 주는 값이 여러 개가 가능. • ▪ 매개변수가 여러 개이며, wait문의 사용이 가능하고 순차처리문. • [형식 2.9] 프로시저(procedure)의 형식 • procedure 프로시저_이름[(매개변수)]; -- procedure 선언부 • procedure 프로시저_이름[(매개변수)] is -- procedure 몸체부 • {선언문} • begin • {순차문} • end 프로시저_이름; • [예제 2.21] 프로시저(procedure)의 활용 • 1 procedure invert_1( X : in bit; Y : out bit) is -- procedure 선언부 • 2 begin • 3 if X = '0' then Y <= '1'; • 4 else Y <='0'; • 5 end if; • 6 end invert_1;