Experiment 5. Use of Generic Array Logic Abstract 본실험에서는임의의복잡한회로를구현하기위한방법으로수업시간에배운 Programmable Logic Device(PLD) 를직접프로그램하여사용해보도록한다. 첫째로, 본실험에서는한번프로그램되면퓨즈를끊는방향으로만수정할수있는 Programmable Array Logic을대신하여, 재생가능한 Array Logic을가지는 Lattice사의 Generic Array Logic(GAL) Chip을이용하여임의의복잡한 Logic을구현한다. GAL Chip은 Array Logic을수정할수있기때문에실수등에의한잘못된식을바로잡을수있다는장점이있다. 둘째로, GAL에구현될 Programmable Logic을작성하기위하여, JEDEC(Joint Electron Device Engineering Council) 표준프로그래밍언어를익힌다. 이를통하여이진수의곱셈기 (Binary Multiplier) 를직접작성해보도록한다. 1. Theoretic Backgrounds 1.1. Programmable Array Logic & Generic Array Logic Programmable Array Logic은 Programmable Logic Device(PLD) 의일종으로, 내부의 gate들이 programmable fuse들로연결된구조를가지는 Circuit이다. 이 Gate들은각각 AND Array와 OR array로나누어구현되어있으며, 이를통하여 Sum of Product 형태의 Logic을만들어낼수있다. Programmable Array Logic은 PROM, PAL, PLA의세가지종류가있으며, 본실험에서는 PAL의일회성이며수정이불가능한문제를보완한 GAL(General Array Logic) Chip을사용하도록한다. 현재실험실에보유중인 GAL Chip은 GAL16V8D, GAL20V10D( 소량 ), GAL22V10D 의 3가지종류이다.
그림 1. GAL 의 Functional Table 및 Pinout GAL의 Function Tabe과 Pin Description은일반적인 Logic Gate들과는다른기호들로이루어져있음을알수있다. 우선 Programmable AND-Array는 PAL과동일한구조로이루어져있으나, Fuse 대신반도체소자를사용하여 Reprogramming이가능하다. OLMC는 Output Logic Macrocell의약자로, 반도체소자를사용한 AND-Array에서의결과를 Output 신호로증폭 / 전달하는역할을수행한다. 자세한내용은본실험에서의목적을벗어나므로생략한다. 각각의 PIN 에대한설명은아래와같다. Pin Description 설명 I Input PIN I/CLK Sequential Logic chip을작성할때, Clock Input을받아들이는 PIN이다. 본실험에서사용하지않는다. I/ (OE) Input PIN이지만, Output Enabler로, 이 PIN에 Logical 0을입력할경우모든 Output을사용하지않고 Input으로만사용한다. Sequential Logic일때사용가능하다. I/O/Q Input / Output 겸용 Chip으로, I/OE PIN이 Disable되어있거나 Open 상태일때 Output Pin으로사용가능하다. 즉, 일반적인 Combinatorial Logic 에서는 Input PIN 으로 2~9 번, Output PIN 으로 12~19 번의각 8 개씩을사용할수있음을의미한다. 자세한것은 datasheet 를참고한다.
1.2. JEDEC Standard PLD Programming Format JEDEC Standard PLD Programming Format은미국반도체산업협회규약에서정한표준프로그래밍방식으로, PLD Chip들을프로그래밍하기위한언어이다. 본실험에서는이언어의심도있게학습하지는않으며, GAL Chip을사용하기에필요한수준으로만학습한다. 이언어로프로그래밍된 Chip들은 PLD Programming Device를통하여실제구현되게된다. PLD를프로그래밍하기위한 Tool로써본실험에서는 WinCupl을사용하도록한다. 크게 Chip Programming code는선언부 (Declaration segment), PIN 선언 (PIN Declaration), 불대수식부 (Boolean Equation Segment) 을이용하여 coding을수행하며, Simulation 파일을제작하여이렇게 coding된 chip이올바르게작동하는지시뮬레이션한다. 선언부는예약어들을이용하여 Chip의이름, 버전, 제작자, 제조사를정의하고, 어떤 PLD Chip을사용할것인지정의한다. PIN 선언부에서는 PLD Chip의각각의 PIN에이름을부여한다. 만약 Sequential Logic을사용할경우 Clock input도사용할수있다. 주의할점은, 각각의 Chip마다 VCC와 GND PIN은정해져있는데, 이두개의 PIN은절대로바꿔서는안된다. 예를들어, 실험에서사용할 GAL16V8D Chip은총 20개의 PIN으로구성되어있으며, Input PIN과 Output PIN을합쳐서총 16개의입출력 PIN이있다. 이 Chip에서는 10번이 GND, 20번이 VCC이므로아래 Code에서처럼선언해주고사용하지않거나, 비워두어야한다. 통상적으로 Input PIN에는대문자를, Output PIN을소문자를사용하여이름을설정한다. PIN 설정을마친뒤에는, Boolean algebra 를이용하여아래와같이각출력에해당하는 Boolean algebra 식을써준다. 이때, And 연산은 &, Or 연산은 #, Not 연산은!, XOR 연산은 $ 으로표현된다. 단, NAND, NOR 등은 NOT AND, NOT OR 로풀어서써야한다. Simulation 파일에서는처음에 Input 순서 (ORDER) 를정의하고, 각각의 Input 들과그에따른 Output 을미리정의한 Vector 들을테스트하도록지정한다. Simulator 에서는아래 Vector 를확 인해서주어진 Input 에따른 chip 의출력값과같은지를확인하게된다. 아래는 7-Segment Decoder의 Programming Code와 Simulation Code이다. 몇개의중요한예약어만간략히기술하자면, DEVICE는어떤 chip을사용할것인가를나타내며, 실험에서사용할 GAL16V8D는몇개의 variation이있는데, 이를통틀어서 g16v8a로나타내게되어있다. 만약 22개의입출력 PIN을가지는 GAL22V10D를사용하고싶으면, g22v10d를 DEVICE에써주면된다. 당연히, GND와 VCC의번호가달라지므로 PIN Description에서이도같이수정해야한다. 더자세한사항및프로그래밍방법은실험보조자료를참고하기바란다.
(1) 7seg.PLD NAME 7-Segment Decoder; PARTNO 00; DATE 2013-04-28; REVISION 1.0; DESIGNER Yongjae Yoo; COMPANY POSTECH; ASSEMBLY None; Location ; DEVICE g16v8a; /* PIN Description*/ PIN 2 = A ; PIN 3 = B ; PIN 4 = C ; PIN 5 = D ; PIN 10 = GND ; PIN 13 = oa ; PIN 14 = ob ; PIN 15 = oc ; PIN 16 = od ; PIN 17 = oe ; PIN 18 = of ; PIN 19 = og ; PIN 20 = VCC ; /*EQUATIONS*/ oa = A # C # B & D #!B #!D; ob = A #!B # C & D #!C #!D; oc = A # B #!C # D; od = A #!B & C #!B &!D # C &!D # B &!C # D; oe =!B &!D # C &!D; of = A # B &!C # B &!D #!C &!D; og = A # B &!C # B &!D #!B & C; (2) 7SEG.SI NAME 7-Segment Decoder; PARTNO; REVISION 1.0; DESIGNER Yongjae Yoo; COMPANY POSTECH; DATE 28/04/13; DEVICE g16v8a; /*SIMULATION */ ORDER: A, B, C, D, oa, ob, oc, od, oe, of, og; VECTORS: 0 0 0 0 H H H H H H L 0 0 0 1 L H H L L L L 0 0 1 0 H H L H H L H 0 0 1 1 H H H H L L H 0 1 0 0 L H H L L H H 0 1 0 1 H L H H L H H 0 1 1 0 H L H H L H H 0 1 1 1 H H H L L L L 1 0 0 0 H H H H H H H 1 0 0 1 H H H H L H H 1 0 1 X X X X X X X X 1 1 X X X X X X X X X
그림 2. Simulation 결과. 위쪽녹색선이 Input, 아래쪽파란색선이 Output 이며, Don t care 는 하늘색으로나타난다. 1.3. Binary Multiplier 이진수에서의곱셈연산은 AND 연산과덧셈연산을반복하여구현할수있다. 예를들면, 이 진수 1101 과 0110 을곱하는연산을수행한다면, 아래예시와같이 Multiplier 의자릿수만큼을 Shift 하여 0 일경우 0000 을, 1 일때는 Multiplicand 를더하는것을의미하게된다. 그림 3. 4bit 이진수의곱셈연산예시 (13 * 6 = 78) 이진수의덧셈은덧셈기 (Adder) 를이용하여구현할수있으며덧셈기또한논리회로로구현되어있으므로, 2-bit Multiplier는다음그림 4에서설명한바와같이나타낼수있다. 2bit의입력두개를각각 A 1 A 0, B 1 B 0 라하면, Output xyzw 의각각의자릿수는아래와같은식으로표현할수있다. (Simplification하지않은결과이다.)
x = A % B % (A % B ) )(A ) B % ) y = A % B ) A ) B % A % B % - + A % B ) A ) B % - A% B % z = A % B ) A ) B % + A % B ) A ) B % w = A ) B ) 식 1. 2bit Multiplier 의출력 그림 4. 2-bit Binary Multiplier 실험에서는이를한자리확장하여, 3-bit 이진수두개 A 2 A 1 A 0, B 2 B 1 B 0 를입력받아곱셈연산 을수행하여결과 c 5 c 4 c 3 c 2 c 1 c 0 을출력하는 Chip 을작성하도록해본다. 2. Experimental Setup l WinCupl 프로그램을이용하여 3-bit Binary Multiplier 를작성하고, Simulation 을해본다. PLD 파일과 SI 파일, JED 파일을실험시간에필히가져오도록한다. (USB 또는 e-mail, 스토리지등 ) l GAL Chip 은 GAL16V8D, GAL22V10D 둘중하나를사용한다. ( 혹시컴파일이되고런타임오류또는프로그램이다운되는현상이있더라도폴더를확 인해보면정상적으로 PLD 파일과 si 파일, JED 파일은출력되어있으므로걱정하지말 것. Win98 / Win2000 에서사용하는구버전의컴파일러이므로발생하는문제로보임.)
3. Experiments l 실험에서는 WinCupl 을이용하여작성해온 JED 파일을 Universal Chip Programmer 를사 용하여 GAL Chip 에이식후, Logic Lab Kit 에서정상동작여부를확인한다. l 정상동작하지않을경우, 작성한 Program 이문제가있으므로 Debugging 하도록하며, Simulation 결과와비교해본다. 4. Grading Criteria 1) GAL 의기능을이해하고, PLD Programming 을올바르게수행하였는가? 2) 3-Bit Binary Multiplier 의기능을이해하고올바르게구현하였는가? Reference Young-Joo Seo, POSTECH CS273 Digital System Design, Lecture Note #5, Page 30~34 Donghoon Yeo, WinCupl Installation and Programming Guide, 2010 POSTECH CS274 Digital System Laboratory Lab Material.