PLD PAL GAL 22V10-WinCUPL로 logic 구현 하기
조회(7069)
HW/FPGA(VHDL) |2004/06/22 (화) 15:51
공감하기
|
스크랩하기(4)
이 문서에 사용한 툴은 다음 문서 참고 바랍니다..
PLD PAL/GAL 프로그램 - ATMEL WinCUPL
오래전에 PAL GAL을 프로그램할 때, PALASM을 사용했습니다만 DOS형으로 되어 있어 불편하고 편집기등이 없어 불편했는데 Atmel사의 WinCUPL로 바꾸었습니다.
CUPL은 ABEL이나 PALASM 같이 일종의 HW description laanguage 같은데 이 언어를 알아야 할 필요는 없이 몇가지만 알면 프로그램이 가능하다. 이것은 샘플을 보면 간단히 이해 되어 지는 것이므로 별로 고민할 필요는 없을 것이다.
회로를 표현하는 방법과 논리를 어떻게 나타내는가를 알기만 하면 된다. 헤드의 내용은 샘플에서 약간 변형하면 된다.
1. PIN 정의
각 핀에 이름을 부여하는 것으로 사용할 때 문자로 나타내면 이해가 쉬어 다음과 같이 '='로 표현 한다.
Pin 2 = IN1; -> 칩의 2번 핀을 'IN1'으로 이름을 부여 한다.
Pin [5..7] = [A1..3]; /*vector */ -> Vector 표현으로 몇개의 핀을 묶어 표현한다.PIN 5,6,7번을 A1,A2,A4로 이름을 부여 한다.
Pin 14 = OUT1; /* Output 1 */
핀이름에서 특성이 Input signal이냐 output signal이냐는 이미 PAL/GAL에 정의 되어 있다. 따라서 여기서 IN/OUT을 정의 할 필요가 없다.
2. 논리의 표현
PAL/GAL은 기본적으로 칩의 구조상 AND.OR, NOT으로 정의하는 것 외에는 필요가 없다. 따라서 이것의 표현만 알면된다. Table7 Logical operator 참조.
AND : &
OR : #
NOT : !
이것은 PALASM의 표현법을 그대로 사용해도 될것 같은데 한번 시험 바람.
OUT1 = IN1 & A1 & A2 & A3
# !IN1 & !A1 & !A2 & !A3;
다음은 WinCUPL에서 어떻게 프로그램하는지를 알기 위해 PAL/GAL의 간단한 회로를 예로구현 하였다.
일반적인 PAL/GAL은 모두가능하고, 여기서 예를 들은 대상 GAL은 22V10 이고 다음 그림과 같은 pin 구조를 가지고 있다.
PLD의 내부 구조는
출력단은 FF이 있는 구조 이고 일반적인 칩 이다.
회로는 ATMEL사의 WinCUPL을 사용 하였다. 다른 회사에서 간단한 PAL/GAL 프로그램을 찾았는데 규모가 큰 회로를 위한 것 이어서 사용하기가 복잡하고 여러가지 문제가 있다.
WinCUPL을 실행하면 다음과 같다.
회로를 입력하기위한 파일은 1개의 PLD 타입을 사용하여 위의 그림과 같이 편집기로 입력하면 된다. 물론 일반 text 편집기로도 가능하고 파일 open 하면 된다. 위의 그림과 같이 회로를 입력하고
메뉴 중에서 Run -> Device Dependent Compile을 실행하면 Compile하여 jedec 파일을 생성한다.
이 JEDEC 파일 생성은 PLD 파일의 Name 항목에서 정의 된 이름에다 .jed 붙여 만든다. 이 툴에 결과물이 파일이 있어서 표시가 돼지 않을수 있으니 주의 해야 한다. 물론 생성은 Option -> Compile에서 생성 파일을 설정 할 수 있다.
SIMSCH.JED의 내용
CUPL(WM) 5.0a Serial# 60008009
Device g22v10 Library DLIB-h-40-1
Created Tue Jun 22 15:39:59 2004
Name SimSch
Partno atf22v10c
Revision 01
Date 2004/06/21
Designer Song
Company icom
Assembly None
Location None
*QP24
*QF5892
*G0
*F0
*L02144 00000000000011111111111111111111
*L02176 11111111111111111111111111111111
*L02208 11111111101110110111111111111111
*L02240 11110000000000000000000000000000
*L02880 00000000000000000000000011111111
*L02912 11111111111111111111111111111111
*L02944 11111111111111111111101101111011
*L02976 11111111111111110000000000000000
*L03648 00001111111111111111111111111111
*L03680 11111111111111111111111111111111
*L03712 01111011101111111111111111110000
*L05344 00000000000000000000000011111111
*L05376 11111111111111111111111111111111
*L05408 11111111011111111111011101110111
*L05440 11111111111111111111101111111111
*L05472 10111011101111111111111111110000
*L05792 00000000000000000000000011111100
*L05824 00110110000101110100011001100011
*L05856 00100011001001110110001100010011
*C35E2
*E775
이 JEDEC 파일을 ROM 라이터로 읽어 write 할 수 있다. 물론 읽을 때는 jed 파일 형태로 선택 해야 한다.
회로 표현은 다음과 같이 파일로 만든다. WinCUPL의 파일 중에서 sample을 참조하면 여러가지 표현양식을 찾을 수 있다.
Name SimSch; - 회로 이름
Partno atf22v10c;
Date 2004/06/21;
Rev 01;
Designer Song;
Company icom;
Assembly None;
Location None;
Device g22v10;/* 이 정의는 중요한 요소임. */
/* type은 메뉴 Option->Device에 보면 얻을 수 있다. */
/****************************************************************/
/* Test simple circuit */
/****************************************************************/
/* 입출력을 위한 핀 정의 ***/
/** Inputs **/
Pin 2 = IN1; /* Input pin 1 */
Pin [5..7] = [A1..3]; /* Input vector */
/** Outputs **/
Pin 14 = OUT1; /* Output 1 */
Pin [17..19] = [O1..3]; /* Output vector */
/* 기능을 구현 한다. */
OUT1 = IN1 & A1 & A2 & A3
# !IN1 & !A1 & !A2 & !A3;
O1 = A1 & !A2 & !A3;
O2 = !A1 & A2 & !A3;
O3 = !A1 & !A2 & A3;
PAL/GAL은 결국 표현을 논리로표현하는데(Table7)Logical Operator을 참고하면된다.
다음 Device Selection은 칩을 정의하기 위한 다이얼로그 박스이다.
Devices에서칩을 선택하면 밑의 Device Mnemonic에 대표 칩 정의가 나타난다. 이것을
Device g22v10;
에서 사용한 것이다.
'Device g22v10;'는 칩의 모델명이 아니라 'Device Mnemonic을 사용하여 표현 한다. 이 는 각 회사 마다 칩 명칭이 다르므로 같은 이름으로 표현하는 것은 잇점이 있다.
Logic은 다음 표와 같다.
Flip-Flop을 사용하는 논리회로 구현
논리설계를 하다보면 combination회로만 필요한것이 아니라, seqence 회로가 필요하다. 이를 위해서는 출력 구조에서 FF의 표현이 필요하고 이 방법을 알아 봅니다.
다음 특수한 몇가지 표현을 다음 표와 같다. 주로 FF표현할 때 다음표를 참조할 수 있다.
만약 특정 FF을 사용 한다면 입력 D을 결정해야 하는데 다음과 같이 표현 한다.
Out.D = A1 & A2;
기타 중요한 요소는 RESET신호와 PRESET신호가 있다.
RESET : .AR
PRESET : .SP
만약 14번 핀이 출력이고 D-Flip-flop을 사용한다면
pin 2 = In1;
pin3 = In2;
pin4 = Res;
pin 14 = Sout;
Sout.d = In1 & In2; -- 입력 In1과 In2을 AND하여 입력 한다.
Sout.ar = !Res;
Sout.sp = ! In1 & ! In2;
와 같이 표현하면 된다. 밑의 그림을 참조하면 여러가지 표현이 가능함을 알 수 있다.
FF의 clock은 22V10은 1번 핀으로 고정되어 있다.
아래 표에서 CUPL의 항목을 사용하며 되며 다양한 출력 포드를 구성할 수 있다.
중요한 몇가지는
.D
.CK
.OE
.AP
.AR
.SP
.SR
주의 할것은 칩에 따라 위의 코드가 다 사용돼는것이 아닙니다. 따라서 compile과정에서 error가 날 수 있습니다. table12와 같이 다양한 것은 단지 PAL/GAL을 위한 것이 아니라 좀더 복잡한 CPLD급도 정의를 한 것입니다.
이 문서에서 예를 든 GAL 'G22V10'는 구조에서 CLK을 어느 논리회로로 구성할 수 없고 단지 1번 핀으로 입력 됩니다. 이런 경우 'out.ck = in1;'와 같은 코드는 문제가 됩니다.
다음 표는각 칩별로 가능한 Extensions에 대한 목록 입니다. 이 테이블은위와 같은 회로에서 확인할 수 있습니다.
다음 회로가 어떤 회로인지는 모르지만 생각나는데로 설계 보았습니다. FF을 이용하는 예 입니다.
DFF.PLD
Name DFF;
Partno AFT22V10C;
Revision 01;
Date 8/10/99;
Designer Song;
Company icom;
Location None;
Assembly None;
Device G22V10;
/* Test Register */
/*
Block Diagram
---------
| |
Logic ----->| |-----> Q / S
| |
| |
CLK ------->|> |
| |
---------
*/
/* Inputs */
pin 1 = CLK;
pin 2 = I1;
pin 3 = I2;
pin 4 = RES;
/* Outputs */
pin 14 = Sout;
pin 15 = Qout;
/* EQUATIONS */
Qout.d = I1 $ !I2;
Qout.ar = !RES;
Qout.sp = !RES;
Sout.d = Qout & I2;
Sout.ar = !RES;
Sout.sp = !RES;
위의 로직을 이용한 결과는 DFF.JED 이다.
CUPL(WM) 5.0a Serial# 60008009
Device g22v10 Library DLIB-h-40-1
Created Tue Jun 22 17:28:33 2004
Name DFF
Partno AFT22V10C
Revision 01
Date 8/10/99
Designer Song
Company icom
Assembly None
Location None
*QP24
*QF5892
*G0
*F0
*L00000 11111111011111111111111111111111
*L00032 11111111111100000000000000000000
*L04864 00000000000000000000111111111111
*L04896 11111111111111111111111111111111
*L04928 11110111111111111111111111111111
*L04960 11111111111100000000000000000000
*L05824 10000100000101000110010101000011
*L05856 00100011001001010110001100010011
*C1495
*8F4A
'기본 카테고리' 카테고리의 다른 글
LUA Tutorial (0) | 2007.10.10 |
---|---|
LUA 자료.. (0) | 2007.10.10 |
아날로그 회로 2 (0) | 2007.10.09 |
아날로그 회로 1 (0) | 2007.10.09 |
[무단펌] [무작정따라하기] SMD 타입도전기 (0) | 2007.10.08 |