Página 1 de 1

GAL16V8

MensagemEnviado: 26 Mar 2009 16:36
por Francesco
Tenho estudado este componente com bastante cuidado, mas nunca encontrei muita documentação. Alguém sabe como é a linguágem para programa-lo?

Tenho um esquema de gravador que encontrei no site ELM-CHAN, me parece muito bom. Gostaria de fazer alguns testes, mas pelo que li, este componente é OTP. Isso é correto?

MensagemEnviado: 26 Mar 2009 17:05
por EDSONCAN
Primeiro tem que ter mais de 40 anos para conhecer esse treco.

Algumas eram OTP (PAL) e as GAL são regravaveis.
Tinha um tal de PALASM e um WINCUPL da Atmel, se não me falha a memoria.
Esse é um projeto que fiz a muito tempo:

;GAL16V8 USB_CPU.txt
;Data : 19/06/05 Ultima Revisao :
;Responsavel : Edson

CHIP EMPCPALL GAL16V8


;Pinos
; 1 2 3 4 5 6 7 8 9 10
NC1, S1, S2, S3, S4, S5, S6, NC2, NC3, GND,
;11 12 13 14 15 16 17 18 19 20
NC4, NC5, NC6, NC7, NC8, NC9, SELEEPROM, SELTECL, SELLCD, VCC

;Equacoes

SELLCD = S1 * /S2 * /S3 * S4 * S5 * S6
/SELTECL = /S1 * S2 * /S3 * S4 * S5 * S6
SELEEPROM = S1 * S2 * /S3 * S4 * S5 * S6

;SEL3=0 SEL4=SEL5=SEL6=1
;SELLCD=1 - SELECIONADO SEL1=1 E SEL2=0 E SEL3=0
;SELTECL=0 SELECIONADO SEL1=0 E SEL2=1 E SEL3=0
;CSEEPROM=1 SELECIONADO SEL1=1 E SEL2=1 E SEL3=0

E esse é o arquivo JED que o compilador gerou para grava-la

*G0
*F0
*L0000 11111111111111111111111111111111
*L0032 01111011101101110111011111111111
*L0256 11111111111111111111111111111111
*L0288 10110111101101110111011111111111
*L0512 11111111111111111111111111111111
*L0544 01110111101101110111011111111111
*L2048 10100000
*L2120 11111111
*L2128 1111111111111111111111111111111111111111111111111111111111111111
*L2192 11

MensagemEnviado: 26 Mar 2009 18:05
por Francesco
Edson,

Acho que comecei a entender. Eu baixei um "compilador" palasm, e vejo em muitos lugares vendendo GAL por preços relativamente baixos. Tenho algumas pequenas dúvidas básicas...

No caso dos pinos, você deu nomes para eles? O pino 2 chama S1, o pino 3 chama S2?

No caso de /S2 entendo que é S2 invertido, e imagino que * seja AND. Suponho que + seja OR. Quais as outras operações que eu poderia fazer?

Muito obrigado.

Francesco

MensagemEnviado: 27 Mar 2009 07:25
por EDSONCAN
Francesco escreveu: No caso dos pinos, você deu nomes para eles? O pino 2 chama S1, o pino 3 chama S2?
OK

No caso de /S2 entendo que é S2 invertido, e imagino que * seja AND. Suponho que + seja OR. Quais as outras operações que eu poderia fazer?
OK, mas tem diferenças linguagem devido ao compilador,

Depende da estrutura, tem algumas que tem registradores e pinos de CLK, portanto basicamente arranjos logicos.


Francesco

MensagemEnviado: 30 Mar 2009 23:45
por tcpipchip
EdsonCan

Exato, eh o WINCUPL...usei o bixim em 1991....funciona muito bem...

Eu tenho instalador...nao sei se ja tornou free :( ?

Acho que posso passar ?

Anexo o exemplo da epoca que fiz para ajudar...voce gera um arquivo JEDEC....

Pura logica booleana...mas tinha a opcao de sintese! :)

Name Cheq_pre_2;
Partno 000;
Date 30/10/1991;
Revision 0.56;
Designer Miguel Alexandre Wisintainer;
Company FUCK THAT COMPANY
Assembly None;
Location None;
Device GAL16V8;

$DEFINE Y4 !((!A13 & !A14 &A15) & ENABLE_138)
$DEFINE Y5 !((A13 & !A14 &A15) & ENABLE_138)
$DEFINE Y6 !((!A13 & A14 &A15) & ENABLE_138)
$DEFINE Y7 !((A13 & A14 &A15) & ENABLE_138)

/****************************************************************/
/* */
/* FOR REDUCE SIZE OF CHEQUE-PRE/NETMACHINE */
/****************************************************************/

/** Inputs **/

PIN 1 = clock;
PIN [2,3,4,5] = [A12..A15];
PIN 10 = WR;
PIN 11 = RD;
PIN 13 = PSEN;
PIN 14 = ALE;
PIN 22 = EA;

/** Outputs **/

PIN 15 = ENABLE_WR_RAMTRON;
PIN 16 = ENABLE_RAM;
PIN 17 = ENABLE_ROM;
PIN 18 = ENABLE_LCD;
PIN 19 = READ_RAM_ROM;
PIN 20 = ENABLE_138;
PIN 21 = CLOCK_SEIKO;

/** Temporary variables **/

NODE Q0;
NODE Q1;
NODE Q2;
NODE Q3;
NODE Q4;
NODE Q5;
NODE Q6;
NODE Q7;

/** Logic Equations **/

ENABLE_WR_RAMTRON= !EA # WR;
ENABLE_RAM = (A12 & A13 & A14 & A15) # (Y4 & Y5 & Y6 & Y7);
ENABLE_ROM = A15 # ALE;
ENABLE_LCD = ( !((!(! WR)) & (!(!RD))) ) & ( (!(!A12)) & (!(!A13)) & (!(!A14)) & (!(!A15)) ) ;
READ_RAM_ROM = (RD & PSEN);
ENABLE_138 = !(RD & WR & PSEN);

/** FOR TCP/IP SEIKO STACK - CLOCK GENERATOR **/

Q7.SP='b'0;
Q6.SP='b'0;
Q5.SP='b'0;
Q4.SP='b'0;
Q3.SP='b'0;
Q2.SP='b'0;
Q1.SP='b'0;
Q0.SP='b'0;

Q7.AR='b'0;
Q6.AR='b'0;
Q5.AR='b'0;
Q4.AR='b'0;
Q3.AR='b'0;
Q2.AR='b'0;
Q1.AR='b'0;
Q0.AR='b'0;

Q7.T='b'1;
Q6.T='b'1;
Q5.T='b'1;
Q4.T='b'1;
Q3.T='b'1;
Q2.T='b'1;
Q1.T='b'1;
Q0.T='b'1;

Q0.CK = clock;
Q1.CK = !Q0;
Q2.CK = !Q1;
Q3.CK = !Q2;
Q4.CK = !Q3;
Q5.CK = !Q4;
Q6.CK = !Q5;
Q7.CK = !Q6;

CLOCK_SEIKO = Q7;