다음블로그에 썼던 글 통합합니다.

GAL20V8B-25LPN 즉 GAL20v8을 샀다.

 

이것은 Lattice사에서 나온 제품으로 Gate Array Logic이라는 의미며 PAL과 함께 PLD (Programable Logic Device)라고 불린다.

내부에 10개의 Macrocell이 존재하며 한 Macrocell은 한개의 D-Flip Flop과 and, or, not등의 조합회로 뭉치로 구성된다.

특히 GAL20V8B는 24핀 DIP타입 칩으로 아래와 같이 핀이 배열된다. 

 

 

 

 GAL20V8B는 세가지 모드로 동작 가능하다.

 

- Registered mode: IO/Q 핀이 D-FF 출력 핀으로 되며 레지스터를 사용한 순차회로 프로그래밍이 가능하다.

                            이때 1번 pin I/CLK는 D-FF의 CLK로 사용되며 13번 I/OE바는 Register D-FF출력 Output Enable이 된다. (OE바가 0이면 출력되는 중, 1이면 출력 안되지만 내부에 D-FF값은 동작 중을 의미)

- Complext mode: Output only 또는 I/O 모드로 사용된다. 내부는 조합회로 모드와 비슷 (아직 잘 모르겠다. ㅋ)

- Simple mode: Combinational 조합회로 모드이다. 1번 pin I/CLK는 Input으로 사용되며 13번 I/OE바도 Input으로 사용된다. IO/Q는 조합 출력으로 사용된다.

 

이런 세가지 모드는 GAL compile할 때 컴파일러 옵션에 디바이스 타입을 다음과 같이 적어주면 설정이 된다.

atmel용 GAL 컴파일러 무료 프로그램 WinCUPL을 사용하면 CUPL이며 simple모드로 사용하려면 장치 타입을 G20V8AS로 하면된다.

 

 

무료 도스용 프로그램 PLDASM 인가 OPALjr21은 뭘로 설정해야 하는지 아직 잘 모르겠다.

 

일딴 WinCUPL로 해봤다. 컴파일 옵션에 보면 atmel GAL만 되지만, 그냥 atmel GAL20V8B로 연결하면 되는거 같다.

GAL 프로그래밍 절차는 다음과 같다.

 

- GAL프로그램 작성 (WinCPUL 사용)

- GAL프로그램 시뮬레이션 테스트 (WinCUPL 사용)

- GAL프로그램 컴파일하여 jed파일 생성 (WinCUPL 사용)

- jed파일을 GAL 프로그래머로 칩에 굽기 (TOP2004 Rom writer 및 TopWinEn을 사용)

 

WinCUPL에서 프로젝트 새로 생성하고 다음과 같이 작성했다.

이번 GAL 프로그램은 simple모드로 작성하였다. 따라서 Device 줄에 g20v8as라는 디바이스 타입을 선택하였다.

 

GALTEST.PLD

-----------------------------------------------------------------------

Name     galtest ;
PartNo   00 ;
Date     2008-11-15 ;
Revision 01 ;
Designer Engineer ;
Company  bro ;
Assembly None ;
Location  ;
Device   g20v8as ;

 

pin [1,2] = [sel_1, sel_2];    /*입력 핀 할당*/
pin [15..21] = [b,a,f,g,c,d,e]; /* 출력 핀 할당 7segment로 들어간다*/
/*
7 segment
 --A--
|     |
F     B 
|--G--|
E     C
|     |
 --D--
anoe type: active low
*/

[a,b,c,d,e,f,g] =    ( (!sel_1 & !sel_2) & 'b'0000001 )    /* 0 1111110 */
                   # ( ( sel_1 & !sel_2) & 'b'1001111 )    /* 1 0110000 */
                   # ( (!sel_1 &  sel_2) & 'b'0010010 )    /* 2 1101101 */
                   # ( ( sel_1 &  sel_2) & 'b'0000110 );   /* 3 1111001 */

-----------------------------------------------------------------------

대충 소스는 입력핀,출력핀을 할당하고 이름을 메겨준다.

그리고 출력핀 = 입력핀 연산자 입력핀 이런식으로 해주면된다.

!는 not, #는 or, &는 and이다.

특히 쉽게 프로그램 하기 위해서 GAL출력 pin15부터 21까지를 7segment의 옆으로 놓았을때의 핀 배열에 맞춰서 이름을 매겨줬다.

 

컴파일했더니 에러 없다.

 

시뮬레이션해봤다.

 

 

sel_1과 sel_2가 00이면 0이니까 7 segment의 각 핀 a, b, c, d, e,f, g들에 대해 0000001로 설정된다. 7 segment anode type이기 때문에 0이 세그먼트에 불이 들어오는것이라 이렇게 설정하게 된다.

 

일단 컴파일하면 GALTEST.JED가 생성된다.

이 텍스트 파일만 있으면 TOP2004같은 롬라이터로 GAL칩을 구울 수 있다.

 

롬라이터로 굽기

이번에 ebay에서 산 TOP2004에는 굽기 프로그램으로 TopWinEn이 들어있다.

TOP2004로는 gal20v8을 구울수 있다. (다행이다. gal20v10을 구울수 있다고 리스트엔 뜨나 어느 러시안 블로거 포스트에서 안된다는 소리도 들린다; 역시 중국제 30달러.. 싸구려라 그런가보다 - 배송료는 37달러였음; )

 

TopWin프로그램을 실행한 후 Load 툴바 버튼을 누르고 아까 생성한 GALTEST.JED파일을 연다.

 

 Type 툴바 버튼을 눌러서 GAL Class를 선택하고 LATTICE사의 GAL20V8을 선택한다.

 

그러면 W/R을 눌렀을때 나오는 창이 자동으로 나온다. Run만 누르면 된다.

가끔 Blank configure error라든가 뭐시기 중국제 냄새가 물신 풍기는 에러들이 자주 난다.

PC를 꺼따켜주시거나, USB를 빼따 다시 꼽고, 프로그램은 당연히 꺼논 상태에서.. 등등 잘 해보면 다시 잘될때가 있는거 같다.

 

 이제 GAL안에 내가 짠 로직이 들어가 있다.

 

 

풀다운 저항 로직으로 DIP 입력 발생하기

 

야호. 그럼 DIP switch의 두개를 ON시키면 1을 발생시키고 OFF시키면 0을 발생시키게 한 후 이를 GAL의 pin 1,2 입력으로 연결해주자.

이 때 DIP 스위치는 내부적으로 그냥 ON하면 연결하고 OFF하면 끊어버리는 것이기 때문에 Vcc (1) 선을 DIP에 넣고 ON하면 1이 가지만 OFF하면 0 GND가 가는게 아니라 그냥 끊어진 상태가 된다 -_-... 이때엔 풀 다운 저항 신공을 펼쳐야 한다.

Vcc (1) -- DIP --- 저항 ---- GND 로 연결하고 DIP과 저항 사이의 선을 따다가 쓰면 DIP이 ON되면 1이 되고 OFF되면 0이 나오게 된다.

 

 

 그리고 GAL 출력 pin 15 IO/Q 부터 21까지 7개를 7 segment의 a,b,c,d,e,f,g를 연결한다.

이때 7 segment 태워먹지 않게 저항을 붙여준다. (이게 젤 중요 -0-)

 

 

아래는 DIP 스위치 0번과 1번을 움직이면서 (DIP스위치 쪼그맣고 안움직여서 화가난다 참아야한다. 힘줘 움직이다보면 DIP스위치가 빠진다. ㅋ)

 

 

 

 

 

 

 

'KB > TTL' 카테고리의 다른 글

GAL20v8 를 활용한 4 bit counter  (0) 2009.02.02
Combination 74LS181, 74S182  (0) 2009.01.30
7 segment와 DIP switch 사용  (0) 2009.01.20
오실레이터 1Mhz와 4bit 193 카운터 사용  (0) 2009.01.20

+ Recent posts