Skip to main content
VHDL - 기초문법
2015.07.17
강의자 : 23기 백두현
목차
 VHDL의 기본구성
 PACKAGE
 ENTITY
 ARCHITECTURE
 병행구문과 순차구문
 PROCESS
 기초문법
 변수
 데이터형
 연산자
 조건문
 Portmap
VHDL 에서 컴파일이란?
 FPGA 내부 구조
VHDL 에서 컴파일이란?
 FPGA 내부 구조
*컴파일 : 논리 합성 가능!
VHDL의 기본구성
VHDL의 기본구성_PACKAGE
 PACKAGE
 단일 목적을 위한 선언(declaration)들의 모임.
 공통적으로 사용되는 선언이나 자원을 공유하기 위한 용도.
 C언어의 라이브러리 및 헤더파일과 같은 기능을 제공.
 VHDL 표준 라이브러리에서 제공하는 PACKAGE
 Standard
 textio
 Env
 std_logic_1164
 Std_logic_arith
VHDL의 기본구성_ENTITY
 ENTITY
 설계 회로의 인터페이스에 관한 정보를 기술한 본체 부분으로서 설계된
블록의 이름과 입출력 포트를 선언.
 PORT의 종류
 IN : 입력, 신호가 해당 ENTITY로 입력되는 경우에 사용.
 OUT : 출력, 해당 ENTITY에서 신호가 출력되는 경우에 사용.
 INOUT : 입출력, 신호가 해당 ENTITY에서 양방향으로 사용.
 BUFFER : 출력 기능 신호에 ENTITY 내에서 다시 읽는 기능을 추가한 것.
 LINKAGE : 동작에 영향을 주지 않으며, 단지 포트로서 연결된 경우에 사용.
VHDL의 기본구성_ARCHITECTURE
 ARCHITECTURE
 Hardware의 내부동작 및 연결상태 표시
ARCHITECTURE_병행구문과 순차구문
 병행구문
 VHDL은 기본적으로
병행구문을 지원한다.
 병행구문이란 동시처리
되는 것을 말한다.
 순차구문
 순차구문이란 C와 같이
위에서부터 순차적으로
처리되는 구문을 말한다.
 VHDL에서는 PROCESS
문을 통해 순차구문을 지
원한다.
ARCHITECTURE_PROCESS
 PROCESS문(순차 처리문)
 기본적으로 병행처리인 VHDL에서 순차적으로 처리를 할 수 있도록 해주는 문법.
 PROCESS문은 감지리스트에 들어가는 식별자가 변화가 있을 때 마다 실행 된다.
 변수는 PROCESS선언과 BEGIN 사이에 선언한다.
 감지리스트에 들어가는 신호는 PROCESS내에서 선언할 수 없다.
ARCHITECTUR_PROCESS
 다중 PROCESS
 주의사항
 하나의 변수를 다른 PROCESS문에
서 값을 대입할 수 없다!!!
 A 변수가 ‘0’을 받을지
‘1’을 받을지 판단 불가!
 해결책
a
0
1
?
a
0
1
sel
기초문법
 beign ~ end
 Entity, architecture, process, if, case등을 사용시 블록을 지정할 때
사용한다.
 C언어에서 { … }와 같은 개념이다.
 주석
 -- : 한 줄을 주석 처리할 때 사용한다.
 여러 줄을 주석 처리?? => 불가
 에디트 프로그램을 통해서 사용가능.
 수 표현
 단일 bit : ‘0’,’1’
 다중 bit : “0000”,”1111”
 (others => ‘1’) == “1111” ex) a <= (others =>’1’) ;
std_logic
 std_logic과 std_logic_vector형
 회로를 합성하는 목적으로 VHDL을 사용할 때, 가장 권장하는 자료형으로서
로직의 다양한 상태를 표현할 수 있음.
 3상태, 연결 논리 등을 표현 할 수 있을 뿐 아니라 같은 신호에서의 다구동을
모델링 할 수 있다.
 std_lgogic
 1 bit의 데이터 register.
 std_logic_vector
 2 bit이상의 데이터 register.
 downto 와 to
 std_logic_vector(7 downto 0);
 std_logic_vetor(0 to 7);
7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7
변수
 SIGNAL
 VHDL 합성 시에 선(WIRE)으로 구현.
 각 부품(COMPONENT)의의 연결에 사용되는 외적 변수.
 대입기호 (‘<=’)
 즉시 대입되는 것이 아닌 VHDL문에서 필요한 어떤 시점에서
대입.
 EX) PROCESS문 내에서는 ‘end process;’를 만나야 대입 완료.
변수
 VARIABLE
 PROCESS나 부 프로그램(FUNCTION,PROCEDURE)에서만 사용.
 VARIABLE의 값은 PROCESS나 부 프로그램 내에서만 유효한 내적 변수.
 VARIABLE은 SIGNAL과 같이 VHDL 합성 시에 선으로 구현되는 것이
아니며, 중간 연산 단계에 주로 사용.
 대입기호(:=) : 즉시대입
변수
 CONSTANT
 CONSTANT는 초기에 선언한 상수의 값을 유지하는데 사용.
 대입기호(:=)
 초기값은 즉시 대입되며, 한 번 대입된 값은 바꿀 수 없다.
연산자
 관계연산자
= 같다(equal to)
/= 같지 않다.(not equal to)
< (왼쪽이) 작다 (less than)
<= (왼쪽이) 작거나 같다 (less than or equal to)
> (왼쪽이) 크다 (greater than)
>= (왼쪽이) 크거나 같다 (greater than or equal to)
연산자
 순환연산자
 쉬프트
 sll : 논리적인 왼 방향 쉬프트
 srl : 논리적인 오른 방향 쉬프트
연산자
 sla : 산술적인 왼 방향 쉬프트
 sra : 산술적인 오른 방향 쉬프트
연산자
 연산자 우선 순위
상위 기타연산자 ** abs not
곱셈연산자 * / mod rem
부호연산자 + -
덧셈연산자 + - &
시프트연산자 sll srl sla sra rol ror
관계연산자 = /= < <= > >=
하위 논리연산자 and or nand nor xor xnor
조건문
 IF문
 IF문은 순차문으로 PROCESS문 내에서 사용됨.
 IF문은 비교기로 생성 된다.
< if문을 이용한 4 to 1 MUX >
조건문 - edge
 event
 rising_edge(falling_edge)
조건문
 CASE문
 CASE문은 순차문으로 PROCESS문 내에서 사용됨
 CASE문은 MUX로 생성 된다.
< CASE문을 이용한 4 to 1 MUX >
Portmap
 Portmap
 모듈간 데이터를 연결 할 때 사용.
모듈_A 모듈_B
Portmap