610 likes | 1.58k Vues
Unit 10 Introduction to VHDL. 강의 개요. VHDL 소개 VHDL 문법 소개 VHDL 을 활용한 조합 논리 회로 설계 연산자의 우선순위 파악 산술 연산 수행. 10.0 VHDL 소개. 하드웨어기술언어 (HDL : Hardware Description Language) 최초로 공인된 표준 하드웨어 설계언어 CPLD/FPGA 등 소규모 설계에서 주문형집적회로 (ASIC) 등 대규모 시스템설계에 사용 회로도와 하드웨어기술언어의 설계 비교.
E N D
강의 개요 • VHDL 소개 • VHDL 문법 소개 • VHDL을 활용한 조합 논리 회로 설계 • 연산자의 우선순위 파악 • 산술 연산 수행
10.0 VHDL 소개 • 하드웨어기술언어(HDL : Hardware Description Language) • 최초로 공인된 표준 하드웨어 설계언어 • CPLD/FPGA 등 소규모 설계에서 주문형집적회로(ASIC) 등 대규모 시스템설계에 사용 • 회로도와 하드웨어기술언어의 설계 비교 (a)회로도를 이용한 설계(b) 하드웨어기술언어를 이용한 설계
10.0 VHDL 소개 • ■ 하드웨어기술 언어의 종류 [표] 하드웨어기술언어의 종류
10.0 VHDL 소개 • VHDL의 출현배경 • VHDL의 기능 • ① V:VHSIC(Very High Speed Integrated Circuit) + HDL: Hardware Description • Language • ② 문서화(coding/modeling), 검증(simulation/verification), 합성(synthesis) • IEEE(the Institute of Electrical and Electronics Engineers) 공인 • 1987년; IEEE_1076, 1991년 : IEEE_1164 • VHDL의 사용 배경 • ① 컴퓨터, 휴대전화, 통신장치 등 고부가가치 제품의 다양한 기능과 • 높은 성능이 요구 • ② 고 집적화, 낮은 가격, 빠른 개발기간이 요구 • ③ 기존의 전통적인 설계방법은 경쟁력이 없어지고, 하드웨어기술언어 • 의 사용이 필요한 상황
10.0 VHDL 소개 • VHDL의 특징 • 장점 • ① 특정기술, 공정에 독립적: 특정기술이나 공정에 관계없이 디지털시스 • 템의 설계가 가능 • ② 광범위한 기술능력: 다양한 설계기법을 이용한 설계가 가능하여, 사 • 용자가 원하는 기술의 사용이 가능하고, 소규모는 물론 대규모 시스 • 템의 설계에 유용하며, 설계 재사용이 가능 • ③ 표준화와 문서화: IEEE에 의한 표준화, 하드웨어 관련 문서화에 용이 • ④ 설계기간 단축: 검증의 빠른 반복능력으로 설계기간이 단축되고, 설 • 계자 오류의 검증이 용이하며, 제품 설계비용의 감소 등 경쟁력 강화 • 에 적합 • 단점 • ① VHDL 자체의 복잡성으로 많은 시간과 노력이 필요 • ② 회로합성 단계가 필요하므로 합성 툴(tool)에 따라 회로 성능이 좌우 • ③ 합성 툴(tool)이 VHDL구문의 일부 지원에 따른 불편
10.0 VHDL 소개 • VHDL의 역사 • VHDL 관련 표준화 설명 • ꋻ IEEE std_1076 : VHDL표준의 핵심부분으로 언어의 정의를 표준화 • ① 1076.1: VHDL 아날로그(analog)와 혼합 아날로그-디지털 시스템 • (mixed analog-digital system) 부분의 정의 • ② 1076.2: 수학연산을 위한 수학도구에 대한 부분의 정의 • ③ 1976.3: VHDL 합성(synthesis)에 대한 부분의 정의 • ④ 1076.4: VITAL(VHDL initiative towards ASIC libraries)에 대한 부분의 정의 • ⑤ 1976.5: IEEE 라이브러리 부품(library components)에 대한 부분의 정의 • ꋻ IEEE std-_1164 : 실제 시스템에 적용할 수 있는 다중 값(multi value) • 에 대한 부분의 정의 • ꋻ IEEE std_1029 : 타이밍 검증을 위한 파형, 벡터변환 등에 대한 부분 • 의 정의 [그림 1.12] VHDL관련 표준화의 역사
10.1 조합회로의 VHDL 표현 • <= 연산자 • 신호의 할당 연산자로 오른쪽의 논리식이 계산 되어 기호의 왼쪽에 위치하는 신호에 할당 된다는 의미 • 괄호 연산자 () • 실행의 우선순위 • 일반적인 신호 할당문 • Signal_name <= expression [after_delay]; • After_delay는 꼭 필요하지 않다. 생략 되면 Delta delay 후 갱신 된다. C <= A and B after 5ns; E <= C or D after 5ns; E <= D or (A and B);
10.1 조합회로의 VHDL 표현 • 인스턴스 구문 Gate1 : AND2 portmap (A,B,D); Gate2 : OR2 portmap(C,D,E); 자체 포트맵의 입력신호 중 하나 이상이 변하는 즉시 실행 되는 동시문. Gate 1 은 A 또는 B가 변할 때 마다. D의 새로은 값을 계산. Gate 2 는 C 또는 D가 변할 때 마다. E의 새로운 값을 계산.
10.1 조합회로의 VHDL 표현 • CLK 신호를 통한 동시성 • 출력이 ‘0’ 이라면. 피드백 된 신호 ‘0’이 인버터의 입력력으로 입력 되고. • 10ns 후에 ‘1’이 출력된다. • 대소문자 구분이 없다. • 아래 두 줄은 같은 의미를 가진다.
10.1 조합회로의 VHDL 표현 • VHDL에서의 주석문(comments) • 설계의 내용을 설계자가 쉽게 이해할 수 있도록 기술한 것으로 • VHDL 컴파일러(compiler)입장에서는 무시하고 넘어가는 부분. • 두 개의 하이픈(hyphen) 즉, “--”으로 시작하고, 그 끝 줄에서 종료 • ▪ 주석문의 활용 • [예제 ] 주석문의 활용 예 • 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; 11
10.1 조합회로의 VHDL 표현 • 식별자(identifiers) • 이름을 의미, 즉 VHDL 코드(code)를 구성하는 엔티티(entity), 아키텍처(architecture) • , 포트(port) 등 여러 가지 기능을 정의하여 식별하기 위한 공백이 없는 문자열 • ▪ 식별자 활용 • [예제 ] 식별자의 활용(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구문의 예약어는 식별자로 사용 불가
10.1 조합회로의 VHDL 표현 • ▪ 올바른 식별자의 사용 • [예제 ] 올바른 식별자의 사용 • ꋻ 올바른 식별자 • FET • Decoder_4 • sig_N • compare_eq • main_clock • ꋻ 잘못된 식별자 • ① _ Decoder_4 -- 첫 문자는 영문자로 시작 • ② 2FET_2 -- 첫문자는 영문자로 시작 • ③ sig_*R -- 문자, 숫자, 밑줄 문자로만 구성 • ④ MOS-FET -- 문자, 숫자, 밑줄 문자로만 구성 • ⑤ Decoder_ -- 밑줄 문자가 마지막에 기술되면 안됨 • ⑥ Main__clk -- 밑중 문자가 연속 2개 사용 불가
10.1 조합회로의 VHDL 표현 • 리터럴(literals) • VHDL 코드로 설계를 할 때, 직접적으로 표현하는 값 또는 문자를 말함. • ▪ 리터럴(literal)의 사용 • [예제] 리터럴의 사용 • 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) 표현 • [예제] 10진수에 의한 표현 • 0 1 123_456_78- 9987E6 -- 정수 • 0.0 0.5 2.718_28 12.4E-9 -- 실수 • [예제] 밑 수에 의한 표현 • 16#FE -- 16진수 : FE = 정수 254 • 2#1111_1110# -- 2진수 : 11111110 = 정수 254 • 16#D#E1 -- 16진수 : D=13, E1= 161 = 13 x 161 = 실수 208
10.1 조합회로의 VHDL 표현 • 문자(characters literals)의 표현 • [예제] 문자의 표현 • ‘1’, '?', 'B', 'b' • ▪ 문자열(strings literals)의 표현법 • ① 단일문자들의 집합인 문자열은 이중 인용 부호(큰 따옴표: “ ”)에 • 넣어 표시 • ② 한 줄을 벗어나는 길이의 문자열은 접합연산자 &를 사용하여 구성 • [예제] 문자열의 표현 • "B string", "A string in a strong" • ▪ 비트 열(bit string)의 표현 • ① 비트는 단일 인용 부호(작은 따옴표:‘ ’) 사이에 숫자를 넣어 ‘1’ 또는 • ‘0’으로 표시하고, 비트 열은 이중 인용 부호(큰 따옴표:“ ”) 사이에 • 비트 열을 표시 • ② 비트 벡터의 값을 정의하기 위해 사용하며, 기수를 정의하는 문자가 • 앞에 표시되는 수열을 나타내고, 2진수는 B, 8진수는 O, 16진수는 • X로 시작 • [예제] 비트열의 표현 • B"1010110" -- 2진수로 bit의 길이가 7 • O"127" -- 8진수로 bit의 길이가 9이며, 2진수로 “001_010_111”과 동등 값 • X"FF" -- 16진수로 bit길이가 8이며, 2진수로 “1111_1111”과 동등 값
10.2 멀티플렉서를 위한 VHDL 모델 • 2-to-1 멀티 플렉서 • F = A’·I0 + A · I1 로 표현 되며 아래 두가지 방법으로 표시 할 수 있다. • F <= (not A and I0) or (A and I1) • F <= I0 when A=‘0’ else I1; • 조건부 신호 할당문 • signal_name <= expression1 when condition1 • else expression2 when condition2 • [else expression N]; • [예] 직렬로 연결된 2개의 2-to-1 멀티플렉서
10.2 멀티플렉서를 위한 VHDL 모델 • 4-to-1 멀티 플렉서
10.3 VHDL 모듈 • 설계단위의 VHDL 구문 예 • [예제] 설계단위의 예 • <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입력 NOR게이트 설계
10.3 VHDL 모듈 • VHDL의 기본 구성 • ▪ 필수적인 설계단위 - 엔티티(entity)와 아키텍처 몸체(architecture body) • ① 제1단계 : 엔티티(entity)를 선언 • ꋻ 하드웨어 외부의 입ㆍ출력 Interface를 정의한 디지털 시스템의 본체 • ꋻ 하드웨어 블럭의 이름과 입ㆍ출력 port를 선언 • ② 제2단계 : 아키텍처 몸체(architecture body)를 표현 • ꋻ 디지털 시스템인 하드웨어 내부를 표현 • ꋻ 내부회로의 연결, 동작 또는 구조 등을 표현 • ▪ VHDL의 기본구조 [그림] VHDL의 기본 구조
10.3 VHDL 모듈 • VHDL의 설계단위와의 관계 (a) 기본 개념 (b) VHDL code 개념 [그림] VHDL의 기본 설계단위 구조
10.3 VHDL 모듈(엔티티) • 기본 형식 • ▪ 엔티티(entity) 선언 • 설계할 영역의 이름과 외부 환경과의 입ㆍ출력 정보를 나타낸 포트 • (port) 부분을 합한 것 • [예제] 엔티티 선언(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의 마감 [그림] entity nand_2 영역
10.3 VHDL 모듈(엔티티) • [예제] 엔티티 선언(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) 회로도 • [그림] 1비트(bit) 전가산기 회로
10.3 VHDL 모듈(엔티티) • 엔티티(entity)의 일반적 형식 • [형식] 일반적 형식 • entity 엔티티_이름 is • port( 포트_이름 : [모드] 자료형; • 포트_이름 : [모드] 자료형); • end엔티티_이름; • 엔티티(entity)의 모델과 구성 • (a) 엔티티의 모델 • (b)엔티티의 구성 • [그림] 엔티티(entity)의 구조
10.3 VHDL 모듈(엔티티) • 엔티티의 기본활용 • [예제 ] 엔티티 선언(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_입력 NAND게이트
10.3 VHDL 모듈(엔티티) • [예제] 엔티티의 구조(간단한 조합논리회로) • <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 ; • [그림] 간단한 조합논리회로
10.3 VHDL 모듈(엔티티) • 포트(port) 기능의 이해 • 하드웨어 부품(component)상의 단자들을 표현하며 포트의 이름, 신호의 • 흐름 및 자료형으로 나타내는 부분으로 엔티티 내 외부 신호선의 • 연결상태를 기술 • [형식] 포트(port)의 일반적 형식 • port(포트_이름, 포트_이름 : [모드] 자료형; • 포트_이름,포트_이름 : [모드] 자료형); • [예제] 포트(port)의 활용 • port(X, Y, Ci : in bit; • S : inout bit; • Co : out bit);
10.3 VHDL 모듈(엔티티) • 모드(mode)의 종류 • in(안으로) : 입력(input)으로 신호가 해당 엔티티로 들어가는 경우에 사용 • out(밖으로) : 출력(output)으로 해당 엔티티에서 신호가 출력되는 경우에 사용 • inout(안 밖으로) : 입/출력(input/output)으로 해당 엔티티에서 신호가 양방향으로 사용 • buffer(밖으로, 되 읽음) : 출력기능과 같으나, 단지 자신의 신호를 되 읽는 경우에 사용 • linkage : 동작에 영향을 주지 않으며 단지 포트의 연결상태만 나타냄 • [그림] 포트(port)에서 모드(mode)의 종류
10.3 VHDL 모듈(엔티티) • 포트 신호(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)에서 자료의 형태
10.3 VHDL 모듈(엔티티) • 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
10.3 VHDL 모듈(아키텍처) • 아키텍처(architecture) • ꋻ 설계할 회로의 실질적인 내부 동작 또는 각 부품들 사이의 연결구조 • 를 기술하는 부분. • ꋻ 하나의 엔티티 선언에는 여러 개의 아키텍처 몸체(architecture body) • 가 연결 가능. • ꋻ 아키텍처 기술방법은 동작적ㆍ자료흐름적 기법과 구조적 기법. • [예제] 아키텍처 활용(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의 영역
10.3 VHDL 모듈(아키텍처) • [예제 ] 아키텍처의 활용(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 아키텍처_이름; • [그림] 1비트(bit) 전가산기 회로
10.3 VHDL 모듈(아키텍처) • Full Adder
10.3 VHDL 모듈(아키텍처) • 4 bit Full Adder
10.4 신호와 상수 • 객체(data object) • VHDL에서 값을 갖을 수 있는 것으로 모든 객체는 자료형을 갖음 • [예제] 객체의 종류 및 특징
10.4 신호와 상수 • 신호(signal) • ▪ 신호는 VHDL합성시 선(wire)으로 구현되며, 각 부품의 연결에 사용되는 • 외적변수. • ▪ 객체에 값의 대입 • “<=”의 오른쪽에서 왼쪽으로 대입하는 시간지연요소 대입기호를 사용. • signal의 초기값 대입의 경우는 즉시 대입 기호 “:=”사용. • ▪ 자료형의 선언 • bit : 신호의 자료형이 0 혹은 1일 때 단일신호로 사용 • bit_vector : 다중신호를 의미, 신호의 개수를 나타내는 내림차순 • (downto) 또는 올림차순(to)를 사용 [그림]버스 다발과 비트의 순서
10.4 신호와 상수 • [예제] 자료형이 bit인 signal의 선언 • signal a, b, c:bit • -- a, b, c는 객체의 이름 • -- a, b, c의 객체 종류는 signal이므로 선(wire)으로 구현가능 • -- a, b, c의 자료형이 bit형이므로 ‘1', '0'의 두 가지 값을 갖음 • [예제] signal의 활용 • <VHDL 구문> • 1 entity combi_logic is • 2 port ( a, b : in bit; • 3 z, y : out bit); • 4 end combi_logic; • 5 architecture data_flow of combi_logic is • 6 signal s1, s2 : bit; -- architecture와 begin사이에 선언 • 7 begin • 8 s1 <= a; -- 신호 a를 s1으로 전달 • 9 s2 <= b; -- 신호 b를 s2로 전달 • 10 z <= s1 or s2; -- "s1 or s2"를 z에 전달 • 11 y <= s1 and s2; -- "s1 and s2"를 y에 전달 • 12 end data_flow; [그림] 간단한 조합논리회로
10.4 신호와 상수 • [예제] signal의 선언(자료형: bit_vector) • 1 signal count : bit_vector (3 downto 0) ; • -- signal count(3), count(2), count(1), count(0) : bit와 동일한 선언 • -- count를 4 비트 bus로 선언 • 2 signal temp : bit_vector (3 downto 0):="1100"; • -- temp를 4 비트 bus로 선언하고 초기값 대입 • [예제] signal 선언의 활용 • <VHDL 구문> • 1 entity combi_system is • 2 port ( x1, x2, x3 : in bit ; -- signal x1, x2, x3 선언 • 3 y_out : out bit ); -- signal y_out 선언 • 4 end combi_system; • 5 architecture example of combi_system is • 6 signal s0 : bit ; -- signal s0 선언, signal 선언위치 • -- : architecture와 begin사이 • 7 begin • 8 s0 <= x1 nand x2 ; -- signal에 파형 대입 • 9 y_out <= s0 xor x3 ; -- s0과 x3를 exclusive하여 • 10 end sample; -- y_out에 대입 [그림] 간단한 조합회로 system
10.4 신호와 상수 • 변수(variable) • process나 부프로그램에서만 사용되는 내적변수로서 중간연산단계에 주로 이용, 대입기호 즉시 • 대입기호 ‘:=’ 사용 • [예제] 변수 선언방식 • variable temp1, temp2:bit; -- variable_이름이 temp1, temp2로 정의, 자료형은 bit • temp1 := '1'; -- :=는 즉시 값이 대입 • temp2 := a or b; -- a, b 는 signal이고, temp2는 variable • [예제] 3입력 NAND 게이트 • <VHDL 구문> • 1 architecture example of nand_system is • 2 begin • 3 process (x, y, z) • 4 variable temp : bit; -- variable 선언, variable 위치 process와 begin사이 • 5 begin • 6 temp := '1' ; -- temp가 즉시 ‘1’로 바뀜 • 7 temp := x nand temp ; -- variable의 즉시 대입, temp=x • 8 temp := y nand temp ; -- temp=x · y • 9 temp := z nand temp ; -- temp=x · y · z • 10 y_out <= temp ; -- signal에 variable의 시간지연 대입, y_out=x*y*z • 11 end process ; • 12 end example ; [그림] 엔티티 nand_system
10.4 신호와 상수 • 신호(signal)와 변수(variable)의 비교 • ▪ 신호(signal) • ꋻ 외부 변수 • ꋻ 선언 : architecture와 begin 사이에서 선언, 부프로그램에서 선언, • port signal에서 선언 • ꋻ 합성시 wire로 구현되며, 비교적 간단한 연산이 요구될 때 이용 • ꋻ signal에 값(파형)이 인가될 때 현재의 변화된 값이 바로 대입되지 • 않고 process가 끝난 시점에 대입 • 변수(variable) • ꋻ 내부 변수 • ꋻ 선언 : process와 begin 사이에서 선언,부프로그램의 parameter에서 • 선언 • ꋻ 합성시 선(wire)로 바로 구현되지 않고 연산의 중간단계로 활용 • ꋻ 복잡한 알고리즘의 구현시 사용되며, 현재의 값만 가짐 • ꋻ process와 subprogram내에서만 유효, 이 영역을 벗어나면 variable • 값이 무효
10.4 신호와 상수 • [예제]signal과 variable의 사용상 차이점 • signal이 잘못 사용한 예 • <VHDL구문> • 1 architecture example1 of nand2_system is • 2 signal temp : bit ; -- signal 선언 (architecture와 begin사이) • 3 begin • 4 process (x, y) • 5 begin • 6 temp <= '1' ; -- 현 시점에서는 temp = '0', end process에서 temp ='1' • 7 temp <= x nand temp; -- end process에서 temp =‘1' • 8 temp <= y nand temp; -- end process에서 temp =‘1' • 9 z_out <= temp; -- end process에서 z_out = ‘1' • 10 end process ; • 11 end example1 ; [그림] 두 입력 AND게이트(entity nand2_system)
10.4 신호와 상수 • variable을 사용한 문제 해결 • <VHDL 구문> • 1 architecture example2 of nand2_system is • 2 begin • 3 process (x, y) • 4 variable temp : bit ; -- variable선언 (process와 begin사이) • 5 begin • 6 temp := '1' ; -- temp가 즉시 '1'로 바뀜 • 7 temp := x nand temp ; -- temp = (x*1)' • 8 temp := y nand temp ; -- temp = (x*y)' • 9 z_out <= temp ; -- z_out = (x*y)' • 10 end process ; • 11 end example2 ;
10.4 신호와 상수 • 상수(constant) • 초기에 선언한 상수의 값을 유지하는데 사용하며, 고정된 값을 갖음 • [형식] 상수의 선언 방식 • constant상수_이름 : 자료형[:= 초기값] ; --상수선언과 초기화 • [예제] 상수의 활용 • constant delay : time :=5ns -- constant 선언 • constant size : integer :=516; -- constant 선언, 초기화 • 문장(statements) • ▪ VHDL의 기본 문장 • ▪ 선언문(declaration statement) • 설계내에서 사용할 수 있는 상수, 자료형, 객체, 부프로그램 등을 • 정의하는데 사용 • 상수(constants) : 리터럴(literal) 숫자, 스트링(strings) • 자료형(types) : 레코드(records) 배열(array) • 객체(objects) : 신호(signal), 변수(variable), 부품(component) • 부프로그램 : 함수(function), 프로시저(procedure)
10.6 VHDL 연산자 • 연산자(operators) 논리 연산자(logic operators) 논리조합을 만드는데 사용하며, bit, boolean, bit_vector를 지원. [예제] 논리연산자의 활용 (bit_vector, bit, boolean) 1 architecture example of combi_logic is 2 signal w, x, y : bit_vector (3 downto 0); 3 signal a, b, c, d : bit ; 4 signal e, f, g, h : boolean ; 5 begin 6 w <= x and y; -- w, x, y는 같은 수의 bit_vector 형임 7 d <= (a and b) and c ; -- a, b, c, d는 같은 bit 형 임 8 e <= (f nand g) xor h ; -- e, f, g는 같은 boolean형 임 9 end example; [표 3.1] 논리 연산자(AND 게이트) [그림] 논리 연산의 논리도
10.6 VHDL 연산자 • 관계 연산자(relational operators) 비교함수를 만드는데 사용되며, 대부분의 자료형을 지원. [예제] 관계 연산자의 사용 1 variable num1 : real := 100.0; 2 variable num2 : bit_vector(7 downto 0) :=('0','0','0','0','0','0') 3 variable num3, num4 : bit_vector(2 downto 0) 4 num1 /= 350.54 -- num1과 350.54는 같지 않음 5 num1 = 100.0 -- num1과 100.0은 같음 6 num2 /= ('1','0','0','0','0','0') -- num2가 오른쪽과 같지 않음 7 num1 > 45.54 -- num1은 45.54보다 큼 8 num2 < ('1','0','0','0','0','0') -- num2가 오른쪽보다 작음 [표] 관계 연산자의 종류
10.6 VHDL 연산자 • 산술 연산자(arithmetic operators) 정수와 실수 등의 숫자형만 지원 가능하며, 다른 자료형의 경우 IEEE1076.3의 numeric_std 패키지 이용. [예제] 산술 연산자의 사용 1 architecture arith of or2 is 2 begin 3 process(a,b) 4 begin 5 y1 <= a+b; -- a 더하기 b 6 y2 <= a-b; -- a 빼기 b 7 y3 <= a*b; -- a 곱하기 b 8 y4 <= a mod b; -- a를 b로 나눈 모듈 9 y5 <= a rem b; -- a를 b로 나눈 나머지 10 y6 <= abs a; -- a의 절대값 11 end process; 12 end arith; [표] 산술 연산자의 종류
10.6 VHDL 연산자 • 순환 연산자(shift operators) 순환 연산자는 1차원적인 bit의 배열이나 부울형을 지원. [표] 순환 연산자의 종류 [그림] 순환 연산
10.6 VHDL 연산자 • [예제] 순환 연산자의 사용 variable sm5 : bit_vector(3 downto 0) :=('1','0','1','1') sm5 sll 1 -- sm5을 1만큼 sll하면 (‘0’,‘1’,‘1’,‘0’) sm5 sll 3 -- sm5을 3만큼 sll하면 (‘1’,‘0’,‘0’,‘0’) sm5 sll -3 -- sm5을 -3만큼 sll하면 srl을 3만큼 한 것과 같음 sm5 srl 1 -- sm5을 1만큼 srl하면 (‘0’,‘1’,‘0’,‘1’) sm5 srl 3 -- sm5을 3만큼 srl하면 (‘0’,‘0’,‘0’,‘1’) sm5 sla 1 -- sm5을 1만큼 sla하면 (‘0’,‘1’,‘1’,‘1’) sm5 sla 3 -- sm5을 3만큼 sla하면 (‘1’,‘1’,‘1’,‘1’) sm5 sla -3 -- sm5을 -3만큼 sla하면 sra을 3만큼한 것과 같음 sm5 sra 1 -- sm5을 1만큼 sra하면 (‘1’,‘1’,‘0’,‘1’) sm5 sra 3 -- sm5을 3만큼 sra하면 (‘1’,‘1’,‘1’,‘1’) sm5 rol 1 -- sm5을 1만큼 rol하면 (‘0’,‘1’,‘1’,‘1’) sm5 rol 3 -- sm5을 3만큼 rol하면 (‘1’,‘1’,‘0’,‘1’) sm5 rol -3 -- sm5을 -3만큼 rol하면 ror을 3만큼 한 것과 같음 sm5 ror 1 -- sm5을 1만큼 ror하면 (‘1’,‘1’,‘0’,‘1’) sm5 ror 3 -- sm5을 3만큼 ror하면 (‘0’,‘1’,‘1’,‘1’)
10.6 VHDL 연산자 • 연결 연산자(concatenation operators) 연결 연산자는 원하는 새로운 형태의 1차원 배열을 만드는데 편리한 기능 제공 [예제] 연결 연산자의 사용 1 entity con is 2 port(A, B : in unsigned(2 downto 0); -- 입력 A :"100", 입력 B : "010"이라 가정 3 Y : out unsigned(14 downto 0)); -- 출력 Y는 15bit 4 end con; 5 architecture cdma of con is 6 constant C : unsigned(2 downto 0) :="001"; -- C를 상수로 선언하고, 3bit "001" 7 begin 8 process(A, B) 9 begin 10 Y <= A & B & C & C & "110"; -- 최상위 비트부터 “100”, “010”, “001”, 11 end process; -- “001”, "110"이 연결되어 12 end cdma; -- "100010001001110"이 출력 [표] 연결 연산자의 종류
10.6 VHDL 연산자 • 부호 연산자(sign operators) 부호 연산자는 단일 요소 연산자로서 연산자 오른쪽에만 숫자형의 피연산자를 갖음 [예제] 부호 연산자의 사용 1 architecture pone of sign is 2 begin 3 process(A,B) 4 begin 5 Y1 <= +A / (-B); -- 양수 A를 음수 B로 나누어 Y1에 대입하기 6 Y2 <= (-A) + (-B); -- 음수 A와 B를 더하여 Y2에 대입하기 7 Y3 <= A * (-B); -- 양수 A에 음수 B를 곱하여 Y3에 대입하기 8 end process; 9 end pone; [표] 부호 연산자의 종류
10.6 VHDL 연산자 • 연산자의 우선순위(operators priority) • 연산자의 중복(operating overloading) VHDL의 가장 유용한 기능 중의 하나로 어떤 연산자 기호가 피연산자의 자료형에 따라 다르게 동작할 때 연산자가 중복되었다고 함. [예제] ‘0’, ‘1’의 중복기능 부여 type bit is ('0','1'); type multi_value_logic is ('0', '1', 'X'); [표] 연산자의 우선순위