제5장 PLD의 이해와 실습

18
2006년 1학기 논리설계 실험 제5장 PLD의 이해와 실습 실험의 목표 - 프로그래머블 논리소자인 PAL 과 PLA, EPROM, CPLD 등에 대하여 이해한다. - MAX PLUS II를 이용하여 CPLD 프로그램 하는 방법을 배운다. - CPLD 굽는 법에 대하여 익힌다. - VHDL 간단한 표현과 문법에 대하여 소개를 한다. 실험 도움 자료 1. PLD(Programmable Logic Device) PLD는 사용자가 필요로 하는 논리기능을 직접 program 하여 사용할 수 있는 IC를 말한 다. PLD에는 다음과 같은 종류가 있다. A. PROM(Promgrammable Read Only Memory) 한 개의 디코더(AND 배열부분)와 메모리셀(Memory array)의 이차원 배열(OR 배 열)로 이루어져 있다. B. PLA(Programmable Logic Array) PLA는 AND 배열과 OR 배열의 두 구조로 나누어지는데 PROM과 달리 AND 배열 은 입력에 관한 어떤 논리곱을 표현할 있고, OR 배열은 앞에서 구현된 논리곱들의 논리합을 구현할 수 있다. 이는 SOP(Sum of Product) 구현에 잘 맞는 구조이다. 그러나 이 구조는 두개의 배열을 통해서 신호가 전달되므로 delay를 가지는 단점 을 가지고 있다. C. PAL(Programmable Array Logic) PAL은 PLA의 구조와 비슷하게 이루어져 있다. 그러나 PAL은 AND 배열은 사용 자가 프로그램 할 수 있고, OR 배열은 고정되어있다. 때문에 생산 비용이 비교적 적게 들고, 속도가 빠른 편이다. D. SPLD(Simple Programmable Logic Device) PAL과 거의 유사한 구조를 가지고 있는데 사용자가 사용할 수 있는 게이트의 개 수는 약 200개 정도이다. E. CPLD(Complex Programmable Logic Device) CPLD는 Altera에서 상업용으로 제품화되어 쓰이고 있다. 메모리나 특별한 논리함 수를 구현하기 위한 Embedded Array Block을 가지고 있다. CPLD는 빠른 성능이

Transcript of 제5장 PLD의 이해와 실습

Page 1: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

제5장 PLD의 이해와 실습

실험의 목표

- 프로그래머블 논리소자인 PAL 과 PLA, EPROM, CPLD 등에 대하여 이해한다.

- MAX PLUS II를 이용하여 CPLD 프로그램 하는 방법을 배운다.

- CPLD 굽는 법에 대하여 익힌다.

- VHDL 간단한 표현과 문법에 대하여 소개를 한다.

실험 도움 자료

1. PLD(Programmable Logic Device)

PLD는 사용자가 필요로 하는 논리기능을 직접 program 하여 사용할 수 있는 IC를 말한

다. PLD에는 다음과 같은 종류가 있다.

A. PROM(Promgrammable Read Only Memory)

한 개의 디코더(AND 배열부분)와 메모리셀(Memory array)의 이차원 배열(OR 배

열)로 이루어져 있다.

B. PLA(Programmable Logic Array)

PLA는 AND 배열과 OR 배열의 두 구조로 나누어지는데 PROM과 달리 AND 배열

은 입력에 관한 어떤 논리곱을 표현할 있고, OR 배열은 앞에서 구현된 논리곱들의

논리합을 구현할 수 있다. 이는 SOP(Sum of Product) 구현에 잘 맞는 구조이다.

그러나 이 구조는 두개의 배열을 통해서 신호가 전달되므로 delay를 가지는 단점

을 가지고 있다.

C. PAL(Programmable Array Logic)

PAL은 PLA의 구조와 비슷하게 이루어져 있다. 그러나 PAL은 AND 배열은 사용

자가 프로그램 할 수 있고, OR 배열은 고정되어있다. 때문에 생산 비용이 비교적

적게 들고, 속도가 빠른 편이다.

D. SPLD(Simple Programmable Logic Device)

PAL과 거의 유사한 구조를 가지고 있는데 사용자가 사용할 수 있는 게이트의 개

수는 약 200개 정도이다.

E. CPLD(Complex Programmable Logic Device)

CPLD는 Altera에서 상업용으로 제품화되어 쓰이고 있다. 메모리나 특별한 논리함

수를 구현하기 위한 Embedded Array Block을 가지고 있다. CPLD는 빠른 성능이

Page 2: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

나 정확한 타이밍의 예측이 필요로 하는 곳에 적합하다.

F. FPGA(Field Programmable Gate Array)

FPGA는 CPLD와 달리 PLD의 블록간의 연결에 Array 구조와 Row 구조 두 가지

의 형태를 사용한다. 내부 SPLD 블록간에 segmented interconnect라는 방법을 사

용하게 구현되어있는데, 이는 내부 연결 길이를 변경시킬 수 있다. 그러므로 연결

상태에 따라 라우팅 딜레이가 다르게 되어 타이밍 예측이 어렵고 논리 소자의 성능

또한 CPLD 구조에 비해 떨어진다. 그러나 사용할 수 있는 게이트의 용량은 CPLD

보다 많다.

2. MAX PLUS II 에서 CPLD program

여기서는 MAX PLUS II 를 사용하여 2:1 MUX의 schematic을 그리고 CPLD를 굽기

위한 file을 생성시키는 예를 수행해보도록 한다.

<참고>

MUX(Multiplexer)는 2n 개의 입력과 n bit의 selector를 이용하여 여러 개의 입력

중 하나를 출력으로 내보내는 논리소자이다. 즉, 4:1 MUX 의 경우 2 bit의

selector를 이용하여 4개의 입력 중 1개만을 출력으로 내보낸다. 4:1 MUX의 경우

다음과 같은 진리표를 가진다.

I3 I2 I1 I0 S1 S0 Out

X X X X 0 0 I0

X X X X 0 1 I1

X X X X 1 0 I2

X X X X 1 1 I3

표 4-1. 4:1 MUX의 진리표

표 1.을 보면 Selector의 값이 0인 경우(“00”) 첫 번째 입력이, 1인 경우(“01”) 두

번째 입력이, 2인 경우(“10”) 세 번째 입력이, 3인 경우(“11”) 네 번째 입력이

출력으로 나가는 것을 확인할 수 있다.

여기서는 이러한 MUX에 대한 기본적인 지식만 가지고 Max+plus II 사용법을

익히는 데 중점을 두고 설명한다. (MUX에 대한 자세한 내용은 5장에서 다룬다.)

1) MAX PLUS II 를 실행시키고 새로운 파일을 생성한다. (여기서는 schematic 을

이용하여 기술할 것이므로 graphic editor file(.gdf)를 선택한다.

Page 3: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-1] .gdf file 생성

2) Symbol 탭의 Enter Symbol (또는 schematic 상에서 더블 클릭) 을 선택하여

기본 논리 소자를 가져와 MUX를 설계한다.

[그림 5-2] 기본소자를 가져오는 창

Page 4: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

2:1 MUX 의 input을 I1, I0, Selector를 S, Output 을 O 라고 했을 때

O = S’*I0 + S*I1

으로 표현될 수 있다. 따라서 and, or, inverter gate를 이용하여 다음과 같이 디자인할 수

있다.

[그림 5-3] 2:1 MUX 의 schematic

3) Assign 탭의 Device 를 선택해서 Device family 를 MAX7000S로 Devices를

EPM7064SLC44-5로 설정한다.

[그림 5-4] device 선택 (우리가 사용할 CPLD 종류를 선택하는 것입니다.)

4) File을 저장하고 File 탭의 Project->Set Project to Current File 을 클릭해서

Project를 만든다

Page 5: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-5] schematic을 저장

5) MAX+plus II 탭의 Compiler를 이용해서 compile 한다. (이때 .pof file이

생성되는데 이 파일을 WACCESS라는 프로그램을 이용하여 CPLD에 굽는다.)

[그림 5-6] MAX+plus II 의 compiler

위의 그림에서 start를 click 해서 compile을 수행한다.

Page 6: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-7] error 없이 수행된 compile 과정

schematic에 문제가 없다면 compile이 수행되고 위와 같은 메시지가 뜬다.

[그림 5-8] .pof file의 생성

Page 7: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

CPLD를 구울 때 사용할 .pof 파일이 생성되었는지 확인해볼 수 있다.

6) 내가 원하는 pin으로 특정 포트를 보내고 싶은 경우에는 포트(입력, 출력)들의

pin 번호를 수동으로 정해준다.

Assign 탭의 Pin/Location/Chip… 을 선택하면 다음과 같은 창이 뜬다.

[그림 5-9] Pin 번호를 assign 하는 창

이 창에서 Search를 click하여 우리가 사용하는 포트들을 불러온다.

[그림 5-10] Node Data Base 창

Page 8: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

이 창에서 List를 click 하면 위와 같이 우리가 디자인한 schematic에 존재하는 port

들이 표시된다. 여기서 각각의 port를 선택하여 그림 5-5 에 표시되게 한 후 그림 5-5

의 Pin에서 사용하고자 하는 Pin의 번호를 선택한다. (Pin 에는 VCC, GND 로 사용되는

특별한 포트를 제외한 available한 port 번호들이 나열되어 있다)

위와 같은 과정을 거쳐 Pin 번호를 모두 assign한 결과는 다음과 같다.

[그림 5-11] Pin 번호 지정

schematic에도 실제 CPLD 칩에서의 Pin 번호가 다음과 같이 표시되는 것을 볼 수 있다.

[그림 5-12] Pin 번호가 assign 된 schematic

Page 9: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

이렇게 Pin 번호를 assign 한 후 다시 컴파일을 수행한다.

7) MAX+plus II 탭의 Waveform editor를 이용해서 시뮬레이션한다. (만약 원하는

결과를 얻지 못했을 경우 schematic을 debugging 해서 다시 compile한다.)

시뮬레이션의 자세한 부분은 1장을 참고

Waveform editor를 띄우고 input, output pin을 가져오고, 시뮬레이션을 하기 위해 wave

를 설정한다.(1장 참고)

[그림 5-13] waveform editor 설정

위 그림의 경우 S는 200ns, I0는 400ns, I1은 800ns 가 주기로 설정되어있음을 알 수

있다.

[그림 5-14] simulator

Page 10: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

simulator를 띄우면 위와 같은 창이 나온다. Start를 click해서 시뮬레이션을 시작한다.

[그림 5-15] 잘 수행된 simulator

특별한 error가 없는 경우 위와 같은 메시지 창이 뜬다.

시뮬레이션 결과를 알기 위해 그림 5-11의 Open SCF를 click해서 확인한다.

[그림 5-16] 시뮬레이션 결과

MUX의 특성이 올바르게 구현되었음을 확인할 수 있다.

3. CPLD 굽는 법

programmable logic 구현의 마지막 단계는 MAX+plus II 에서 구현한 로직을 CPLD에

download 하는 것이다. 이러한 과정을 굽는다고 표현한다.

이 강좌에서는 ALL-11 (serial port로 PC에 연결하여 chip을 굽는 하드웨어) 이라는

kit과 WACCESS 라는 프로그램을 이용하여 CPLD를 굽는다.

WACCESS 를 실행시키면 다음과 같은 메인화면이 뜬다.

Page 11: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-17] ALL-11 main 화면

여기서 Device 탭을 선택하면 vendor와 chip 이름을 차례로 선택할 수 있다. 우리는

Altera 사의 EPM7064SLC 라는 CPLD를 사용한다.

[그림 5-18] vendor 선택 화면

여기에서 Altera를 선택하면 다음과 같이 Altera 의 CPLD 이름들이 나열된다. 여기서

MAX7000S 계열의 EPM7064SLC44 를 선택한다.

Page 12: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-19] CPLD 를 선택

CPLD를 고르고 나면 다음과 같은 화면이 뜬다.

[그림 5-20] CPLD를 굽기 위해 .pof를 load 해야한다.

여기서 File 탭의 Load POF_FILE to programmer buffer를 선택해서 굽고자 하는 .pof

file을 load 해온다.

Page 13: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

File을 load 한 후 그림 5-20 에서 Program을 선택하면 program 하는 마지막 과정인

다음 창이 뜬다.

[그림 5-21] program 창

Run을 click 하면 CPLD가 구워진다.

4. VHDL overview

VHDL의 다섯 가지 design unit

VHDL은 다음과 같이 크게 다섯 가지의 design unit을 가지고 있다.

◆ Entity 선언 unit : 설계 회로의 interface에 관한 정보 기술

◆ Architecture body unit : 설계 회로의 내부 동작 또는 연결 구조 기술

◆ Configuration 선언 unit : 시뮬레이션이나 합성을 수행하기 위한 entity unit에

결합하는 architecture body unit 및 관련 결합 정보 기술

◆ Package 선언 unit : 서로 다른 design unit 및 설계자가 공유할 정보의 선언

◆ Package body unit : package 선언 unit에서 선언한 것 중에서 function과

procedure의 내부적 동작을 기술

이 장에서 우리는 Entity와 Architecture의 간단한 구조만을 살펴보도록 한다.

VHDL library

VHDL에서 IEEE의 공인 library를 사용하기 위해 library IEEE; 라는 명령어를 처음에

Page 14: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

추가한다.

일반적으로 많이 사용하는 library와 내용은 다음과 같다.

std_logic_1164 (std_logic types & related function)

std_logic_arith (arithmetic function)

std_logic_signed (signed arithmetic functions)

std_logic_unsigned (unsigned arithmetic functions)

use를 사용해서 이 library들을 사용할 수 있도록 한다.

(E.g. use ieee.std_logic_1164.all; )

Entity와 Arichitecture 기본 구조

Entity는 design 할 component의 이름과 입출력 interface를 정의하는 부분이다. 이외에

하드웨어 검사 및 동작에 필요한 설계 매개 변수를 전달하고 여러 architecture body에서

공통으로 사용할 것을 선언한다. Arichitecture 는 Entity에서 선언된 하드웨어의 내부 동

작이나 연결상태를 정의하는 부분이다.

이 두 부분은 VHDL의 가장 기본적인 구조를 이룬다.

Page 15: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

[그림 5-22] VHDL의 기본 구조

generics는 내부에서 사용할 값들을 일반화 시켜서 문자로 사용하기 위해 쓴다.

E.g.) Generics(constant tplh, tphl : time := 5ns;

tphz, tplz : time := 3ns;

default_value : integer :=1;

);

port는 입력과 출력 interface를 기술한다.

E.g.) port (

a : in std_logic;

b : in std_logic;

c : out std_logic

);

이 장에서는 VHDL의 기본 구조를 익히도록 한다. 여기서 생략된 부분이나 각 부분에

대한 간략한 문법은 이 장의 뒤나, 추후에 나오는 장의 VHDL code를 보면서 익히도록

한다.

보다 자세한 설명은 과목 홈페이지의 VHDL reference를 참고하라.

( http://davinci.snu.ac.kr/courses/logic_lab/2004/reference/vhdl_ref.pdf )

Process statement

기본적으로 Architecture의 begin과 end 사이에 있는 명령어나 process는 concurrent

하게 동작한다. 이것은 하드웨어의 기본적인 특성을 생각하면 쉽게 이해할 수 있다.

따라서 architecture의 body에 순서대로 되어있다고 해서 순차적으로 수행된다고

생각해서는 안 된다.

그러나 Process 로 묶여진 부분 안에서는 명령이 순차적으로 실행된다. 즉,

architecture의 body에 여러 process가 있는 경우 여러 가지 process들은 동시에

병렬적으로 수행되고 그 process 내부의 명령들은 순차적으로 수행된다.

5. 4:1 MUX 를 위한 VHDL 프로그램

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

Page 16: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

use ieee.std_logic_signed.all;

entity MUX4_1 is

port (

S : in std_logic_vector(1 downto 0);

A : in std_logic_vector(3 downto 0);

O : out std_logic

);

end MUX4_1;

architecture behav of MUX4_1 is

begin

process(A, S)

begin

case s is

when "00" => O<=A(0);

when "01" => O<=A(1);

when "10" => O<=A(2);

when "11" => O<=A(3);

when others => NULL;

end case;

end process;

end behav;

표 4-2. 4:1 MUX 의 VHDL source code

MAX+plus II에서 VHDL 로 CPLD를 프로그램하는 과정도 위에서 설명한 schematic을

이용한 방법과 같다. 2. 1) 에서 .gdf 파일을 생성하는 대신 .vhd 의 text editor file을

생성하고 2. 2)에서 schematic을 작성하는 대신 vhdl code를 작성하면 된다. 나머지

과정은 위와 동일하다.

예비보고서

1. PLA, PAL, 그리고 ROM에 대하여 각각의 특징과 장단점을 비교하여라. 그리고, field-

programmable과 mask-programmed (factory-programmed)의 차이를 조사 하여라.

2. 기본 게이트들을 사용하여 4:1 MUX를 설계하여라.

Page 17: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험

3. 위 문제의 회로를 MAX+plus II로 설계하고 source file(.gdf file)을 제출하여라.

4. 3-bit unsigned integer x2x1x0를 입력받아 1의 개수가 몇 개인지를 2-bit unsigned

integer로 출력하는 회로를 설계하시오. (sequential logic에서 배우게 될 counter와 혼동

하지 말것.)

5. 위 문제의 회로를 MAX+plus II로 설계하고 schematic을 인쇄하여 제출하여라.

6. 3-bit unsigned integer x2x1x0를 입력받아 parity bit x3을 생성하는 회로를 설계하시오.

단, x3x2x1x0에는 짝수개의 1이 들어 있어야 한다.

7. 위 문제의 회로를 MAX+plus II로 설계하고 schematic을 인쇄하여 제출하여라.

※ 이 실험에서는 위의 문제 3, 5, 7 번에서 설계한 회로를 직접 CPLD에 구현할 것입니

다. (“CPLD를 굽다”라고 표현합니다.) 따라서 각자 자신의 설계가 정확한 것인지 반드시

테스트해보고 실험에 들어오세요.

8. 4:1 MUX 에 대한 VHDL 프로그램을 시뮬레이션 해서 결과를 제출하여라.

실험 및 토론

1. 예비 보고서 3, 5, 7번 회로를 구현하고 실험을 통하여 확인한다.

2. 기본적인 신호등 제어기를 설계하여라. 2 bit의 상태 입력이 현재 시간의 상태를 나타

내 주며, 시간이 흐름에 따라 상태가 00 → 01 → 11 → 10 → 00 ... 과 같이 변한다고

가정한다. 이 상태 변화에 따라 각각 신호등도 빨간불 → 빨간불, 노란불 → 파란불 →

파란불, 노란불 → 빨간불 ... 과 같은 식으로 변하며, 이를 진리표로 표현하면 아래와 같

다.

CPLD를 이용하여 구현하여라. 입력의 변화는 빵판의 스위치를 사용하여 조작하도록 한

다.

상태입력 빨간불 파란불 노란불

00 1 0 0

01 1 0 1

11 0 1 0

10 0 1 1

Page 18: 제5장 PLD의 이해와 실습

2006년 1학기 논리설계 실험