1.77k likes | 2.88k Views
4. VHDL 문법. 1. VHDL 의 어휘 요소. 1.1 식별어 (identifier) 설계자 또는 개발자가 정의하는 이름 공백을 갖지 않는 문자열 (string) 미리 정해져 있는 지정어 (reserved word) 는 식별어로 사용 불가 식별어의 기본 법칙 길이의 제한은 없다 . 반드시 영문자로 시작되어야 함 식별어에 사용 가능한 문자 영어 대문자 : A~Z 영어 소문자 : a~z 숫자 밑줄 문자 : _
E N D
1. VHDL의 어휘 요소 1.1 식별어(identifier) • 설계자또는 개발자가 정의하는 이름 • 공백을 갖지 않는 문자열 (string) • 미리정해져 있는 지정어(reservedword)는식별어로 사용 불가 • 식별어의 기본 법칙 • 길이의 제한은 없다. • 반드시 영문자로 시작되어야 함 • 식별어에 사용 가능한 문자 • 영어 대문자 : A~Z • 영어소문자: a~z • 숫자 • 밑줄 문자: _ • 밑줄 문자로 시작 불가, 밑줄 문자 연속 사용불가, 밑줄 문자 이외의 특수문자 사용불가 • 가능하면 의미 있는 문자를 사용하는 것이 설계에 유리
식별어의 올바른 표현 • or_gate • fft1 • test_circuit_number_9 • counter • A • 식별어의잘못된 표현 • 8Or_gate:식별어는반드시 영문자로 시작해야 한다. • _fft1:식별어는 밑줄로 시작할 수 없다. • fft1_:식별어는밑줄로 끝날 수 없다. • test_ _circuit_number_9:식별어에밑줄을 연속으로 사용할 수 없다. • counter_A$fft: 식별어에는밑줄을 제외한 특수 문자를 사용할 수 없다. • VHDL은 영어의 소문자, 대문자를 구별하지 않는다. • ENTITY, Entity, entity, EnTity • AND_GATE, And_Gate, and_gate, AND_gate
entityand_gateis port( pin1, pin2 : instd_logic; pin3 : outstd_logic); endentity and_gate; architecture dataflow ofand_gateis begin pin3 <= pin1 and pin2; endarchitecture dataflow; 그림 4.2 식별어 표기의 예
1.2 지정어(reservedword) • VHDL 언어에서 구문을 위해 미리 정의되어 있는 문자열 • 대소문자의 구별이 없다. • 식별어로 사용 불가능.
1.3 리터럴(literals) • 하드웨어를 기술하는데 직접적으로 표현하는 값들과 문자를 의미 • 숫자 리터럴(numberliteral), 문자리터럴(characterliteral), 문자열 리터럴(stringliteral), 비트문자열리터럴(bitstring literal), 특수기호 (special symbol) • 숫자 리터럴-정수, 실수, 진수 표현 • 숫자의 표기 • 정수 리터럴:소수점이 없는 10진수 • 205, 34, 0 • 23_123_456 • 실수 리터럴:소수점을 가진 10진수 • 23.5, 0.34, 54.4E-5 • 23.123_456
진수표기: 10진수 외에 2진수, 8진수, 16진수를 표기 가능함 • 진수 표기 • 진수는 제일 앞에 표시 • 진수 다음에 # 문자로데이터의 앞과 뒤를 나타낸다. • 2진수 리터럴(binaryliteral):0과 1로 구성된 숫자 • 2#1001# • 2#1000_1111# • 8진수 리터럴(octalliteral):0에서 7까지 범위로 구성된 숫자 • 8#2345# • 8#1233_4567# • 16진수 리터럴(hexadecimalliteral):숫자 0~9와 영문자 A~F까지의 범위로 구성 • 16#2FED#
문자리터럴-설계자가 시스템의 이해를 쉽게 하도록 의미를 부여한 문자 • 작은 따옴표 (singlequotation mart, ‘ ‘)를이용해서 표기 • 작은 따옴표 사이에 문자를 넣는다. • 문자 리터럴 사용 예 • Z: 대문자 • z: 소문자 • 표기 예 Ifpin1 = ‘1’ OR pin2=‘1’ then pin3 <=‘1’; Else pin3 <=‘0’; End if;
문자열 리터럴 • 단일 문자들이 여러 개 모인 집합체 • 문자열 표기 • 표기 방법 • 이중 따옴표 “ “ 를 사용하여 표시 • 이중 따옴표 사이에 필요한 문자열을 넣음 • 한 줄에 넣기 어려울 때는 결합 연산자 ‘&’를사용 • 결합 연산자 ‘&’ 사용예 “VHDL stands for BHSIC (very high speed integrated circuit)” & “ hardware description language” • 문자열 리터럴 사용 예 • “string literal”, “AAAA”, “1234567” • “01100100”
비트 문자열 (bit string) • 비트(bit)들의집합 • 비트 벡터의 값을 표기할 때 사용 • 진수 리터럴과 비슷하게 사용 • 이중 따옴표를 사용 • 진수 표시를 위해 특별한 의미를 갖는 문자 B, O, X 를사용 • 표기 방법 -이중따옴표인 “ “ 를 사용하여 표기 -이중따옴표 사이에 필요한 값을 넣음 -진수 표기를 위해 다음과 같은 문자 사용 -2진수 표기 문자: B 또는 b b”110001” 또는 B”110001” -8진수 표기 문자: O 또는 o O”123” 또는 o”123” -16진수 표기 문자: X 또는 x X”123AB” 또는 x”123AB”
특수기호 (special symbol) • 연산자표기 • 우선 순위와 같은 언어의 구분 한계를 정하거나 문자의 끝을 표기 하기 위해 사용
2. 엔티티와 아키텍처 • 엔티티 (entity) :하드웨어의입출력 인터페이스 정의 • 아키텍처 (architecture): 하드웨어내부회로의 연결 및 동작, 구조 등을 기술 • “외부 인터페이스의 명세와 내부회로의 동작 및 구조 표현의 구현으로 분리한다.회로설계에 있어 원하는 동작을 구현하는 방법이 다양하기 때문이다. • VHDL에 의한 회로 설계 단계 정리 • 1단계 (인터페이스 정의): 엔티티 선언 • 하드웨어 외부 입출력 인터페이스 정의 • 하드웨어 블록의 이름과 입출력 포트를 선언 • 2단계 (구조 설계):아키텍처 선언 • 하드웨어 내부 기술 • 내부회로의 연결 및 동작 또는 구조를 기술
2.1 엔티티 • 게이트, ALU, 마이크로프로세서 등과 같은 하드웨어 설계 대상체를 의미 • 설계 대상회로의 이름, 입출력 인터페이스, 하드웨어 검사 및 동작에 필요한 설계 매개변수를 정의하는 가장 기본이 되는 블록 • 엔티티 표현 형식 • entity 최소 선언의 예
1. 엔티티 헤더 • 외부와의 연결이나 설계 인테티를 매개변수화 시키기 위해 사용되는 개체를 정의하기 위한 부분 • 범용문 (generic)과포트 (port) 등이포함 • 범용문은 포트문보다 앞에서 정의 되어야 함 • 포트 (port) 문-외부와의 연결을 의미, 하드웨어 구성의 핀 (pin) 또는연결된 핀 그룹 (bus)를표현 • port 문의 형식 [port(포트이름 { ,포트_이름): [모드] 자료형[:= 표현] {; 포트이름 ( ,포트_이름): [모드] 자료형[:= 표현] });] 포트 이름:외부 입출력 신호선의 이름을 정의 모드:신호 흐름의 방향 및 성격을 나타냄
엔티티에서 포트 선언의 예 entity entity_name is port( a: instd_logic ; -- 입력포트를정의 b: instd_logic:= ‘1’; --초기값을 정의 c: outstd_logic; --출력 포트를 정의 d: inoutstd_logic; --입출력포트를 정의 e: bufferstd_logic); --버퍼포트를 정의 end entity entity_name;
범용문 (generic) • generic 표현 형식 [generic(범용문_이름{, 범용문_이름} : 자료형[:=표현]{ 범용문_이름 {, 범용문_이름}; 자료형[:= 표현]});] • 범용문: 설계 엔티티를 매개 변수화 시키는 작업 • 회로의 특정 크기나 개수에 국한 시키지 않고 설계 매개변수 (parameter)에의해 결정하도록 일반화하기 위해 사용 • 지연, 타이밍, 비트 수, 부 컴포넌트 수 등을 회로 내에 전달 • 컴포넌트 내에서도 선언 • 사용되는 매개 변수로 사용되는 객체는 상수, 기본적으로 입력모드인 in으로 되어 있어 명시할 필요 없음
엔티티에서 선언 예 • COMPONENT에서 선언 예
2. 엔티티 선언문 • 아키텍처에서 사용할 객체(object) 및부프로그램 등을 선언하여 사용 • 하나의 엔티티에 여러 개의 아키텍처가 존재 가능공통으로 사용하는 것을 각기 따로 선언하는 것보다 이 부분에서 선언함으로써 모든 아키텍처에서 사용하는 것이 효과적 • 엔티티 선언문에서 사용 가능한 문장. • alias :객체에대한 이름을 재정의 • attribute :객체에대한 추가적인 정보를 부여 • constant :값에이름을 부여 • disconnection :보호된신호의 단절을 위한 시간 지연 • file :file을 제한 • signal :특별한형태의 신호를 정의 • sub-program :function이나 procedure를 정의 • subtype :명확한이름을 부여하거나 제한 • type :자료형을정의 • use :라이브러리나패키지에 정의된 내용을 가시화
3. 엔티티 문장 • 회로 내에서 사용되는 신호의 setup/hold, 펄스폭 등의 검사 및 감시와 결과문의 출력을 위해 사용 • 엔티티 선언문과 통일하게 한 번의 선언에 여러 개의 아키텍처에서 공용으로 사용 • 엔티티 문에서 사용 가능한 문장 • concurrentassert 문 • concurrentprocedure call • passive process • 엔티티문의 사용 예
2.2 아키텍처(architecture) • 하드웨어내부의 동작 및 각 부품들 간의 연결구조를 기술 • 하드웨어 설계를 하는 곳 • 엔티티와 아키텍처는 서로 독립적 • 아키텍처 선언 형식 architecturearchitecture_nameofentity_name is {architecture_declaration_part} begin {architecture_statement_part} end [architecture][architecture_name]; • architectureEx_And_behavof And_gate is : 아키텍처이름이 ex_end_behav이고 이것을 And_gate라는 엔티티와 결합 시킴
1. 아키텍처 선언부 • architecture외 begin 사이에 선언부를 기술 • 아키텍처에 사용할 신호, 상수, 변수 자료형, 컴포넌트 등을 선언 • 하드웨어를 기술하기 위한 내부 문장에서 사용 • 아키텍처 선언문에서 사용 가능한 선언 문장 • alias :객체에대한 이름을 재 정의 • attribute :객체에대한 추가적인 정보를 부여 • constant :값에이름을 부여 • disconnection :보호된 신호와 단절을 위한 시간지연 • file :file을제한 • signal :특별한형태의 신호를 정의 • sub-program :function 이나 procedure를정의 • subtype :명확한이름을 부여하거나 제한 • type :자료형을정의 • use :라이브러리나패키지에 대한 정의된 내용을 가시화 • group :목록들을그룹으로 정의 • function :새로운수학적, 논리적 함수 정의
아키텍처 선언의 예 architectureex-logic of logic is signal w, x: std_logic; --신호의 선언 begin w<= a or b; x<=b and c; …. end architecture;
2. 아키텍처 문장 부분 • 아키텍처 문장은 begin과 end 사이에 위치 • 하드웨어 내부 동작, 연결 구조 등을 기술 • 문장을 순차적 처리를 위한 프로세스 (process) 문, 자료의 흐름적 표현을 위한 병행 할당문 (concurrentassignment statement), 구조적표현을 위한 컴포넌트 문 (componentstatement), 일반구조나 조건 구조를 생성하기 위한 생성문 (generationstatement) • 문장 수행에 의한 분류 • 병행문(concurrent statement) • 순차문 (sequentialstatement) • 내부 표현에의한 분류 • 동작적 표현 (behavioralrepresentation style) • 자료 흐름적 표현 (dataflow representation style) • 구조적표현 (structuralrepresentation style) • 혼합적표현 (mixedrepresentation style)
문장수행에 의한 분류 • 순차적으로 수행하는 순차문, 병행적으로 수행되는 병행문 • 병행문:실제 디지털회로의 모든 구성요소들이 동식에 동작하는 하드웨어 특성을 반영 • 순차문:일반 프로그램 언어와 같이 순차적 특성, 병행문인 프로세스 내에서만 기술 가능
순차문(sequentialstatement)의예 --전 가산기에 대한 병행문 기술
내부 표현에 의한 분류 • 동작적 표현 방법:회로 구조와 상관없이 일반 프로그램 언어를 사용해 알고리듬을 표현하는 것과 유사한 형태의 기술 방법 • 구조적 표현 방법:회로 구조의 연결 상태를 기술한 기술 방법 • 자료 흐름적 표현 방법:연산자나 함수 등을 이용하여 RTL (register transfer level)의 신호 흐름을 기술한 방법
동작적 표현 방법 • 인간의 생각과 가깝게 하드웨어를 기술하는 방법 • 추상적 표현 방식-가장 상위 레벨에 속함 • 컴퓨터 프로그램과 같은 방법으로 하드웨어 설계, 수학적인 알고리듬을 이용 • 주로 프로세스 문을 사용 • 설계초기 단계에서 알고리듬의 검증또는 하드웨어에 다한 지식이 없는 개발자가 사용
자료흐름적 표현 • 동작적 표현 보다는 하드웨어에 근접하게 표현 • 부울대수, 레지스터 전송언어, 연산자 등을 상용하여 입력으로부터 출력까지 경로에 대한 표현 • 순차동작이 아닌 병행 동작 • 신호 할당문을 통해 자료의 흐름을 기술
구조적 표현 방법 • 가장 하드웨어에 가까운 하위단계를 표현 • 게이트 수준 설계 가능 • 컴포넌트와 이들과의 상호 연결관계를 잘 기술 • 컴포넌트를 불러서 사용하드웨어 각 기능을 블록으로 구분하여 컴포넌트로 표현, 상호간인터페이스 정의 후 시스템 설계 가능
혼합적 표현 • 앞의 세가지 표현을 혼합하여 작성 2.3 구성 (configuration) • 설계엔티티와 아키텍처의 연결관계, 즉, 결합 정보를 기술하는 곳 • 탑 다운 설계 방법에 유익 • 구성선언과 구성명세로 이루어 짐 1. 구성 선언 • 부품의 라이브러리화나 그룹 선언 및 아키텍처를 지정하여 명세화하드웨어 설계의 변경 및 재사용 시에 아키텍처 변경 없이 수정 • 구성선언-설계를 계층적 (hierarchical)으로 구현
2. 구성 명세 (configurationspecification) • 부품의인스턴스 대신에 사용되는 엔티티나 아키텍처를 정의 • 단일 부품의 범용문장과 포트의 형 (type)과 이름의 차이을 규정하기 위해 사용 • 구성 명세 선언 형식 forinstance_label :component_name [use entity library_name.entity_name (architecture_name); | use configuration library_name.configuration)name;] [GenericMap] [PortMap]; • 구성명세의 선언 위치 architecture~ is <configuration_spec declaration> begin~end; block<configuration_spec declaration> begin~end; generate <configuration_spec declaration>begin~end;
2.4 패키지 (package) • package:VHDL소스 코드 저장 장소 • VHDL에서 공동으로 사용할 수 잇는 자료형, 함수, 프로시저, 부품 등을 따로 저장해서 모아 둔 것 • 자주 사용되는 것을 아키텍처에서 매번 정의하지 않고, 단 한번의 기술로 여러 설계에서 공통으로 사용할 수 있게 한 것. • 패키지는 정의된 라이브러리에 저장 • use 문을이용해 설계에 포함 시킴 • 패키지 사용형식 uselibrary_name.package_name.ALL;
1. 패키지 선언 • 외부와의 인터페이스 역할, • 자료형, 함수, 프로시저, 부 프로그램, 컴포넌트 등의 내용을 외부에서 접근, 사용 • 패키지 표현 형식 packagepackage_nameis {package-declaration_item) end [package][package_name]; • 패키지는패키지 이름으로 구분되며, use를 통해 접근 • 사용하는 패키지가 현재 작업 디렉터리에 있으면 라이브러리는 work가 된다. usework.package_name.all; • 패키지선언 목록 • subprogram-- function 또는 procedure • type, subtype • constant, signal, file • alias, component • attribute • disconnection • use, clause • group