제 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는빠른성능이
나정확한타이밍의예측이필요로하는곳에적합하다. 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) 는 2 n 개의입력과 n bit의 selector를이용하여여러개의입력중하나를출력으로내보내는논리소자이다. 즉, 4:1 MUX 의경우 2 bit의 selector를이용하여 4개의입력중 1개만을출력으로내보낸다. 4:1 MUX의경우다음과같은진리표를가진다. I 3 I 2 I 1 I 0 S 1 S 0 Out X X X X 0 0 I 0 X X X X 0 1 I 1 X X X X 1 0 I 2 X X X X 1 1 I 3 표 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) 를선택한다.
[ 그림 5-1].gdf file 생성 2) Symbol 탭의 Enter Symbol ( 또는 schematic 상에서더블클릭 ) 을선택하여 기본논리소자를가져와 MUX 를설계한다. [ 그림 5-2] 기본소자를가져오는창
2:1 MUX 의 input을 I1, I0, Selector를 S, Output 을 O 라고했을때 O = S *I 0 + S*I 1 으로표현될수있다. 따라서 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를만든다
[ 그림 5-5] schematic 을저장 5) MAX+plus II 탭의 Compiler 를이용해서 compile 한다. ( 이때.pof file 이 생성되는데이파일을 WACCESS 라는프로그램을이용하여 CPLD 에굽는다.) [ 그림 5-6] MAX+plus II 의 compiler 위의그림에서 start 를 click 해서 compile 을수행한다.
[ 그림 5-7] error 없이수행된 compile 과정 schematic 에문제가없다면 compile 이수행되고위와같은메시지가뜬다. [ 그림 5-8].pof file 의생성
CPLD 를구울때사용할.pof 파일이생성되었는지확인해볼수있다. 6) 내가원하는 pin 으로특정포트를보내고싶은경우에는포트 ( 입력, 출력 ) 들의 pin 번호를수동으로정해준다. Assign 탭의 Pin/Location/Chip 을선택하면다음과같은창이뜬다. [ 그림 5-9] Pin 번호를 assign 하는창 이창에서 Search 를 click 하여우리가사용하는포트들을불러온다. [ 그림 5-10] Node Data Base 창
이창에서 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
이렇게 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
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 를실행시키면다음과같은메인화면이뜬다.
[ 그림 5-17] ALL-11 main 화면 여기서 Device 탭을선택하면 vendor와 chip 이름을차례로선택할수있다. 우리는 Altera 사의 EPM7064SLC 라는 CPLD를사용한다. [ 그림 5-18] vendor 선택화면 여기에서 Altera를선택하면다음과같이 Altera 의 CPLD 이름들이나열된다. 여기서 MAX7000S 계열의 EPM7064SLC44 를선택한다.
[ 그림 5-19] CPLD 를선택 CPLD 를고르고나면다음과같은화면이뜬다. [ 그림 5-20] CPLD 를굽기위해.pof 를 load 해야한다. 여기서 File 탭의 Load POF_FILE to programmer buffer 를선택해서굽고자하는.pof file 을 load 해온다.
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; 라는명령어를처음에
추가한다. 일반적으로많이사용하는 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의가장기본적인구조를이룬다.
[ 그림 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;
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에대하여각각의특징과장단점을비교하여라. 그리고, fieldprogrammable과 mask-programmed (factory-programmed) 의차이를조사하여라. 2. 기본게이트들을사용하여 4:1 MUX 를설계하여라.
3. 위문제의회로를 MAX+plus II 로설계하고 source file(.gdf file) 을제출하여라. 4. 3-bit unsigned integer x 2 x 1 x 0 를입력받아 1 의개수가몇개인지를 2-bit unsigned integer로출력하는회로를설계하시오. (sequential logic에서배우게될 counter와혼동하지말것.) 5. 위문제의회로를 MAX+plus II 로설계하고 schematic 을인쇄하여제출하여라. 6. 3-bit unsigned integer x 2 x 1 x 0 를입력받아 parity bit x 3 을생성하는회로를설계하시오. 단, x 3 x 2 x 1 x 0 에는짝수개의 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